CodeWhispererをCloudFormationテンプレートで使う
なにをするのか
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によるコード提案がどんな感じか確認する。以下を参考にする。
環境準備:VSCodeにCodeWhispererを導入
Visual Studio Code(VSCode)のインストール
まずMicrosoft社の提供するコードエディターVSCode。以下からインストーラを入手し、インストールする。
AWS Toolkit for Visual Studio Codeのインストール
VSCode上でのCodeWhispererは、VSCodeの機能拡張AWS Toolkit for Visual Studio Codeの一部として動作するので、これとその前提拡張機能をインストールする。
以下を行う。
- VSCodeの拡張機能の検索で
aws
を検索する。 - 提供者がAmazon Web Servicesの「AWS Toolkit」が出てくるはずなのでインストールする。
公式情報は以下。
認証用のAWS Builders IDの作成
認証には、とりあえずAWS Builders IDを使うとよいと思う。これはAWSのID(IAMユーザーなど)やAmazonのIDとは別の、開発者としてのIDで、個人に紐づく。つまり特定のAWSアカウントに紐づかないので、ポータブルでサステナブルだと思われるので、お勧めしている。
以下を行う。
- AWS Builders ID プロフィールページにアクセスする。未作成 or 未ログインであればログインページに遷移する・
- IDを新規登録すす。CodeWhispererを使用するうえで、それ以上のプロフィール登録とかはしなくてよい。
公式情報は以下。
認証用IDの設定
CodeWhispererが上記AWS Builders IDで認証を行うように、設定する。ここは以下を参照。
ここまでで環境準備は完了。
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インスタンスなどが一式そろえられてしまった。