はじめに
2023/11/27~2023/12/01にアメリカ・ラスベガスでAWS re:Invent 2023が開催されました。
開催期間前後では多くの新サービス及びアップデートがAWSより公式発表されますが、今回はその中から「AWS Console-to-Code」を紹介します。
※2023/12/06執筆時点の情報を記載しています。AWS Console-to-Codeはプレビュー機能のため今後仕様が変更となる可能性があります。
AWS Console-to-Code
AWS Console-to-Codeは、AWSマネジメントコンソール上の操作内容から、IaCコードが出力できるようになる機能アップデートです。
AWSは次のように発表しています。
AWS Console-to-Code を使うと、コンソールで実行されたアクションを、選択した言語の再利用可能なコードに簡単に変換できます。お客様は AWS マネジメントコンソールを使用して、クラウドソリューションの学習とプロトタイプ作成を行います。AWS Console-to-Code は、アクションとワークフローを自動的にキャプチャし、数回クリックするだけでそのコードを生成します。推奨コードでは、AWS がガイドするベストプラクティスに従った GenAI 機能を使用して、デプロイの改善と信頼性の高い本番ワークロードの作成を支援します。お客様は、これらのコードスニペットを CloudFormation や CDK などの希望する形式で生成できます。このサービスを利用すると、お客様はコンソールとコードとしてのインフラストラクチャ (IaC) のどちらかを選択する必要がなくなります。
「引用元」:コンソールアクションに対するコードを生成する AWS Console-to-Code (プレビュー) の発表
現状ではプレビューとなっており、バージニアリージョンのEC2のみの対応です。また、出力できるコードはCDK(TypeScript、Python、Java)・CloudFormation テンプレート (JSON、YAML)、AWS CLI コマンドの3種類になります。
AWS Console-to-Codeの利用方法
EC2コンソール上に「Console-to-Code」というメニューが追加されており、そこから利用することが出来ます。
ユーザー側で有効化などの作業は不要です。
早速開いてみたのですが、初期状態ではアクションが記録されていないため何も表示されません。
コンソール操作からコードを生成
コンソール操作を記録するために、EC2インスタンスをマネジメントコンソールから1台作成してみます。
- リージョン:us-east-1(バージニア)
- AMI:Amazon Linux 2023 AMI
- インスタンスタイプ:t3.nano
- キーペア:既存キーペアを指定
- VPC:デフォルト
- セキュリティグループ:新規作成
- EBS:8GB (gp3)
インスタンス作成後、再度Console-to-Codeメニューにアクセスすると「記録されたアクション」に表示されるようになりました。
EC2インスタンス1行ではなく、API操作単位に分割してアクションが記録される仕様のようです。
アクションを選択し「TypeScript コードの作成」ボタンを押すことでコードの生成が行えます。
以下はEC2インスタンス作成及びセキュリティグループ、ルール追加を選択した場合の実行結果です。
なお毎回同じ結果が出力されるわけではなく、都度生成結果は異なるようです。
アクションは5つまで選択でき、統合されて出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
Here is the generated typescript CDK code: ```typescript import * as cdk from '@aws-cdk/core'; import * as ec2 from '@aws-cdk/aws-ec2'; export class MyStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Create security group const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', { vpc: ec2.Vpc.fromLookup(this, 'VPC', {vpcId: 'vpc-XXXXXXXX'}), securityGroupName: 'launch-wizard-1', description: 'launch-wizard-1 created 2023-12-06T01:16:25.883Z' }); // Allow ingress rule securityGroup.addIngressRule( ec2.Peer.anyIpv4(), ec2.Port.tcp(443) ); // Create EC2 instance new ec2.Instance(this, 'Instance', { instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.NANO), machineImage: new ec2.AmazonLinuxImage({ generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2 }), vpc: ec2.Vpc.fromLookup(this, 'VPC', {vpcId: 'vpc-XXXXXXXX'}), securityGroup: securityGroup, keyName: 'MISO-keypair', blockDevices: [ { deviceName: '/dev/xvda', volume: ec2.BlockDeviceVolume.ebs(8, { volumeType: ec2.EbsDeviceVolumeType.GP2 }) } ] }); } } ``` Reasoning: - Created a security group with the given name, description and VPC - Added an ingress rule to allow TCP port 443 from 0.0.0.0/0 to match the CLI command - Looked up the VPC using the given VPC id - Used the Amazon Linux 2 image since no image id was given - Specified the instance type, security group, key pair name and block device mapping to match CLI command - Added a gp2 EBS volume since no disk specs were given |
生成したコードを利用した実環境へのデプロイ
生成したコードは実際にCDK環境で利用することも可能です。
なお画面上でも注記があるように、実際に利用する場合は環境に応じて設定値を調整する必要があります。
今回の場合だとセキュリティグループ名の変更、リソース名競合などの調整、利用環境にあわせたCDKのバージョン変更等が必要でした。
まとめ
AWS Console-to-Codeを利用することで、自身で行ったコンソール操作から簡単にコードサンプルを出力することが可能です。IaCコードを実装する際の助けとして利用出来そうなアップデートです。現状ではEC2のみの対応ですが、今後の対応サービスの拡張やサービス横断での一括出力などの対応に期待したいです。
参考URL
執筆者プロフィール
- 入社以来、開発部門にて業務システム開発に従事。現在はAWS技術支援を担当。興味分野はAWS/GCP/Alexa/MachineLearning
この執筆者の最新記事
- Pick UP!2023.12.28コンソール操作からコードを生成する「AWS Console-to-Code」
- AWS・クラウド2020.01.16Alexaフラッシュブリーフィングスキルの作り方
- AWS・クラウド2019.03.18Alexa+Amazon Connectで電話をかける