Amazon EC2で構築するOpenOnDemand 検証環境の作り方

Amazon EC2で構築するOpenOnDemand 検証環境の作り方

Clock Icon2025.03.17

はじめに

OpenOnDemand は HPC クラスタ環境へブラウザからアクセスするための Web ポータルです。本記事では EC2 インスタンスに OpenOnDemand の検証環境を構築する手順を紹介します。

OpenOnDemand-1.png

実際に導入する際にはいくつかのハマりどころがあります。まずは動作する環境を構築し、OpenOnDemand の基本的な機能や設定方法を理解することを目的としました。

詳細は公式ドキュメントをご参照ください。

OpenOnDemand とは

OpenOnDemand は、Ohio Supercomputer Center(OSC)が開発・管理する Web ポータルです。ブラウザから HPC クラスタを操作できる利点から、世界中の 400 以上の HPC センターで採用されています。

主な特徴は以下の通りです。

  • CLI のシェルアクセス
  • インタラクティブなアプリケーションの実行
  • ファイルのアップロード・ダウンロードの操作
  • ジョブのサブミットや、管理
  • GPU 環境とデスクトップアプリケーションの操作

日本を代表するスパコン「富岳」でも 2023 年 5 月から OpenOnDemand が採用されています。従来、スパコン利用にはシェル操作や SSH 鍵の作成など前提知識が必要でした。OpenOnDemand により、ブラウザから富岳を簡単に操作できるようになりました。

「富岳」におけるOpen OnDemandの活用事例

検証内容

今回の検証では以下の構成で OpenOnDemand を導入しました。

項目 内容
EC2インスタンス t3.small
EBS(gp3) 8GB
OS Ubuntu 24.04
OpenOnDemand v4.0.1
認証方式 PAM認証(本番環境では非推奨)
SSL証明書 Let's Encrypt(EC2のEIPに対して発行)
目的 ホストサーバへのターミナル接続

公式ドキュメントだけでは実際の導入時の問題点が見えにくいです。特に認証や SSH 接続の設定は理解しづらい部分があります。そこで最小構成での動作環境構築を目指しました。

導入手順

1. OpenOnDemandのインストール

まずは OpenOnDemand をインストールします。

sudo apt install -y apt-transport-https ca-certificates
wget -O /tmp/ondemand-release-web_4.0.0-noble_all.deb https://apt.osc.edu/ondemand/4.0/ondemand-release-web_4.0.0-noble_all.deb
sudo apt install -y /tmp/ondemand-release-web_4.0.0-noble_all.deb
sudo apt update

sudo apt install -y ondemand

sudo systemctl start apache2
sudo systemctl enable apache2

2. PAM認証の設定

PAM 認証を簡易的な認証方式として設定します。これにより Linux システム上のユーザーアカウントで Web インターフェースにログインできます。つまり、/etc/passwdに登録されたユーザー名とパスワードで OpenOnDemand にアクセスできるようになります。

この方法の利点は、別途認証システムを構築せず既存の Linux ユーザーを活用できることです。例えば EC2 インスタンスのubuntuユーザーでログインできます。ただし、システム上の全ユーザーが Web インターフェースにアクセスできるようになるため、不要なアカウントは事前に削除しておきましょう。

# mod_authnz_pamモジュールのインストール
sudo apt install -y libapache2-mod-authnz-pam

# モジュールを有効化
sudo a2enmod authnz_pam ssl

# PAM設定ファイルの作成
sudo cp /etc/pam.d/sshd /etc/pam.d/ood

# /etc/shadowファイルの権限設定(注意)
sudo chmod 640 /etc/shadow
sudo chgrp www-data /etc/shadow

3. ユーザーマッピングの設定

認証ユーザーをシステムユーザーにマッピングする設定します。このスクリプトはログインユーザー名を小文字に変換し、システムユーザーとして認識させます。

# ディレクトリの作成
sudo mkdir -p /opt/ood/ood_auth_map/bin

# ユーザーマッピングスクリプトの作成
cat << 'EOF' | sudo tee /opt/ood/ood_auth_map/bin/ood_auth_map.regex
#!/bin/bash

REX="([^@]+)"
INPUT_USER="$1"

if [[ $INPUT_USER =~ $REX ]]; then
  MATCH="${BASH_REMATCH[1]}"
  echo "$MATCH" | tr '[:upper:]' '[:lower:]'
else
  # can't write to standard out or error, so let's use syslog
  logger -t 'ood-mapping' "cannot map $INPUT_USER"

  # and exit 1
  exit 1
fi
EOF

# スクリプトに実行権限を付与
sudo chmod +x /opt/ood/ood_auth_map/bin/ood_auth_map.regex

4. Let's Encryptで証明書を取得

SSL 証明書を取得します。事前準備として以下が必要です。

  • EC2 の EIP をドメイン名に登録する
  • セキュリティグループで 80 番ポートを開放する
# Certbotのインストール
sudo apt install -y certbot python3-certbot-apache

# 証明書の取得(対話式)
DOMAIN_NAME=openondemand.example.com
sudo certbot --apache -d $DOMAIN_NAME
# プロンプトに従ってメールアドレスなどを入力

# 自動更新の設定
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer

証明書取得時に以下のようなプロンプトが表示されたらcでキャンセルします。

Deploying certificate

We were unable to find a vhost with a ServerName or Address of openondemand.example.com.
Which virtual host would you like to choose?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ood-portal.conf                |                       |       | Enabled
2: 000-default.conf               |                       |       | Enabled
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

5. OpenOnDemandの設定

OpenOnDemand のポータル設定です。ここで PAM 認証を指定しています。

cat << EOF | sudo tee /etc/ood/config/ood_portal.yml
# サーバー名の設定
servername: $DOMAIN_NAME

