ユーザーデータスクリプトを使用して、起動時に永続的なセカンダリ Amazon Elastic Block Store (Amazon EBS) ボリュームを新しい Amazon Elastic Compute Cloud (Amazon EC2) Linux スポットインスタンスに自動的に起動したいと考えています。これを実行するにはどうすればよいですか。
簡単な説明
起動時に永続的なセカンダリ EBS ボリュームを新しい EC2 Linux スポットインスタンスに自動的に添付するには、EC2 起動テンプレートにユーザーデータスクリプトを追加します。スポットインスタンスリクエストを設定するときにテンプレートを使用します。
前提条件
少なくとも Amazon EC2 にボリューム添付アクセス権限が付与されている AWS Identity and Access Management (IAM) ロールを作成または使用します。このロールは起動テンプレートに添付されます。
解決方法
ステップ 1: IAM ロールとユーザーデータスクリプトを使用して起動テンプレートを設定する
1. Amazon EC2 コンソールを開きます。
2. [起動テンプレート] を選択し、[起動テンプレートの作成] を選択します。
3. インスタンス AMI、タイプ、およびサイズを選択します。または、既存の AMI を選択します。
4. キーペアをテンプレートに関連付けます。
5. EBS ボリュームと同じアベイラビリティーゾーン内のサブネットを選択します。
6. [Advanced Details] を選択します。
7. 以下の例に示すように、少なくともボリューム添付のアクセス権限が付与されている IAM ロールを追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:volume/vol-xxxxxxxxxxxx"
]
},
{
"Effect": "Allow",
"Action": "ec2:DescribeVolumes",
"Resource": "arn:aws:ec2:*:*:volume/vol-xxxxxxxxxxxx"
}
]
8. ユーザーデータスクリプトをテンプレートに追加します。以下は、ユーザーデータスクリプトの例です。リージョンとボリューム ID を環境に合わせて置き換えます。
#!/bin/bash
OUTPUT=$(curl http://169.254.169.254/latest/meta-data/instance-id)
aws ec2 attach-volume --volume-id vol-xxxxxxxxxxxx --device /dev/xvdf --instance-id $OUTPUT --region ap-southeast-1
ステップ 2: ステップ 1 で作成した起動テンプレートを使用して、スポットリクエストを設定する
1. [スポットインスタンス] を選択し、[スポットインスタンスのリクエスト] を選択します。
2. [起動テンプレート] を選択し、ステップ 1 で作成した起動テンプレートを選択します。テンプレートに設定されているすべての情報が自動入力されます。
3. EBS ボリュームと同じアベイラビリティーゾーンを選択します。
4. [スポットリクエストの作成] を選択します。
スポットリクエストが完了すると、永続的なセカンダリ EBS ボリュームは、起動時に新しいスポットインスタンスに自動的に添付されます。