0
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?

Console to Codeで作成したCloudFormationのテンプレートを検証してみた

Posted at

先月の10/10にAWSの新機能、Console-to-Codeが一般提供されました。

作成されるCloudFormationのテンプレートに興味があり検証したので、備忘録を記録しておきます。

機能は ClassMethod 等で簡単な紹介が公開されています。

目次

  1. Console-to-Code 機能
  2. Console-to-Code 料金
  3. Console-to-Code IAM権限
  4. 実行手順 ①-1 操作の記録 からAWS CLIコマンドを作成
  5. 実行手順 ①-2 ウィザード画面(設定画面)の内容 からAWS CLIコマンドを作成
  6. 実行手順 ② CloudFormationのテンプレートやCDKのコードを作成
  7. Console to Codeの良い点
  8. CloudFormationテンプレートの問題点・課題
  9. 最後に
    「辞書として使える」CloudFormationの本

1. Console-to-Code 機能

管理コンソールの操作コードに変換できます。
ここの「コード」とは ①AWS CLIコマンド②CloudFormationテンプレートまたはCDKのプログラムです。

コード① AWS CLIコマンド

AWS CLIコマンド作成(管理コンソール操作の変換)には2種類の方法があります。

  • ①-1 操作の記録 から作成
  • ①-2 ウィザード画面(設定画面)の内容 から作成

①-1は実際にリソースを作成した記録からコマンドを作成します。
①-2は管理コンソールの「ウィザード画面」の設定内容からコマンドを作成します。①-1 と異なりリソースの作成が不要です。

①-2 管理コンソールの「ウィザード画面」の作成用リンク
現在「EC2インスタンスを起動」「VPCを作成」「Auto Scalingグループの作成」の3つのウィザードで利用可能ですが、実行用のリンクの表示名が異なります。

EC2インスタンスを起動:『プレビューコード』

VPCを作成:『Preview code』

Auto Scalingグループの作成:『コードをプレビューする』

以下説明では英語表記の [Preview code] で記載します。

詳しくは実行手順欄で説明しています。

コード② CloudFormationテンプレートまたはCDKのプログラム

こちらは①で作成したAWS CLIコマンドから作成します。
②のことを「infrastructure-as-code (IaC) コード」とも呼んでいます。
Console-to-Code は現在、次の言語と形式でIaCコードを生成できます。

  • CDK Java
  • CDK Python
  • CDK TypeScript
  • CloudFormation JSON
  • CloudFormation YAML

言語と形式はボタンのプルダウンから選択できます。
q-code.png

言語と形式のデフォルトはCloudFormation YAML(CFN YAML)です。
cfn-yml-button.png

生成AIのAmazon Qを利用しています。

Console to Code 対応サービス

コード①②の作成は下記サービスが対象です。

  • Amazon EC2
  • Amazon VPC
  • Amazon RDS

対象サービスでは、Web管理コンソール画面右上に「Preview Code」アイコン(矢印)が表示されます。
image.png

①-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」アイコン(矢印)をクリックします。

image.png

「記録を開始」ボタンで記録を開始します。

記録が進行中の画面

記録中Console-to-Codeの画面は閉じることができます。
記録中はアイコンに赤い点が表示されます。
image.png

ブラウザのタブ内で記録されています。
記録中のブラウザタブを閉じると、記録は消えますのでご注意ください。

CLIコマンドをコピー / 表示

Webコンソールで実際に操作すると、操作に相当するAWS CLIコマンドが記録されます。
記録されたアクションはフィルタできます。

  • 設定変更系は「書き込み」タイプ
  • 参照系操作は「読む取り」(?)タイプ
    235545.png

オペレーション(操作)をチェックボックスで選択すると、「CLIをコピー」ボタンでAWS CLIコマンドをコピーできます。
image.png

デフォルトでは記録中の画面にコマンドは表示されませんが、オプションで「CLIコマンド」列が表示できます。
記録画面右上の歯車アイコンから設定します。
スクリーンショット 2024-10-16 020451.png

「CLIコマンド」列を表示した画面です。
image.png

CLIコマンドを表示すると、一行を直接コピーが可能になります。
image

4. 実行手順 ①-2 ウィザード画面(設定画面)の内容 からAWS CLIコマンドを作成

ウィザード画面の設定内容からAWS CLIコマンドを作成します。
繰り返しになりますが、現在対応しているのは下記3つのウィザード画面です。

  • 「EC2インスタンスを起動」
  • 「VPCを作成」
  • 「Auto Scalingグループの作成」

各ウィザード画面の[Preview code]リンクをクリックすると表示します。

「EC2インスタンスを起動」ウィザードの例