# SSL設定
ssl:
  - 'SSLCertificateKeyFile "/etc/letsencrypt/live/$DOMAIN_NAME/privkey.pem"'
  - 'SSLCertificateFile "/etc/letsencrypt/live/$DOMAIN_NAME/fullchain.pem"'

# PAM認証の設定
auth:
  - 'AuthType Basic'
  - 'AuthName "Open OnDemand"'
  - 'AuthBasicProvider PAM'
  - 'AuthPAMService ood'
  - 'Require valid-user'

# ユーザーマッピングの設定
user_map_cmd: "/opt/ood/ood_auth_map/bin/ood_auth_map.regex"

# ノードURIの設定
node_uri: '/node'
rnode_uri: '/rnode'
EOF

# Apache設定ファイルの生成
sudo /opt/ood/ood-portal-generator/sbin/update_ood_portal

設定に問題がないか確認し、Apache を再起動します。

sudo apache2ctl configtest
sudo systemctl restart apache2

以上の設定でポータルへのアクセスは可能にります。

動作確認

Web ブラウザで OpenOnDemand のポータル用に設定したドメイン名へアクセスします。すると以下の Basic 認証画面が表示されます。既定のubuntuユーザーにはパスワードが設定されていなかったのでパスワードを設定して入力しました。

Cursor_と_ログイン.png

素っ気ない感じのポータル画面にログインできました。ユーザー認証は機能しました。

Cursor_と_Dashboard_-_Open_OnDemand_🔊.png

シェルアクセスが可能か試してみます。

Cursor_と_Notification_Center-14.png

クラスターの設定をしないと何も使えなかったです。

Cursor_と_Notification_Center-13.png

ユーザー認証付きの Web ポータルへのアクセスまでは動作確認できました。

Web ポータルの設定

1. クラスター設定

OpenOnDemand で利用するクラスターの設定をします。今回はローカルホストにシェルアクセスができるクラスターとして設定します。

sudo mkdir -p /etc/ood/config/clusters.d

sudo bash -c 'cat > /etc/ood/config/clusters.d/my_cluster.yml << EOF
---
v2:
  metadata:
    title: "My Linux Cluster"
    url: "https://openondemand.example.com"
    hidden: false
  login:
    host: "localhost"
  job:
    adapter: "linux_host"
    submit_host: "localhost"
    ssh_hosts:
      - host: "localhost"
    site_timeout: 7200
    debug: true
    strict_host_checking: false
    tmux_bin: "/usr/bin/tmux"
  batch_connect:
    basic:
      script_wrapper: |
        export PATH="/opt/ood/linuxhost_adapter/bin:\$PATH"
        %s
EOF'

2. SSH 設定

OpenOnDemand からローカルホストへの SSH 接続を設定します。

# tmuxをインストール
sudo apt install -y tmux

# SSHの設定ファイルを編集
sudo bash -c 'cat >> /etc/ssh/ssh_config << EOF
EnableSSHKeysign yes
HostbasedAuthentication yes
EOF'

sudo bash -c 'cat >> /etc/ssh/sshd_config << EOF
HostbasedAuthentication yes
UseDNS yes
EOF'

# ホスト鍵の登録
sudo ssh-keyscan localhost | sudo tee -a /etc/ssh/ssh_known_hosts
echo "localhost" | sudo tee /etc/hosts.equiv

# SSHサービスを再起動
sudo systemctl restart ssh

設定が正しく行われたかテスト接続します。SSH 接続できれば問題ありません。

# ubuntuユーザーとしてテスト
sudo -u ubuntu ssh localhost

最後に、Apache 設定を更新して再起動します。

sudo /opt/ood/ood-portal-generator/sbin/update_ood_portal
sudo systemctl restart apache2

動作確認

改めて Web ポータルへアクセス後、「Clusters」メニューから「My Linux Cluster Shell Access」を選択するとターミナルを起動できます。

Dashboard_-_Open_OnDemand.png

Web ポータルからローカルホストへシェルアクセスが可能になりました。

ubuntu_ip-10-0-0-155___.png

他のユーザーでアクセスできるのか?

システムユーザーを追加してみます。

$ sudo useradd guest-0
$ sudo passwd guest-0
$ ls /home
ssm-user  ubuntu

$ sudo mkdir -p /home/guest-0
$ sudo chown -R guest-0 /home/guest-0/
$ sudo chmod 700 /home/guest-0

作成したユーザーで Web ポータルへログインが可能であり、ログインしたユーザーのホームディレクトリへシェルアクセスも可能でした。

2025_03_17_8_35.png

補足

システムユーザーを追加して、ホームディレクトリを未作成状態でも Web ポータルへログインはできましたが、シェルアクセスするとホームディレクトリがないとエラーになりました。

Home_Directory_Not_Found.png

おわりに

ハンズオントレーニングや講義では、参加者全員に同じ実行環境を提供したいケースが多くあります。参加者の PC を利用すると環境依存のトラブルがよく発生します。

OpenOnDemand は本来 HPC クラスタ向けのツールですが、今回の検証で、参加者全員に同じ実行環境を提供するプラットフォームとしても活用できる可能性が見えてきました。参加者がブラウザだけで用意された環境にアクセスできる点が大きなメリットです。

今回の検証では、公式ドキュメントだけでは把握しにくい導入時の課題を解消しました。特に認証設定や SSH 接続は理解しづらい部分でしたが動作する環境の構築に成功しました。

今後の課題は以下の 2 点です。検証予定です。

  • より安全な認証方式への見直し
  • 別インスタンスを実行環境として利用する設定方法の検証

OpenOnDemand-1(1).png

参考リンク

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.