3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Console-to-Codeを使って自動でコード生成

Posted at

AWS Console-to-Codeとは

AWS re:Invent 2023でプレビュー版として、AWS Console-to-Codeが発表されました。AWSのマネジメントコンソール上で行われた操作を記録し、AWS CDKやAWS CLI、AWS CloudFormationのコードに変換するサービスです。

2023年12月現在では、バージニア北部リージョン(us-east-1)、そしてEC2のみの対応のプレビュー版です。

利用手順

EC2の起動アクションをConsole-to-Codeを利用して、CloudFormationのコードに変換する手順です。

1. コンソールアクションを記録する

バージニア北部リージョンに変更し、マネジメントコンソールからEC2を起動します。
2023年12月現在では、バージニア北部リージョン以外は対応していません。
image.png

image.png

バージニア北部リージョンのEC2マネジメントコンソールの左側メニューに、Console-to-Codeのメニューが表示されています。もしここにConsole-to-Codeが表示されていない場合、リージョンがバージニア北部リージョンになっていない可能性があります。

バージニア北部リージョンで、EC2を立ち上げます。

この作業には特に制限はありませんが、ユーザーデータを利用すると、コードの生成に失敗しました。2023年12月時点では、特にドキュメントにユーザーデータが対象範囲外という記載はありませんが、プレビュー版なので対応していない可能性がありますので、利用時は注意したほうが良いかもしれません。

EC2の起動に成功したら、Console-to-Codeを利用してコードを生成します。

2. Console-to-Codeを利用したコード生成

左メニューからConsole-to-Codeを選択すると、以下のような記録されたアクションを確認することができます。今回は、オペレーションがRunInstancesとなっているアクションをコード化します。該当するアクションを選択、CloudFormationのJSONコードの生成ボタンをクリックします。

image.png

数十秒待つと、コードの生成が完了し確認することできます。
image.png

実際に生成されたCloudFormationのJSONコード↓

console-to-code.json
{
  "Resources": {
    "EC2Instance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "ImageId": "ami-079db87dc4c10ac91", 
        "InstanceType": "t2.micro",
        "NetworkInterfaces": [
          {
            "AssociatePublicIpAddress": false,
            "DeviceIndex": 0,
            "SubnetId": "subnet-003a1663aa58c3dde",
            "GroupSet": ["sg-01172680009613496"]
          }
        ],
        "TagSpecifications": [
          {
            "ResourceType": "instance",
            "Tags": [
              {
                "Key": "Name",
                "Value": "WebServer"
              }
            ]
          }
        ],
        "MetadataOptions": {
          "HttpTokens": "required",
          "HttpEndpoint": "enabled", 
          "HttpPutResponseHopLimit": 2
        },
        "PrivateDnsNameOptions": {
          "HostnameType": "ip-name",
          "EnableResourceNameDnsARecord": false,
          "EnableResourceNameDnsAAAARecord": false  
        }
      }
    }
  }
}

3. Console-to-Codeの注意事項

Console-to-Codeの画面には以下のような注意書きが表示されています。2023年12月現在では、まだプレビュー版ですので、コードが使えない可能性もあります。

生成されたコードは提案であり、環境で使用するには変更が必要な場合があります。

image.png

4. Console-to-Codeで生成されたコードを使ってみる

Console-to-Codeで生成されたコードが利用可能なのか、どれくらいの修正が必要なのか、確認します。
まずは、コードを修正せずにCloudFormationでスタックを作成してみました。
やはり、生成されたコードをそのまま使うことは出来ませんでした。

image.png

エラーの原因は、リソースタイプが「AWS::EC2::Instance」にも関わらず、「AWS::EC2::LaunchTemplate」用のプロパティである「TagSpecifications」「MetadataOptions」「PrivateDnsNameOptions」「NetworkInterfaces」の4つが含まれていることが原因でした。
リソースタイプが不一致のプロパティを削除することで、スタックの作成は成功しました。
image.png

スタック作成に成功した修正後のコード↓

console-to-code.json
{
  "Resources": {
    "EC2Instance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "ImageId": "ami-079db87dc4c10ac91", 
        "InstanceType": "t2.micro"
      }
    }
  }
}

まとめ

コンソールアクションをコード化してくれるということで、便利なサービスのように思います。ただし現時点ではプレビュー版であり、生成されたコードは修正が必要なため、あまり実用的ではありません。今後のアップデート次第で使いやすくなると期待しています。
CloudFormation初心者としての感想ですが、自分のコンソール操作とCloudFormationのコードを繋げることが出来たので、学習として利用するのも良いと感じました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?