「インスタンスを起動」ボタン下の [プレビューコード] リンクでAWS CLIコマンドを表示しています。
インスタンスを起動せずにAWS CLIコマンドが作成できています。

image.png

「VPCを作成」 ウィザードの例 リンクの表示名は [Preview code]

image.png

「Auto Scalingグループの作成」ウィザードの例 リンクの表示名は [コードをプレビューする]

image.png

[Preview code]は、なぜか1回ではうまく表示できず、「記録を開始」が表示されることがあります。
その場合は無視してもう1度[Preview code]リンクをクリックすると表示されます。

4. 実行手順 ② CloudFormationのテンプレートやCDKのコードを作成

①-1または①-2 のAWS CLI コマンドからCloudFormationのテンプレートやCDKのコードを作成します。
作成にはアマゾンの生成AIサービス「Amazon Q」を利用しています。
top

コードを生成

生成対象のオペレーションにチェックを入れ、「CFN YAMLを生成」ボタンを押します。
*CFN YAML以外を作成する場合はプルダウンで選択

image
画面に警告がある通り、読み取りタイプのオペレーションにチェックを入れても、生成対象からは無視されます。

初回利用時は同意(「許可」ボタン)が必要です。
image.png

コードが生成されます。1分程度待ちます。 image.png

生成したコードはダウンロードも可能です。image.png

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.テンプレートが不正確、不安定

現時点では下記のような間違いが見つかります。また間違いもたまに出なかったり、と安定しません。

  1. 存在しないプロパティを指定する
    EC2 instanceで実装されていないプロパティTagSpecifications,MetadataOptionsやインスタンス数のcountなどを設定してしまう。
    なおTagSpecifications,MetadataOptionsなど実装されていないプロパティは、代替策としてEC2の起動テンプレートを利用する等が必要です。

  2. プロパティの大文字小文字を間違える
    PrivateDNSNameOptions など("PrivateDnsNameOptions"の間違い)

  3. 設定内容を Reasoning: 項目に記載するためエラーとなる
    テンプレートの説明が Reasoning: 以下に記載されますが、テンプレートの文法上は許されないのでエラーとなります。
    Metadata: にしてほしいところです。

  4. "```yaml" を先頭に入れてしまう
    時々混入します。エラーとなります。

  5. AWS::EC2::VPCEndpoint にNameタグをつける
    CloudFormationには(現状)AWS::EC2::VPCEndpoint にタグが未実装という問題があり、毎回失敗します。
    *CloudFormationには「VPCのメインルートテーブルが(Lambda等を利用しないと)設定できない」問題もありますが、これは個別にルートテーブルを作成して対応してくれます。

なお、いずれもフィードバックはしていますので、物によっては改善されているかもしれません。

2. コード生成の上限

  1. 「CFN YAMLを生成」ボタンが無効になる
    現在のところ、選択したオペレーション数(AWS CLIコマンド数)が多いとボタンが有効化されません。
    21件で「CFN YAMLを生成」ボタンが無効になります。
    image.png

  2. コード生成対象のアクション数が多いとエラーとなる
    選択したオペレーション数(AWS CLIコマンド数)が21件未満で実行できても、数が多いと "Improperly formed request" エラーになることがあります。
    内部でAmazon Q の最大行数を超えた場合に発生するようです。
    image.png

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 としてマイナビ出版様から出版していただいています。

AmazonYodobashiマイナビ出版

この本にはCloudFormationの全機能の説明、コマンドの説明、Webコンソール画面操作や仕様詳細、テンプレートファイル仕様、YAMLフォーマットの説明などを記載しています。
またよく見るエラーの一覧も付記しています。

本の補足ファイル等

本をより便利に使えるよう、下記を公開しています。

  • テンプレートファイル
    本に記載したテンプレートはすべてgithubで公開しています。

  • 詳細目次
    印刷して本に挟んで利用できるようにしています。
    本の目次には章の一階層までしか記載できませんでしたが、この詳細目次には第三~第四階層まで記載しています。

詳細目次は下記としても利用できます。

  • CloudFormationの機能一覧(2章 CloudFormationの機能とコンソール画面)
  • コマンド一覧(3章 コマンド操作)
  • 各一覧表の一覧(8章 シートシート集)

本の正誤情報

詳解 CloudFormation の正誤情報です。すみません。

  • ネストの説明ページ(差し替えPDF
    項目 "2-15-7 ネストの更新" ~ "2-15-9 ネストの変更セット:ルートスタックのみ更新" まで更新です。
    更新ページの差し替えPDF をマイナビ出版社で公開していただいています。
  • 586ページ ForEachのサンプルで記載ミスがありました。
    githubでは訂正版を公開しています。
0
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
0
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?