第3章 AWS への RHEL AI のインストール
AWS に Red Hat Enterprise Linux AI をインストールしてデプロイする方法は複数あります。
- RHEL AI は、AWS マーケットプレイス から購入できます。
- RHEL AI ダウンロードページ から RHEL AI RAW ファイルをダウンロードし、AWS イメージに変換できます。
RAW ファイルを使用して RHEL AI をインストールおよびデプロイするには、まず RHEL AI イメージを Amazon Machine Image (AMI) に変換する必要があります。
3.1. RHEL AI イメージの AWS AMI への変換 リンクのコピーリンクがクリップボードにコピーされました!
RHEL AI を AWS マシンにデプロイする前に、S3 バケットを設定し、RHEL AI イメージを AWS AMI に変換する必要があります。
次のプロセスでは、次のリソースを作成します。
- RHEL AI イメージを含む S3 バケット
- AWS EC2 スナップショット
- AWS AMI
- AWS インスタンス
前提条件
- AWS IAM アカウントマネージャー にアクセスキー ID が設定されている。
手順
- AWS のドキュメント に従って、AWS コマンドラインツールをインストールします。
S3 バケットを作成し、イメージファイルの AWS スナップショットへの変換を許可する権限を設定する必要があります。
次のコマンドを実行して、必要な環境変数を作成します。
export BUCKET=<custom_bucket_name> export RAW_AMI=nvidia-bootc.ami export AMI_NAME="rhel-ai" export DEFAULT_VOLUME_SIZE=1000
$ export BUCKET=<custom_bucket_name> $ export RAW_AMI=nvidia-bootc.ami $ export AMI_NAME="rhel-ai" $ export DEFAULT_VOLUME_SIZE=1000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記AWS では、
DEFAULT_VOLUME_SIZE
は GB 単位で測定されます。以下のコマンドを実行して S3 バケットを作成できます。
aws s3 mb s3://$BUCKET
$ aws s3 mb s3://$BUCKET
Copy to Clipboard Copied! Toggle word wrap Toggle overflow バケットに S3 ロールを生成するために必要な設定で
trust-policy.json
ファイルを作成する必要があります。printf '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }' > trust-policy.json
$ printf '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }' > trust-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名前を付けることができるバケットの S3 ロールを作成します。以下のコマンド例では、
vmiport
がロールの名前です。aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow バケットにポリシーを生成するために必要な設定で
role-policy.json
ファイルを作成する必要があります。printf '{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::%s", "arn:aws:s3:::%s/*" ] }, { "Effect":"Allow", "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource":"*" } ] }' $BUCKET $BUCKET > role-policy.json
$ printf '{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::%s", "arn:aws:s3:::%s/*" ] }, { "Effect":"Allow", "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource":"*" } ] }' $BUCKET $BUCKET > role-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してバケットのポリシーを作成します。
aws iam put-role-policy --role-name vmimport --policy-name vmimport-$BUCKET --policy-document file://role-policy.json
$ aws iam put-role-policy --role-name vmimport --policy-name vmimport-$BUCKET --policy-document file://role-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- S3 バケットがセットアップされました。Red Hat Enterprise Linux AI ダウンロードページ から RAW イメージをダウンロードする必要があります。
RAW イメージリンクをコピーし、次のコマンドに追加します。
curl -Lo disk.raw.gz <link-to-raw-file>
$ curl -Lo disk.raw.gz <link-to-raw-file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドで
raw.gz
ファイルを展開します。gunzip disk.raw.gz
$ gunzip disk.raw.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、イメージを S3 バケットにアップロードします。
aws s3 cp disk.raw s3://$BUCKET/$RAW_AMI
$ aws s3 cp disk.raw s3://$BUCKET/$RAW_AMI
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、イメージをスナップショットに変換し、
task_id
変数名に保存します。printf '{ "Description": "my-image", "Format": "raw", "UserBucket": { "S3Bucket": "%s", "S3Key": "%s" } }' $BUCKET $RAW_AMI > containers.json
$ printf '{ "Description": "my-image", "Format": "raw", "UserBucket": { "S3Bucket": "%s", "S3Key": "%s" } }' $BUCKET $RAW_AMI > containers.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow task_id=$(aws ec2 import-snapshot --disk-container file://containers.json | jq -r .ImportTaskId)
$ task_id=$(aws ec2 import-snapshot --disk-container file://containers.json | jq -r .ImportTaskId)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、ディスクイメージからスナップショットへの変換ジョブの進行状況を確認できます。
aws ec2 describe-import-snapshot-tasks --filters Name=task-state,Values=active
$ aws ec2 describe-import-snapshot-tasks --filters Name=task-state,Values=active
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変換ジョブが完了したら、次のコマンドを実行してスナップショット ID を取得し、それを
snapshot_id
という変数に保存できます。snapshot_id=$(aws ec2 describe-import-snapshot-tasks | jq -r '.ImportSnapshotTasks[] | select(.ImportTaskId=="'${task_id}'") | .SnapshotTaskDetail.SnapshotId')
$ snapshot_id=$(aws ec2 describe-import-snapshot-tasks | jq -r '.ImportSnapshotTasks[] | select(.ImportTaskId=="'${task_id}'") | .SnapshotTaskDetail.SnapshotId')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、スナップショットにタグ名を追加し、識別しやすくします。
aws ec2 create-tags --resources $snapshot_id --tags Key=Name,Value="$AMI_NAME"
$ aws ec2 create-tags --resources $snapshot_id --tags Key=Name,Value="$AMI_NAME"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、スナップショットから AMI を登録します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、別のタグ名を追加して AMI を識別できます。
aws ec2 create-tags --resources $ami_id --tags Key=Name,Value="$AMI_NAME"
$ aws ec2 create-tags --resources $ami_id --tags Key=Name,Value="$AMI_NAME"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow