[AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [2/3]

[AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [2/3]

AWS Deadline Cloud の Customer-Managed Fleet(CMF) を使用したクラウドレンダリング環境の構築方法を Windows OS + Blender 環境を例に解説します。 CMF を活用することで、 EC2 インスタンスなどのコンピューティングリソースをより細かく制御しながら、 Blender プロジェクトのレンダリングをクラウド上で効率的に実行することが可能になります。本記事では第 2 回として、ワーカーとして機能する EC2 インスタンス上での設定手順を紹介します。

対象読者

  • クラウドレンダリングに興味がある方
  • AWS Deadline Cloud の基本を理解し、より高度な制御を求める方
    • AWS Deadline Cloud の基本的な操作については こちら
  • Customer-Managed Fleet (CMF) を使用してカスタマイズされたレンダリング環境を構築したい方
  • Windows OS 環境で Blender を使用している方
  • 自社のインフラストラクチャを AWS 上で管理・活用したい方

参考ページ

検証環境
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 をインストールし、実際にレンダリングジョブを送信する手順を解説する予定です。

16

基盤となるリソースの準備

EC2 インスタンスを作成する前に、必要な IAM ロール、VPC、セキュリティグループなどの基盤リソースを準備します。

IAM ロールの作成

まず、EC2 インスタンスに割り当てる IAM ロールを作成します。ワーカーインスタンスには、Deadline Cloud サービスにアクセスするための権限が必要なので、ワーカーインスタンス用の IAM ロールを作成します。 IAM コンソール を開き ロール > ロールの作成 を選択、 AWS のサービスEC2 を設定して次へ進みます。

12

許可ポリシーAWSDeadlineCloud-WorkerHost にチェックを入れて次へ進みます。

13

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 を入力
説明 任意

14

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 インスタンスが追加されていることを確認します。

15

ジョブユーザーとグループの作成

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 インスタンス上での設定手順を紹介しました。次回以降の記事では、残りの以下の手順についても解説していく予定です。

  • ローカル環境でサブミッターの設定を行う

本シリーズの他の記事もぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.