【Amazon Q】生成AIにプログラムを解説してもらった!
2023-11-29
azblob://2023/11/29/eyecatch/2023-11-29-codewhisperer-description-terraform-000.jpg

2023年4月13日にGAされたAmazon CodeWhispererですが、AWS re:Inventで新たに

  • Terraformの対応
  • コードの解説
  • 言語バージョンのアップグレード(Amazon Q Code Transformation)
  • プロンプトを利用したアプリケーション開発

上記のアップデートが発表されました。

本記事では、AWSの公式サンプル集terraform-sample-workshopを使用し、Amazon Q にTerraformのコードを解説してもらいます。

CodeWhisperer とは?

CodeWhisperer は、統合開発環境 (IDE) で単一行コードや完全な関数コードの提案をリアルタイムで生成する AI コーディング支援ツールで、ソフトウェアの迅速な構築をサポートします。CodeWhisperer を使用すると、「Upload a file with server-side encryption」(サーバー側の暗号化を使用してファイルをアップロードする) など、特定のタスクを英語で概説するコメントを自然言語で記述できます。 この情報に基づいて、CodeWhisperer はタスクを実行できる 1 つ以上のコードスニペットを IDE で直接推奨します。すばやく簡単に最上位の提案を受け入れたり (タブキー)、その他の提案を表示したり (矢印キー)、引き続き独自のコードを記述したりできます。コードの提案を受け入れる前に必ずその内容を確認する必要があります。その結果、そのコードが意図したとおりに動作するように編集する必要がある場合があります。

出典: よくある質問 Amazon CodeWhisperとは?

要約すると

  • コメントの自動生成
  • コードの自動生成

を実行するAIツールです。しかも個人利用に関しては無料!!!

対応言語

  • Python
  • Java
  • JavaScript
  • TypeScript
  • C#
  • Go
  • Rust
  • PHP
  • Ruby
  • Kotlin
  • C
  • C++
  • Shell scripting
  • SQL
  • Scala
  • JSON
  • YAML
  • HCL

Nginx用のTerraformコードをAIが解説

は本記事では、省略します。またVS Code上でterraform-sample-workshopを開き、プロンプトを送り検証しました。

simple_nginx_stack はNginx用のTerraformが書かれたプログラムが格納されているディレクトリ名となります

日本語の質問

プロンプト

simple_nginx_stackの解説をしてください

回答

I apologize, but I'm not able to respond to this request. Perhaps we could find another topic to discuss?

(和訳) 申し訳ありませんが、このご要望にはお応えできません。また別の話題で話し合いませんか?

英語の質問

プロンプト

Explain simple_nginx_stack main.tf

(和訳) simple_nginx_stack main.tfを説明する。

回答

Here is an explanation of the main.tf file in the simple_nginx_stack Terraform module: The main.tf file is the main configuration file for a Terraform module. In this file we are declaring the infrastructure resources that will be created when applying this Terraform configuration. The first resource declared is an aws_instance resource with the type "nginx". This will create an EC2 instance with the Amazon Linux 2 AMI. The instance will be named "nginx" and have a public IP address. A security group resource is declared next to allow HTTP and HTTPS traffic to the instance. This security group will be assigned to the EC2 instance. An EIP or Elastic IP is allocated and attached to the EC2 instance. This gives the instance a static, public IP address. Finally an output is declared to output the public IP address of the instance after it is created. This allows us to easily see the IP address in the Terraform output after applying the changes. So in summary, this simple Terraform module will deploy a single EC2 instance running nginx, with a security group and EIP to make it publicly accessible on port 80 and 443. Let me know if any part of the configuration needs more explanation!

