先月の10/10にAWSの新機能、Console-to-Codeが一般提供されました。
作成されるCloudFormationのテンプレートに興味があり検証したので、備忘録を記録しておきます。
機能は ClassMethod 等で簡単な紹介が公開されています。
目次
- Console-to-Code 機能
- Console-to-Code 料金
- Console-to-Code IAM権限
- 実行手順 ①-1 操作の記録 からAWS CLIコマンドを作成
- 実行手順 ①-2 ウィザード画面(設定画面)の内容 からAWS CLIコマンドを作成
- 実行手順 ② CloudFormationのテンプレートやCDKのコードを作成
- Console to Codeの良い点
- CloudFormationテンプレートの問題点・課題
-
最後に
「辞書として使える」CloudFormationの本
1. Console-to-Code 機能
管理コンソールの操作をコードに変換できます。
ここの「コード」とは ①AWS CLIコマンド、②CloudFormationテンプレートまたはCDKのプログラムです。
コード① AWS CLIコマンド
AWS CLIコマンド作成(管理コンソール操作の変換)には2種類の方法があります。
- ①-1 操作の記録 から作成
- ①-2 ウィザード画面(設定画面)の内容 から作成
①-1は実際にリソースを作成した記録からコマンドを作成します。
①-2は管理コンソールの「ウィザード画面」の設定内容からコマンドを作成します。①-1 と異なりリソースの作成が不要です。
詳しくは実行手順欄で説明しています。
コード② CloudFormationテンプレートまたはCDKのプログラム
こちらは①で作成したAWS CLIコマンドから作成します。
②のことを「infrastructure-as-code (IaC) コード」とも呼んでいます。
Console-to-Code は現在、次の言語と形式でIaCコードを生成できます。
- CDK Java
- CDK Python
- CDK TypeScript
- CloudFormation JSON
- CloudFormation YAML
言語と形式のデフォルトはCloudFormation YAML(CFN YAML)です。
生成AIのAmazon Qを利用しています。
Console to Code 対応サービス
コード①②の作成は下記サービスが対象です。
- Amazon EC2
- Amazon VPC
- Amazon RDS
対象サービスでは、Web管理コンソール画面右上に「Preview Code」アイコン(矢印)が表示されます。
「①-2 ウィザード画面(設定画面)の内容 から作成」は「EC2インスタンスを起動」、「VPCを作成」、EC2の「Auto Scalingグループの作成」の3つのウィザード画面が対応しています。
2. Console-to-Code 料金
「①AWS CLIコマンド」作成に料金はかかりません。
「②CloudFormationテンプレートまたはCDKのプログラム」利用はデフォルトではAmazon Q Developer Free 料金階層で動作します。
Free料金階層では回数制限があると記載されていますが、何回までできるかは現在のところ明記されていません。
Pro料金階層はユーザーあたり19USD/月です。IAM Identity CenterのIDで利用が必要です。
下記説明引用(意訳)
Console-to-Code は Amazon Q Developer の一部であるため、その使用は Amazon Q Developer サービスの料金階層に従います。
Amazon Q Developer の料金階層にはFreeレベルとProレベルがあります。
Free レベルでは、コンソールのアクションを記録し、それらのアクションに基づいて CLI コマンドを生成する操作に月間の固定回数制限はありません。
ただし、記録したアクションに基づいてAWS CDK または AWS CloudFormation でコードを生成する操作は、月間回数に制限があります。Proレベルでは、AWS CDKまたはCloudFormationのコードを生成する月間回数に決まった制限はありません。
AWS マネジメントコンソール にサインインすると(特に設定していなければ)Free 利用枠でアクセスします。毎月のコード生成制限に到達した後、さらにコードを生成するためには Pro 階層に認証する必要があります。
Pro 階層の利用は、IAM Identity Center に登録されたユーザーであり、IAM Identity Center の ID をAmazon Q Developer Pro に登録する必要があります。
詳細については、「Amazon Q Developer Pro サブスクリプションへの認証」または AWS 管理者に問い合わせてください。
3. Console-to-Code IAM権限
q:GenerateCodeFromCommands 権限を必要とします。
4. 実行手順 ①-1 操作の記録 からAWS CLIコマンドを作成
Web管理コンソール画面右上の「Preview Code」アイコン(矢印)をクリックします。
「記録を開始」ボタンで記録を開始します。
記録中Console-to-Codeの画面は閉じることができます。
記録中はアイコンに赤い点が表示されます。
ブラウザのタブ内で記録されています。
記録中のブラウザタブを閉じると、記録は消えますのでご注意ください。
CLIコマンドをコピー / 表示
Webコンソールで実際に操作すると、操作に相当するAWS CLIコマンドが記録されます。
記録されたアクションはフィルタできます。
オペレーション(操作)をチェックボックスで選択すると、「CLIをコピー」ボタンでAWS CLIコマンドをコピーできます。
デフォルトでは記録中の画面にコマンドは表示されませんが、オプションで「CLIコマンド」列が表示できます。
記録画面右上の歯車アイコンから設定します。
CLIコマンドを表示すると、一行を直接コピーが可能になります。
4. 実行手順 ①-2 ウィザード画面(設定画面)の内容 からAWS CLIコマンドを作成
ウィザード画面の設定内容からAWS CLIコマンドを作成します。
繰り返しになりますが、現在対応しているのは下記3つのウィザード画面です。
- 「EC2インスタンスを起動」
- 「VPCを作成」
- 「Auto Scalingグループの作成」
各ウィザード画面の[Preview code]リンクをクリックすると表示します。
「EC2インスタンスを起動」ウィザードの例
「インスタンスを起動」ボタン下の [プレビューコード] リンクでAWS CLIコマンドを表示しています。
インスタンスを起動せずにAWS CLIコマンドが作成できています。
[Preview code]は、なぜか1回ではうまく表示できず、「記録を開始」が表示されることがあります。
その場合は無視してもう1度[Preview code]リンクをクリックすると表示されます。
4. 実行手順 ② CloudFormationのテンプレートやCDKのコードを作成
①-1または①-2 のAWS CLI コマンドからCloudFormationのテンプレートやCDKのコードを作成します。
作成にはアマゾンの生成AIサービス「Amazon Q」を利用しています。
コードを生成
生成対象のオペレーションにチェックを入れ、「CFN YAMLを生成」ボタンを押します。
*CFN YAML以外を作成する場合はプルダウンで選択
画面に警告がある通り、読み取りタイプのオペレーションにチェックを入れても、生成対象からは無視されます。
Reasoning: 行に説明が記載されています。
CloudFormation テンプレートでは Reasoning: 行を削除しないと動作しません。
時々最初の行に ```yaml 等と表示されることがあります。
これも削除する必要があります。
残念ながら、現在のところ②は間違いが多いです。
cfn-lint 等の併用をお勧めします。
*これについては別途記載予定。
5.Console to Codeの良い点
AWS CLI コマンドの表示は便利
画面操作をAWS CLIコマンドに変換してくれるのは大変便利です。
AWS CLIコマンドオプションは勉強になりますし、AWS CLIコマンドを基にして、Amazon Q Agentとチャットでテンプレート作成させると、修正指示もできて楽です。
(Console to CodeでもAmazon Qへ修正が依頼できるとよいのですが。)
CloudFormationテンプレートファイルは可読性が良い
Amazon Q で作成しているおかげと思われますが、自動で作成しているにも関わらずテンプレートが読みやすいです。
- 論理ID(論理リソース名)をリソースタイプ等から作成する
- Nameタグでリソースに名前を登録してくれる
など、CloudFormation のIaCジェネレーターで作成したテンプレートは読みづらいことを思うと、ここは評価できると思います。
CloudFormationテンプレートファイルの設定内容を記載してくれる
テンプレートファイルの設定概要が記載されており、確認と整理に役立ちます。
6.CloudFormationテンプレートの問題点・課題
CDKは評価できるほど知識がないので、CloudFormationテンプレートのみ確認しました。
1.テンプレートが不正確、不安定
現時点では下記のような間違いが見つかります。また間違いもたまに出なかったり、と安定しません。
-
存在しないプロパティを指定する
EC2 instanceで実装されていないプロパティTagSpecifications,MetadataOptionsやインスタンス数のcountなどを設定してしまう。
なおTagSpecifications,MetadataOptionsなど実装されていないプロパティは、代替策としてEC2の起動テンプレートを利用する等が必要です。
-
プロパティの大文字小文字を間違える
PrivateDNSNameOptions など("PrivateDnsNameOptions"の間違い)
-
設定内容を Reasoning: 項目に記載するためエラーとなる
テンプレートの説明が Reasoning: 以下に記載されますが、テンプレートの文法上は許されないのでエラーとなります。
Metadata: にしてほしいところです。
-
"```yaml" を先頭に入れてしまう
時々混入します。エラーとなります。
-
AWS::EC2::VPCEndpoint にNameタグをつける
CloudFormationには(現状)AWS::EC2::VPCEndpoint にタグが未実装という問題があり、毎回失敗します。
*CloudFormationには「VPCのメインルートテーブルが(Lambda等を利用しないと)設定できない」問題もありますが、これは個別にルートテーブルを作成して対応してくれます。
なお、いずれもフィードバックはしていますので、物によっては改善されているかもしれません。
2. コード生成の上限
-
「CFN YAMLを生成」ボタンが無効になる
現在のところ、選択したオペレーション数(AWS CLIコマンド数)が多いとボタンが有効化されません。
21件で「CFN YAMLを生成」ボタンが無効になります。
-
コード生成対象のアクション数が多いとエラーとなる
選択したオペレーション数(AWS CLIコマンド数)が21件未満で実行できても、数が多いと "Improperly formed request" エラーになることがあります。
内部でAmazon Q の最大行数を超えた場合に発生するようです。
Console-to-Codeの画面上では、分けてテンプレートを作成するしかないようです。
これらはQ Developer Pro 料金階層を契約しても変わりませんでした。
7.最後に
問題点・課題を記載すると、ダメダメなサービスと捉えられてしまう恐れがあるのでフォロー
便利な機能です。特にConsole to Code で作成できるAWS CLIコマンドは色々と利用できます。
作成するCloudFormationテンプレートはまだ問題もありますが、生成AIの意欲的な活用方法であり、上の課題に留意すればたたき台としては充分使えると感じました。
蛇足ですが、Visual Studio Code上のAmazon Q アシスタントで同じことを実行させると、修正を指示でき正確なテンプレート作成が可能でした。
Amazon Qや生成AIの可能性を実感できた検証にもなりました。
個人的宣伝
「辞書として使える」CloudFormationの本
CloudFormationの辞書として使える本を 詳解 AWS CloudFormation としてマイナビ出版様から出版していただいています。
この本にはCloudFormationの全機能の説明、コマンドの説明、Webコンソール画面操作や仕様詳細、テンプレートファイル仕様、YAMLフォーマットの説明などを記載しています。
またよく見るエラーの一覧も付記しています。
本の補足ファイル等
本をより便利に使えるよう、下記を公開しています。
-
テンプレートファイル
本に記載したテンプレートはすべてgithubで公開しています。
-
詳細目次
印刷して本に挟んで利用できるようにしています。
本の目次には章の一階層までしか記載できませんでしたが、この詳細目次には第三~第四階層まで記載しています。
詳細目次は下記としても利用できます。
- CloudFormationの機能一覧(2章 CloudFormationの機能とコンソール画面)
- コマンド一覧(3章 コマンド操作)
- 各一覧表の一覧(8章 シートシート集)
本の正誤情報
詳解 CloudFormation の正誤情報です。すみません。