[AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [2/3]
- 第 1 回: [AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [1/3]
- 第 3 回: [AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [3/3]
対象読者
- クラウドレンダリングに興味がある方
- AWS Deadline Cloud の基本を理解し、より高度な制御を求める方
- AWS Deadline Cloud の基本的な操作については こちら
- Customer-Managed Fleet (CMF) を使用してカスタマイズされたレンダリング環境を構築したい方
- Windows OS 環境で Blender を使用している方
- 自社のインフラストラクチャを AWS 上で管理・活用したい方
参考ページ
- https://docs.aws.amazon.com/ja_jp/deadline-cloud/latest/userguide/manage-cmf.html
- https://docs.aws.amazon.com/deadline-cloud/latest/developerguide/manage-cmf.html
- https://github.com/aws-deadline
検証環境
OS(ローカル): Windows 11 (23H2)
OS(EC2): Amazon Linux 2023
Blender: 4.2.7
はじめに
第 1 回 では、AWS Deadline Cloud の Customer Managed Fleet (CMF) の概要と、AWS Deadline Cloud コンソールでの設定手順について解説しました。第 1 回では、ファーム、フリート、キュー、ストレージプロファイルなどの基本的なリソースを作成しました。
第 2 回となる本記事では、実際にワーカーとなる EC2 インスタンスの作成と設定を行います。具体的には、以下の手順を解説します。
- ワーカーインスタンスの基盤となる IAM ロール、VPC、セキュリティグループの作成
- EC2 インスタンス(ワーカーと踏み台サーバー)の作成
- Blender 4.2.7 のインストールと設定
- Deadline Cloud Worker Agent のセットアップ
- Conda カスタム環境スクリプトの作成
これらの手順を完了することで、AWS Deadline Cloud に接続されたワーカーインスタンスが準備され、レンダリングジョブを受け付ける準備が整います。第 3 回では、ローカル PC に Blender と Deadline Cloud Monitor をインストールし、実際にレンダリングジョブを送信する手順を解説する予定です。
基盤となるリソースの準備
EC2 インスタンスを作成する前に、必要な IAM ロール、VPC、セキュリティグループなどの基盤リソースを準備します。
IAM ロールの作成
まず、EC2 インスタンスに割り当てる IAM ロールを作成します。ワーカーインスタンスには、Deadline Cloud サービスにアクセスするための権限が必要なので、ワーカーインスタンス用の IAM ロールを作成します。 IAM コンソール を開き ロール > ロールの作成
を選択、 AWS のサービス、 EC2 を設定して次へ進みます。
許可ポリシー
で AWSDeadlineCloud-WorkerHost にチェックを入れて次へ進みます。
DeadlineWorkerRole など、任意の名前を付けてロールを作成します。
VPC とネットワーク設定
次に、ワーカーインスタンスと踏み台サーバーを配置するための VPC とネットワーク設定を行います。
VPC の作成
パブリックサブネットとプライベートサブネットを持つ VPC を作成します。踏み台サーバーはパブリックサブネットに、ワーカーインスタンスはプライベートサブネットに配置します。 VPC コンソール を開きます。 VPC の作成
を選択し、次のように設定して VPC を作成します。
項目 | 設定する内容 |
---|---|
作成するリソース |
VPC など |
名前タグの自動生成 |
チェックを入れ任意の名前を入力 |
IPv4 CIDR ブロック |
10.0.0.0/16 |
IPv6 CIDR ブロック |
なし |
テナンシー |
デフォルト |
アベイラビリティゾーン (AZ) の数 |
1 |
パブリックサブネットの数 |
1 |
プライベートサブネットの数 |
1 |
NAT ゲートウェイ |
1 AZ 内 |
VPC エンドポイント |
なし(後で手動で作成) |
セキュリティグループの設定
次に、EC2 インスタンス用のセキュリティグループを 2 つ作成します。 VPC コンソール の セキュリティグループ > セキュリティグループの作成
を選択して、踏み台サーバー用とワーカー用の 2 つのセキュリティグループを作成します。
踏み台サーバー用セキュリティグループ
現在使っているローカル環境から SSH 接続できるよう、ポート 22 を開放する設定です。
項目 | 設定する内容 |
---|---|
セキュリティグループ名 |
任意 |
説明 |
任意 |
VPC |
先ほど作成した VPC を選択 |
インバウンドルールを追加 |
|
タイプ |
SSH |
ソース |
マイ IP |
説明 |
任意 |
ワーカー用セキュリティグループ
踏み台サーバーから SSH 接続できるようにする設定です。
項目 | 設定する内容 |
---|---|
セキュリティグループ名 |
任意 |
説明 |
任意 |
VPC |
先ほど作成した VPC を選択 |
インバウンドルール |
|
タイプ |
SSH |
ソース |
カスタムを選択し踏み台サーバー用セキュリティグループの ID を入力 |
説明 |
任意 |
EC2 インスタンスの作成
基盤となるリソースの準備ができたので、次に EC2 インスタンスを作成します。まず踏み台サーバーを作成し、次にワーカーインスタンスを作成します。 EC2 コンソール を開き、 インスタンスを起動
を選択して作成します。
踏み台サーバーの作成
以下の設定でインスタンスを作成します。
項目 | 設定する内容 |
---|---|
名前 |
任意 |
アプリケーションおよび OS イメージ |
Amazon Linux 2023 AMI |
インスタンスタイプ |
t2.micro |
キーペア |
既存のキーペアを選択または新規作成 ※ このキーペアは後の SSH 接続に使用するため安全に保管してください |
ネットワーク設定 |
※ 編集 をクリック |
VPC |
作成した VPC を選択 |
サブネット |
パブリックサブネットを選択(*-public1-* という名前のもの) |
自動割り当てパブリック IP |
有効化 |
セキュリティグループ |
踏み台サーバー用に作成したものを選択 |
ワーカーインスタンスの作成
以下の設定でインスタンスを作成します。
項目 | 設定する内容 |
---|---|
名前 |
任意 |
アプリケーションおよび OS イメージ |
Amazon Linux 2023 AMI |
インスタンスタイプ |
t2.medium ※ レンダリング要件に応じてより大きなインスタンスタイプを選択することもご検討ください |
キーペア |
既存のキーペアを選択または新規作成 |
ネットワーク設定 |
※ 編集 をクリック |
VPC |
作成した VPC を選択 |
サブネット |
プライベートサブネットを選択(*-private1-* という名前のもの) |
自動割り当てパブリック IP |
無効化 |
セキュリティグループ |
ワーカー用に作成したものを選択 |
高度な詳細 |
|
IAM インスタンスプロフィール |
先に作成したワーカー用 IAM ロール |
EC2 インスタンスの初期設定
EC2 インスタンスが起動したら、SSH で接続して初期設定を行います。
SSH 接続の設定
踏み台サーバー経由でワーカーインスタンスに接続するために、SSH 設定を行います。ローカルマシンの ~/.ssh/config
ファイル(Windows の場合は C:\Users\<ユーザー名>\.ssh\config
)に以下の設定を追加します。ファイルが存在しない場合は新規作成します。 <踏み台ホストのパブリック IP>
と <ワーカーインスタンスのプライベート IP>
は、それぞれのインスタンスの実際の IP アドレスに置き換えます。 your-key.pem
には、キーペア作成時にダウンロードしたファイルのパスを指定します。
Host bastion
HostName <踏み台ホストのパブリック IP>
User ec2-user
IdentityFile ~/.ssh/your-key.pem
Host worker
HostName <ワーカーインスタンスのプライベート IP>
User ec2-user
IdentityFile ~/.ssh/your-key.pem
ProxyCommand ssh -W %h:%p bastion
これで、以下のコマンドでワーカーインスタンスに接続できるようになります。
ssh worker
root への切替
ワーカーインスタンスに接続したら、はじめに root ユーザーに切り替えます。
# root ユーザーに切り替え
sudo -i
システムの更新とパッケージのインストール
システムの更新と必要なパッケージのインストールを行います。これらのパッケージは、Blender をヘッドレスモードで実行するために必要なライブラリとユーティリティです。特に xorg-x11-server-Xvfb
は、GUI なしの環境で Blender を実行するために重要です。
# システムの更新
dnf update -y
# 必要なパッケージのインストール
dnf install -y \
libX11 \
libXext \
libXi \
libXrender \
libXfixes \
libXcomposite \
libXcursor \
libXdamage \
libXinerama \
libXrandr \
libXtst \
libSM \
libICE \
mesa-libGL \
mesa-libGLU \
libxkbcommon \
libxkbcommon-x11 \
alsa-lib \
pulseaudio-libs \
fontconfig \
freetype \
xorg-x11-server-Xvfb \
unzip \
wget \
git \
python3 \
python3-pip \
python3-devel \
acl \
util-linux-user
Python の venv 環境への切替
公式ドキュメント を参考に、まずは Python の仮想環境 (venv) 環境へ切り替えたうえで作業を行います。venv を使用することで、Deadline Cloud Worker Agent の依存関係を他のシステムパッケージと分離し、安定した動作を確保します。
python3 -m venv /opt/deadline/worker
source /opt/deadline/worker/bin/activate
pip install --upgrade pip
Deadline Cloud Worker Agent のインストール
EC2 をワーカーとして動作させられるよう AWS Deadline Cloud から提供されているツール をインストールします。
# Deadline Cloud Worker Agent のインストール
pip install --ignore-installed deadline-cloud-worker-agent
# Worker Agent の設定
# 注意: 実際のファーム ID とフリート ID に置き換えてください
/opt/deadline/worker/bin/install-deadline-worker --farm-id "farm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --fleet-id "fleet-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --allow-shutdown
# deadline-worker をシステム起動時に自動で開始するように設定する
systemctl enable deadline-worker
# deadline-worker を開始
systemctl start deadline-worker
しばらく待った後、 deadline-worker サービスが active になっていることを確認します。
systemctl status deadline-worker
● deadline-worker.service - AWS Deadline Cloud Worker Agent
Loaded: loaded (/etc/systemd/system/deadline-worker.service; enabled; preset: disabled)
Active: active (running) since Thu 2025-03-27 08:10:57 UTC; 1min 38s ago
Main PID: 27107 (deadline-worker)
Tasks: 7 (limit: 4657)
Memory: 92.2M
CPU: 2.047s
CGroup: /system.slice/deadline-worker.service
└─27107 /opt/deadline/worker/bin/python3 /opt/deadline/worker/bin/deadline-worker-agent
Mar 27 08:10:57 ip-****.ap-northeast-1.compute.internal systemd[1]: Started deadline-worker.service - AWS Deadline Cloud Worker Agent.
AWS Deadline Cloud モニターから、ワーカーが登録されたことを確認します。 AWS Deadline Cloud コンソールのダッシュボード で モニター
ボタンをクリックし、ログイン後 作成したファーム > 作成したフリート
を選択します。 Workers
に作成した EC2 インスタンスが追加されていることを確認します。
ジョブユーザーとグループの作成
Deadline Cloud のジョブを実行するためのユーザーとグループを作成します。これは、第 1 回 で設定したキューの POSIX 認証情報と一致させる必要があります。
# ジョブユーザーの作成
useradd -m -s /bin/bash deadline-job-user
usermod -a -G deadline-job-users deadline-job-user
# ユーザーの確認
id deadline-job-user
deadline-job-user が作成されていることを確認します。
uid=1001(deadline-job-user) gid=1002(deadline-job-user) groups=1002(deadline-job-user),1001(deadline-job-users)
また、 deadline-worker-agent が作成されていることも確認しておきましょう。
id deadline-worker-agent
uid=992(deadline-worker-agent) gid=992(deadline-worker-agent) groups=992(deadline-worker-agent),1001(deadline-job-users)
データディレクトリとセッションディレクトリの作成
Deadline Cloud のジョブデータとセッション情報を保存するディレクトリを作成します。これらの手順を実行することで、Blender と Deadline Cloud Worker Agent をインストールするための基本的な環境が整います。
# データディレクトリとセッションディレクトリの作成
mkdir -p /mnt/deadline-data
mkdir -p /sessions
# deadline-worker-agent ユーザーにディレクトリの所有権を与える
chown -R deadline-worker-agent:deadline-job-users /mnt/deadline-data
chown -R deadline-worker-agent:deadline-job-users /sessions
chmod 775 /mnt/deadline-data
chmod 775 /sessions
sudoers の設定
deadline-worker サービスが blender を正しく動作させるのに必要な設定です。この設定により、deadline-worker-agent が deadline-job-user としてコマンドを実行できるようになります
# sudoers の設定
cat > /etc/sudoers.d/deadline-worker-agent << 'EOF'
# Allow deadline-worker-agent to run commands as deadline-job-user without password
deadline-worker-agent ALL=(deadline-job-user) NOPASSWD:ALL
# Preserve PATH and other important environment variables
Defaults:deadline-worker-agent !requiretty
Defaults:deadline-worker-agent env_keep += "PATH HOME SHELL TERM PYTHONPATH"
EOF
# 権限を設定
chmod 440 /etc/sudoers.d/deadline-worker-agent
Blender 4.2.7 のインストール
次に、Blender 4.2.7 をインストールします。公式サイトからバイナリをダウンロードして設定します。
# Blender 4.2.7 のインストール
mkdir -p /tmp/blender-install
cd /tmp/blender-install
# Blender 4.2.7 をダウンロード
wget https://download.blender.org/release/Blender4.2/blender-4.2.7-linux-x64.tar.xz
# 展開
tar -xf blender-4.2.7-linux-x64.tar.xz
# インストール先ディレクトリに移動
mv blender-4.2.7-linux-x64 /opt/blender-4.2.7
# シンボリックリンクを作成
ln -sf /opt/blender-4.2.7/blender /usr/local/bin/blender
# 一時ファイルを削除してクリーンアップ
cd /
rm -rf /tmp/blender-install
バージョンを確認し、結果が次のように表示されればインストールは正常に完了しています。
# バージョン確認
blender --version
Blender 4.2.7 LTS
build date: 2025-02-18
build time: 09:04:23
build commit date: 2025-02-17
build commit time: 12:50
build hash: f12c49eec802
build branch: blender-v4.2-release
build platform: Linux
build type: Release
build c flags: -Wall -Werror=implicit-function-declaration -Wstrict-prototypes -Werror=return-type -Werror=vla -Wmissing-prototypes -Wno-char-subscripts -Wno-unknown-pragmas -Wpointer-arith -Wunused-parameter -Wwrite-strings -Wlogical-op -Wundef -Winit-self -Wmissing-include-dirs -Wno-div-by-zero -Wtype-limits -Wformat-signedness -Wrestrict -Wno-stringop-overread -Wno-stringop-overflow -Wnonnull -Wabsolute-value -Wuninitialized -Wredundant-decls -Wshadow -Wimplicit-fallthrough=5 -Wno-error=unused-but-set-variable -march=x86-64-v2 -std=gnu11 -pipe -fPIC -funsigned-char -fno-strict-aliasing -ffp-contract=off
build c++ flags: -Wuninitialized -Wredundant-decls -Wall -Wno-invalid-offsetof -Wno-sign-compare -Wlogical-op -Winit-self -Wmissing-include-dirs -Wno-div-by-zero -Wtype-limits -Werror=return-type -Wno-char-subscripts -Wno-unknown-pragmas -Wpointer-arith -Wunused-parameter -Wwrite-strings -Wundef -Wcomma-subscript -Wformat-signedness -Wrestrict -Wno-suggest-override -Wuninitialized -Wno-stringop-overread -Wno-stringop-overflow -Wimplicit-fallthrough=5 -Wundef -Wmissing-declarations -march=x86-64-v2 -pipe -fPIC -funsigned-char -fno-strict-aliasing -ffp-contract=off
build link flags: -Wl,--version-script='/home/blender/git/blender-v420/blender.git/source/creator/symbols_unix.map'
build system: CMake
Deadline Cloud for Blender のインストール
AWS Deadline Cloud から提供されている Blender 向けのツール をインストールします。
# Deadline Cloud for Blender のインストール
pip3 install deadline-cloud-for-blender
sudo -u deadline-job-user pip3 install --user deadline-cloud-for-blender
Conda のインストール
Deadline キューが Conda 環境を作成できるようにするため、 Miniconda(軽量版 Conda)をインストールします。
# Miniconda のインストール
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh
bash /tmp/miniconda.sh -b -p /opt/conda
rm /tmp/miniconda.sh
# システム全体の PATH に追加(export を使用)
export PATH="/opt/conda/bin:$PATH"
# 永続化するために /etc/profile.d/ にスクリプトを作成
cat > /etc/profile.d/conda_path.sh << 'EOF'
# Add Conda to PATH
export PATH="/opt/conda/bin:$PATH"
EOF
chmod +x /etc/profile.d/conda_path.sh
# 非対話型シェルでの conda activate を有効化
echo 'auth required pam_env.so' >> /etc/pam.d/su
echo 'BASH_ENV=/etc/bash_env' >> /etc/environment
echo 'source /opt/conda/etc/profile.d/conda.sh' > /etc/bash_env
chmod +x /etc/bash_env
conda のバージョンが正しく表示されればインストールは正常に完了しています。
conda --version
conda 25.1.1
Conda の初期化
下記のコマンドで Conda を初期化します。 conda init
を実行することで、今後のシェル起動時に Conda 環境が自動的に有効化されるようになります。
conda init bash
Conda キュー環境を構築するスクリプトの作成
第 1 回 の記事にて、 Deadline Cloud のキューの Conda キュー環境 YAML から指定していた blender_env.sh の実体を用意します。このスクリプトは、主に以下の 4 点の処理を実行するものです。
- ジョブ実行環境の準備
- Blender の実行パスの設定
- 必要に応じた Conda 環境の作成と追加パッケージのインストール
- 環境変数の設定と記録
# カスタム環境スクリプトの作成
mkdir -p /opt/deadline/queue_environments
cat > /opt/deadline/queue_environments/blender_env.sh << 'EOF'
#!/bin/bash
set -euo pipefail
ENV_DIR="$1"
CONDA_PACKAGES="$2"
CONDA_CHANNELS="$3"
VARS_START_SCRIPT="$4"
VARS_CAPTURE_SCRIPT="$5"
echo "Setting up environment for Blender 4.2.7..."
# Check if we need to create a Conda environment
if [ -z "$CONDA_PACKAGES" ]; then
echo "Using system-installed Blender 4.2.7 without Conda environment."
export PATH="/usr/local/bin:/opt/blender-4.2.7:$PATH"
python "$VARS_START_SCRIPT" .vars
echo "Blender version:"
blender --version
exit 0
fi
# Create minimal environment for additional packages
echo "Creating Conda environment with additional packages..."
conda create --yes --quiet -p "$ENV_DIR" python=3.11
source $(conda info --base)/etc/profile.d/conda.sh
conda activate "$ENV_DIR"
# Install deadline-cloud-for-blender via pip
echo "Installing deadline-cloud-for-blender in Conda environment..."
pip install deadline-cloud-for-blender
# Make sure system Blender is in PATH
export PATH="/usr/local/bin:/opt/blender-4.2.7:$PATH"
# Install additional packages if specified
echo "Installing additional packages: $CONDA_PACKAGES"
CHANNEL_OPTS=""
for channel in $CONDA_CHANNELS; do
CHANNEL_OPTS="$CHANNEL_OPTS -c $channel"
done
conda install --yes --quiet $CHANNEL_OPTS $CONDA_PACKAGES || echo "Warning: Some packages could not be installed."
# Capture environment variables
python "$VARS_START_SCRIPT" .vars
python "$VARS_CAPTURE_SCRIPT" .vars
# Print information about the environment
conda info
which blender || echo "Warning: Blender not found in PATH"
blender --version || echo "Warning: Could not get Blender version"
EOF
chmod +x /opt/deadline/queue_environments/blender_env.sh
cat コマンドでスクリプトの内容を確認し、次のように表示されれば問題ありません。
cat /opt/deadline/queue_environments/blender_env.sh
#!/bin/bash
set -euo pipefail
ENV_DIR="$1"
CONDA_PACKAGES="$2"
CONDA_CHANNELS="$3"
VARS_START_SCRIPT="$4"
VARS_CAPTURE_SCRIPT="$5"
echo "Setting up environment for Blender 4.2.7..."
# Check if we need to create a Conda environment
if [ -z "$CONDA_PACKAGES" ]; then
echo "Using system-installed Blender 4.2.7 without Conda environment."
export PATH="/usr/local/bin:/opt/blender-4.2.7:$PATH"
python "$VARS_START_SCRIPT" .vars
echo "Blender version:"
blender --version
exit 0
fi
# Create minimal environment for additional packages
echo "Creating Conda environment with additional packages..."
conda create --yes --quiet -p "$ENV_DIR" python=3.11
source $(conda info --base)/etc/profile.d/conda.sh
conda activate "$ENV_DIR"
# Install deadline-cloud-for-blender via pip
echo "Installing deadline-cloud-for-blender in Conda environment..."
pip install deadline-cloud-for-blender
# Make sure system Blender is in PATH
export PATH="/usr/local/bin:/opt/blender-4.2.7:$PATH"
# Install additional packages if specified
echo "Installing additional packages: $CONDA_PACKAGES"
CHANNEL_OPTS=""
for channel in $CONDA_CHANNELS; do
CHANNEL_OPTS="$CHANNEL_OPTS -c $channel"
done
conda install --yes --quiet $CHANNEL_OPTS $CONDA_PACKAGES || echo "Warning: Some packages could not be installed."
# Capture environment variables
python "$VARS_START_SCRIPT" .vars
python "$VARS_CAPTURE_SCRIPT" .vars
# Print information about the environment
conda info
which blender || echo "Warning: Blender not found in PATH"
blender --version || echo "Warning: Could not get Blender version"
以上で、ワーカーインスタンスの設定は完了です。
おわりに
本記事では、AWS Deadline Cloud を使用し Windows+Blender のクラウドレンダリングを実現する方法について、 ワーカーとして機能する EC2 インスタンス上での設定手順を紹介しました。次回以降の記事では、残りの以下の手順についても解説していく予定です。
- ローカル環境でサブミッターの設定を行う
本シリーズの他の記事もぜひご覧ください。