Closed3

CodeWhispererをCloudFormationテンプレートで使う

Makio TsukamotoMakio Tsukamoto

なにをするのか

2023.11.26のアップデート「Announcing new enhancements to Amazon CodeWhisperer」でAWS CloudFormation (YAML、JSON)、AWS CDK(TypeScript、Python)、HashiCorp Terraform(HCL)に対応したCodeWhispererを試してみる。

具体的には

VSCodeにCodeWhispererを導入し、CloudFormationテンプレートでCodeWhispererによるコード提案がどんな感じか確認する。以下を参考にする。

Makio TsukamotoMakio Tsukamoto

環境準備:VSCodeにCodeWhispererを導入

Visual Studio Code(VSCode)のインストール

まずMicrosoft社の提供するコードエディターVSCode。以下からインストーラを入手し、インストールする。

AWS Toolkit for Visual Studio Codeのインストール

VSCode上でのCodeWhispererは、VSCodeの機能拡張AWS Toolkit for Visual Studio Codeの一部として動作するので、これとその前提拡張機能をインストールする。

以下を行う。

  1. VSCodeの拡張機能の検索で aws を検索する。
  2. 提供者がAmazon Web Servicesの「AWS Toolkit」が出てくるはずなのでインストールする。

公式情報は以下。

認証用のAWS Builders IDの作成

認証には、とりあえずAWS Builders IDを使うとよいと思う。これはAWSのID(IAMユーザーなど)やAmazonのIDとは別の、開発者としてのIDで、個人に紐づく。つまり特定のAWSアカウントに紐づかないので、ポータブルでサステナブルだと思われるので、お勧めしている。

以下を行う。

  1. AWS Builders ID プロフィールページにアクセスする。未作成 or 未ログインであればログインページに遷移する・
  2. IDを新規登録すす。CodeWhispererを使用するうえで、それ以上のプロフィール登録とかはしなくてよい。

公式情報は以下。

認証用IDの設定

CodeWhispererが上記AWS Builders IDで認証を行うように、設定する。ここは以下を参照。

ここまでで環境準備は完了。

Makio TsukamotoMakio Tsukamoto

CodeWhispererによるコーディング支援

YAML形式のCloudFormationでCodeWhispererによるコーディング支援を試していく。

前提

ガイドなどで説明を見つけられなかったが、使ってみた感じだと以下が必要。

  • 拡張子 .yaml のファイル名にする。
  • 先頭行に形式バージョンAWSTemplateFormatVersion: "2010-09-09" が記載されている。

形式バージョンを記載していないと、拡張子が合っていても保管やサジェストがされず、 Alt+c でマニュアルでトリガーしても palintext is currenty not suported by CodeWhisperer. と表示されて終わる(このメッセージを見てしばらく各調子を .yml にしてみるとか迷走した)。

コード補完

Resour まで入力すると Resources: と補完してくれたりする。補完を採用するときは Tab キー。

コードサジェスト

Parameters: と入力すると、最初のパラメータのためのコードを提案してくれる。提案を採用するときは Tab キー。

コメント行でしたいことを入力すると、それを実現するためのコードを提案してくれる。例えば Resources: 行以下に # create vpc と入力して改行すると、まずはリソース名として VPC: がサジェストされる。

これを Tab で採用して改行すると、それはもちろん AWS::EC2::VPC タイプだろうと、そのプロパティも含めて提案してくれる。

採用して改行すると、今度はなにもサジェストされない。ここで Alt+c でマニュアルでCodeWhispererをトリガーすると、 # create internet gateway とCodeWhispererに指示をするためのコメントをCodeWhispererがサジェストしてくるという、なんだかすごい状態になる。

この調子でサジェストの採用と、必要に応じてマニュアルでのトリガーを繰り返していくと、以下のようなコメント行が自動的に挿入され、それに相当するコードが生成された。

  • # attach internet gateway (インターネットゲートウェイをVPCに接続)
  • # create public subnet (パブリックサブネットの作成)
  • # create route table (ルートテーブルの作成)
  • # create route (0.0.0.0/0をインターネットゲートウェイにルーティングするルールの作成)
  • # associate route table with public subnet (作成したルートテーブルをパブリックサブネットに紐づけ)
  • # create security group (セキュリティグループの作成)
  • # allow ssh traffic (sshのIngressアクセスを許可)
  • # allow http traffic (HTTPのIngressアクセスを許可)
  • # allow https traffic (HTTPSのIngressアクセスを許可)
  • # create ec2 instance (EC2インスタンスの作成)

EC2インスタンスはイメージID "XXXXXXXXXXXXXXXXXXXXX" だが、 UserData として yun install httpd などもしておりAmazon Linux想定かなという感じ。とにかくサジェストを繰り返すだけで、Webサーバーを構成するVPC、サブネット、EC2インスタンスなどが一式そろえられてしまった。

このスクラップは2023/12/04にクローズされました