概要
- 今回は、2024年10月にGA(General Availability) となったConsole-to-Code を紹介します。この機能は、AWS マネジメントコンソールで行ったアクションを記録し、再利用可能なコードに変換できる機能です。興味深いですね。
- 記事の執筆時点で、Amazon EC2、Amazon VPC、Amazon RDS のサービスのみ対応しています。コードの変換は、AWS CLI、CloudFormation YAML あるいは JSON、CDK に対応しているようです。
Console-to-Codeでアクションを記録する
- 試しに、EC2 インスタンスを作成し、アクションを記録します。
- EC2のマネジメントコンソールから、右端にある① のマークを押します。次に、②の「記録を開始」を選択します。
- 記録が開始されました。いつも通りにEC2 インスタンスを作成します。
- 具体的には、名前(Nameタグ)、AMIにami-0ef29ab52ff72213b、インスタンスタイプにt2.micro、キーペア、VPC、サブネット、セキュリティグループ、ストレージ設定、IAMプロファイル、ユーザーデータを指定しました。
- EC2 インスタンスが作成できました。
- 右端のアイコンを押し、Console-to-Code を開き、「停止」を押して記録を止めます。
コードを生成してEC2を構築する
- 次は、コードを生成します。
- CloudFormation のYAML を生成します。「CFN YAMLを生成」を選択します。
- コードのレビュー画面が表示されます。AWS CLIではないため、下方にある「許可」を押します。
- CloudFormation のYAML が生成されました。
- 「ダウンロード」ではなく「コピー」を押します。
- 「コピー」を押した結果、以下のコードが生成されました。
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0ef29ab52ff72213b
InstanceType: t2.micro
KeyName: niikawa-testkey
UserData:
Fn::Base64: !Sub |
#!/bin/bash
sudo hostnamectl set-hostname niikawa-test-linux
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
Encrypted: false
DeleteOnTermination: true
Iops: 3000
SnapshotId: snap-0xxxxxxxxxxxxxxxx
VolumeSize: 10
VolumeType: gp3
Throughput: 125
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: 0
GroupSet:
- sg-0xxxxxxxxxxxxxxxx
SubnetId: subnet-xxxxxxxx
CreditSpecification:
CPUCredits: standard
Tags:
- Key: Name
Value: niikawa-test-ec2
IamInstanceProfile:
Arn: arn:aws:iam::111111111111:instance-profile/niikawa-ec2-ssm
MetadataOptions:
HttpEndpoint: enabled
HttpPutResponseHopLimit: 2
HttpTokens: required
PrivateDnsNameOptions:
HostnameType: ip-name
EnableResourceNameDnsARecord: false
EnableResourceNameDnsAAAARecord: false
Reasoning: {The provided AWS CLI command creates an EC2 instance with the specified properties like image ID, instance type, key pair, user data script, EBS volume, network interface, CPU credit specification, tags, IAM instance profile, metadata options, and private DNS name options. I have mapped each of these properties to the corresponding CloudFormation resource properties under the AWS::EC2::Instance resource type. The UserData property is base64 encoded as required by CloudFormation. The BlockDeviceMappings property is defined as a list with a single mapping for the root EBS volume. The NetworkInterfaces property is defined as a list with the specified subnet ID, security group, and public IP assignment. The count parameter from the CLI is not needed in CloudFormation as it will create the specified number of resources by default.}
- 「ダウンロード」を押した場合、以下のコードが生成されました。(こちらは正しく生成されていません)
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0ef29ab52ff72213b
InstanceType: t2.micro
KeyName: niikawa-testkey
UserData:
Fn::Base64: !Sub |
- CloudFormation からコードを使用してリソースを作成します。
- 無事に、EC2インスタンスが作成されました。
- 色々と可能性を感じるサービスですね!今後のアップデートも楽しみです!