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月現在では、バージニア北部リージョン以外は対応していません。
バージニア北部リージョンのEC2マネジメントコンソールの左側メニューに、Console-to-Codeのメニューが表示されています。もしここにConsole-to-Codeが表示されていない場合、リージョンがバージニア北部リージョンになっていない可能性があります。
バージニア北部リージョンで、EC2を立ち上げます。
この作業には特に制限はありませんが、ユーザーデータを利用すると、コードの生成に失敗しました。2023年12月時点では、特にドキュメントにユーザーデータが対象範囲外という記載はありませんが、プレビュー版なので対応していない可能性がありますので、利用時は注意したほうが良いかもしれません。
EC2の起動に成功したら、Console-to-Codeを利用してコードを生成します。
2. Console-to-Codeを利用したコード生成
左メニューからConsole-to-Codeを選択すると、以下のような記録されたアクションを確認することができます。今回は、オペレーションがRunInstancesとなっているアクションをコード化します。該当するアクションを選択、CloudFormationのJSONコードの生成ボタンをクリックします。
実際に生成されたCloudFormationの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月現在では、まだプレビュー版ですので、コードが使えない可能性もあります。
生成されたコードは提案であり、環境で使用するには変更が必要な場合があります。
4. Console-to-Codeで生成されたコードを使ってみる
Console-to-Codeで生成されたコードが利用可能なのか、どれくらいの修正が必要なのか、確認します。
まずは、コードを修正せずにCloudFormationでスタックを作成してみました。
やはり、生成されたコードをそのまま使うことは出来ませんでした。
エラーの原因は、リソースタイプが「AWS::EC2::Instance」にも関わらず、「AWS::EC2::LaunchTemplate」用のプロパティである「TagSpecifications」「MetadataOptions」「PrivateDnsNameOptions」「NetworkInterfaces」の4つが含まれていることが原因でした。
リソースタイプが不一致のプロパティを削除することで、スタックの作成は成功しました。
スタック作成に成功した修正後のコード↓
{
"Resources": {
"EC2Instance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-079db87dc4c10ac91",
"InstanceType": "t2.micro"
}
}
}
}
まとめ
コンソールアクションをコード化してくれるということで、便利なサービスのように思います。ただし現時点ではプレビュー版であり、生成されたコードは修正が必要なため、あまり実用的ではありません。今後のアップデート次第で使いやすくなると期待しています。
CloudFormation初心者としての感想ですが、自分のコンソール操作とCloudFormationのコードを繋げることが出来たので、学習として利用するのも良いと感じました。