aws ec2 create-launch-template-version のlaunch-template-data 指定方法
概要
- 今回は、AWS CLI を使用して、EC2 の起動テンプレートを更新する際のノウハウを紹介します。先ず、EC2 の起動テンプレートを更新する背景を記載します。EC2 はインスタンスメタデータの設定があり、インスタンスメタデータサービスにはバージョンとして、IMDSv1 (リクエスト/レスポンスメソッド)、IMDSv2 (セッション志向メソッド) の2種類があります。SSRF(Server Side Request Forgery)の脆弱性への攻撃に対応するため、EC2 のIMDSv2 設定はデフォルトが Optional → Required に変わりました。今回は、EC2 の起動テンプレート更新においても対応を行うため、インスタンスメタデータの設定を変更したいと思います。
- EC2 の起動テンプレート更新は、AWS CLI のコマンドである “aws ec2 create-launch-template-version" を使用します。また、launch-template-data オプションを使用して、インスタンスメタデータの設定を指定します。しかし、このlaunch-template-data オプションには、次に記載する癖がありました!
aws ec2 create-launch-template-version のlaunch-template-data は癖がある
- launch-template-data オプションを使用して、インスタンスメタデータの設定を指定した際に、以下のエラーを経験しました。
- Error parsing parameter '–launch-template-data’: Invalid JSON: Expecting ',’ delimiter: line 1 column 35 (char 34)
JSON received: {“MetadataOptions":[“HttpEndpoint":"enabled","HttpTokens":"required"]}
- Error parsing parameter '–launch-template-data’: Invalid JSON: Expecting ',’ delimiter: line 1 column 35 (char 34)
- 以下実行例です。
$ lt_id=lt-01234567890123456
$ lt_previos_ver=`aws ec2 describe-launch-templates --launch-template-ids ${lt_id} --region ap-northeast-1 | jq '.LaunchTemplates[].LatestVersionNumber'`
$ aws ec2 create-launch-template-version --launch-template-id ${lt_id} --source-version ${lt_previos_ver} --launch-template-data '{"MetadataOptions":["HttpEndpoint":"enabled","HttpTokens":"required"]}' --region ap-northeast-1
Error parsing parameter '--launch-template-data': Invalid JSON: Expecting ',' delimiter: line 1 column 35 (char 34)
JSON received: {"MetadataOptions":["HttpEndpoint":"enabled","HttpTokens":"required"]}
対処方法
- 回避策は、以下の指定となります。launch-template-data オプション内の指定は、エスケープ文字が必要です。
$ aws ec2 create-launch-template-version --launch-template-id ${lt_id} --source-version ${lt_previos_ver} --launch-template-data "{\"MetadataOptions\":{\"HttpEndpoint\":\"enabled\",\"HttpTokens\":\"required\"}}" --region ap-northeast-1
{
"LaunchTemplateVersion": {
"LaunchTemplateId": "lt-01234567890123456",
"LaunchTemplateName": "niikawa-test-ec2-lt",
"VersionNumber": 52,
"CreateTime": "2025-01-07T14:51:55+00:00",
"CreatedBy": "arn:aws:iam::111111111111:user/niikawa",
"DefaultVersion": false,
"LaunchTemplateData": {
"IamInstanceProfile": {
"Arn": "arn:aws:iam::111111111111:instance-profile/niikawa-ec2-ssm"
},
"ImageId": "ami-0xxxxxxxxxxxxxxxx",
"InstanceType": "t2.micro",
"KeyName": "niikawa-testkey",
"SecurityGroupIds": [
"sg-0yyyyyyyyyyyyyyyy"
],
"MetadataOptions": {
"HttpTokens": "required",
"HttpEndpoint": "enabled"
}
}
}
}