(和訳) ここではsimple_nginx_stack Terraformモジュールのmain.tfファイルについて説明します: main.tfファイルはTerraformモジュールのメインの設定ファイルです。このファイルでは、このTerraformの設定を適用する際に作成されるインフラリソースを宣言しています。 最初に宣言するリソースはaws_instanceリソースで、タイプは "nginx "です。これはAmazon Linux 2 AMIでEC2インスタンスを作成します。インスタンスは "nginx "という名前で、パブリックIPアドレスを持ちます。 次に、インスタンスへのHTTPとHTTPSトラフィックを許可するためのセキュリティグループリソースが宣言される。このセキュリティグループはEC2インスタンスに割り当てられる。 EIPまたはElastic IPが割り当てられ、EC2インスタンスにアタッチされる。これはインスタンスに静的なパブリックIPアドレスを与える。 最後に、インスタンス作成後のパブリックIPアドレスを出力するためのoutputが宣言される。これにより、変更適用後のTerraformの出力でIPアドレスを簡単に確認することができる。 まとめると、このシンプルなTerraformモジュールはnginxが動作するEC2インスタンスを1つデプロイし、ポート80と443でパブリックにアクセスできるようにセキュリティグループとEIPを設定します。設定にもっと説明が必要な部分があれば教えてください!

「日本語で出力して」と指示してみる

プロンプト

Explain simple_nginx_stack main.tf. However, the output result is in Japanese.

回答

An error occurred while processing your request. This error is reported to the team automatically. We will attempt to fix it as soon as possible. Details: Improperly formed request. Request ID:

(和訳) リクエストの処理中にエラーが発生しました。このエラーは自動的にチームに報告されます。できるだけ早く修正を試みます。 詳細 リクエストの形式が不適切です。 リクエストID

GitHub Copilotでも同様の質問をしてみた

プロンプト

Explain simple_nginx_stack main.tf

(和訳) simple_nginx_stack main.tfを説明する。

回答

The main.tf file in the simple_nginx_stack Terraform module is the primary configuration file. It declares the infrastructure resources that will be created when this Terraform configuration is applied. Here's a step-by-step explanation:

  1. An aws_instance resource of type "nginx" is declared. This creates an EC2 instance with the Amazon Linux 2 AMI. The instance is named "nginx" and is assigned a public IP address.
  1. A security group resource is declared to allow HTTP and HTTPS traffic to the instance. This security group is assigned to the EC2 instance.
  1. An Elastic IP (EIP) is allocated and attached to the EC2 instance, providing the instance with a static, public IP address.
  1. An output is declared to display the public IP address of the instance after it's created. This allows for easy viewing of the IP address in the Terraform output after the changes are applied.

In summary, this Terraform module deploys a single EC2 instance running nginx, with a security group and EIP to make it publicly accessible on ports 80 and 443.

(和訳) simple_nginx_stack Terraformモジュールのmain.tfファイルが主要な設定ファイルです。このTerraformの設定が適用されたときに作成されるインフラリソースを宣言しています。以下、順を追って説明します:

  1. nginx "タイプのaws_instanceリソースが宣言されています。これはAmazon Linux 2 AMIでEC2インスタンスを作成します。インスタンスには「nginx」という名前が付けられ、パブリックIPアドレスが割り当てられる。
  1. インスタンスへのHTTPとHTTPSトラフィックを許可するために、セキュリティグループリソースが宣言される。このセキュリティグループはEC2インスタンスに割り当てられる。
  1. Elastic IP(EIP)が割り当てられてEC2インスタンスにアタッチされ、インスタンスに静的なパブリックIPアドレスが提供される。
  1. インスタンスの作成後、インスタンスのパブリックIPアドレスを表示する出力が宣言される。これにより、変更適用後のTerraformの出力でIPアドレスを簡単に見ることができる。

まとめると、このTerraformモジュールはnginxを実行する単一のEC2インスタンスを、ポート80と443でパブリックにアクセスできるようにセキュリティグループとEIPを使ってデプロイします。

まとめ

  • 日本語のプロンプト&出力は2023/11/29日時点で非対応
  • 英語のプロンプト&出力は問題なく動作する

ということがわかりました。

所感

  • 日本語が非対応
  • GitHub Copilotの方が説明が好み(主観)
  • VS Code上での操作感はGitHub Copilotと遜色ない

上記の理由より、個人的には「まだ時間が必要だな」というのがファーストインプレッションでした。 もちろん個人利用は無料 のため、有料サービスと比較するのは酷な話ですが、、、

以上、ランニング中にAliAかくれんぼをよく聞く西村でした。