aws ec2 create-launch-template-version のlaunch-template-data 指定方法

AWS,EC2

概要

  • 今回は、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"]}
  • 以下実行例です。
$ 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"
            }
        }
    }
}