第3章 AWS への RHEL AI のインストール
AWS に Red Hat Enterprise Linux AI をインストールしてデプロイするには、まず RHEL AI イメージを Amazon Machine Image (AMI) に変換する必要があります。このプロセスでは、次のリソースを作成します。
- RHEL AI イメージを含む S3 バケット
- AWS EC2 スナップショット
- AWS AMI
- AWS インスタンス
3.1. RHEL AI イメージの AWS AMI への変換 リンクのコピーリンクがクリップボードにコピーされました!
RHEL AI を AWS マシンにデプロイする前に、S3 バケットを設定し、RHEL AI イメージを AWS AMI に変換する必要があります。
前提条件
- 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注記AWS では、
DEFAULT_VOLUME_SIZEは GB 単位で測定されます。以下のコマンドを実行して S3 バケットを作成できます。
$ aws s3 mb s3://$BUCKETバケットに 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名前を付けることができるバケットの S3 ロールを作成します。以下のコマンド例では、
vmiportがロールの名前です。$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.jsonバケットにポリシーを生成するために必要な設定で
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以下のコマンドを実行してバケットのポリシーを作成します。
$ aws iam put-role-policy --role-name vmimport --policy-name vmimport-$BUCKET --policy-document file://role-policy.json
- S3 バケットがセットアップされたので、Red Hat Enterprise Linux AI ダウンロードページ から RAW イメージをダウンロードする必要があります。
RAW イメージリンクをコピーし、次のコマンドに追加します。
$ curl -Lo disk.raw <link-to-raw-file>次のコマンドを使用して、イメージを S3 バケットにアップロードします。
$ aws s3 cp disk.raw s3://$BUCKET/$RAW_AMI次のコマンドを実行して、イメージをスナップショットに変換し、
task_id変数名に保存します。$ printf '{ "Description": "my-image", "Format": "raw", "UserBucket": { "S3Bucket": "%s", "S3Key": "%s" } }' $BUCKET $RAW_AMI > containers.json$ task_id=$(aws ec2 import-snapshot --disk-container file://containers.json | jq -r .ImportTaskId)次のコマンドを使用して、ディスクイメージからスナップショットへの変換ジョブの進行状況を確認できます。
$ aws ec2 describe-import-snapshot-tasks --filters Name=task-state,Values=active変換ジョブが完了したら、次のコマンドを実行してスナップショット ID を取得し、それを
snapshot_idという変数に保存できます。$ snapshot_id=$(aws ec2 describe-import-snapshot-tasks | jq -r '.ImportSnapshotTasks[] | select(.ImportTaskId=="'${task_id}'") | .SnapshotTaskDetail.SnapshotId')次のコマンドを実行して、スナップショットにタグ名を追加し、識別しやすくします。
$ aws ec2 create-tags --resources $snapshot_id --tags Key=Name,Value="$AMI_NAME"次のコマンドを使用して、スナップショットから AMI を登録します。
$ ami_id=$(aws ec2 register-image \ --name "$AMI_NAME" \ --description "$AMI_NAME" \ --architecture x86_64 \ --root-device-name /dev/sda1 \ --block-device-mappings "DeviceName=/dev/sda1,Ebs={VolumeSize=${DEFAULT_VOLUME_SIZE},SnapshotId=${snapshot_id}}" \ --virtualization-type hvm \ --ena-support \ | jq -r .ImageId)次のコマンドを実行して、別のタグ名を追加して AMI を識別できます。
$ aws ec2 create-tags --resources $ami_id --tags Key=Name,Value="$AMI_NAME"