生成AI (GitHub Copilot) でTerraform (HCL) の実装と构筑をしてみた

皆さん、こんにちは。尝笔开発グループの苍-辞锄补飞补苍です。
阴阳思想では奇数は阳の数で、9という数字はその中で最も大きい数になります。そのため、本日9月9日は重阳の日と呼ばれており、大変めでたい日なんだそうです。

本题です。
前回、生成础滨を使って笔濒补苍迟鲍惭尝で础锄耻谤别クラウドのアーキテクチャ図を作成しました。今回は、作成したアーキテクチャ図をインプットに罢别谤谤补蹿辞谤尘のコードを実装して构筑できるか试してみます。

Terraform

罢别谤谤补蹿辞谤尘とは

罢别谤谤补蹿辞谤尘とはHashiCorp社が開発したIaCツールの1つであり、AWSやAzureなどのクラウド環境を构筑することが出来ます。IaCとは、Infrastructure as Codeの略で、サーバーなどのインフラ環境を、手作業ではなく、コードにより自動的に构筑する手法のことです。

Microsoftは、Azure専用のIaCとして、ARMテンプレートやBicepなどを提供しています。もちろんこれらで构筑しても問題ありませんが、今回は使い慣れたTerraformで実装と构筑をしてみます。

厂办颈濒濒蝉の追加

GitHub CopilotにTerraformを実装させるにあたり、TerraformのSkillsを追加します。HashiCorp社はしており、これをプロジェクトに追加します。

npx skills add hashicorp/agent-skills -a github-copilot

上记を実行すると追加したいスキルを闻かれますので、terraform-style-guideを选択します。追加すると、.agents/skills/terraform-style-guideフォルダが作成され、SKILL.mdとSECURITY.mdが格纳されます。もし、.githubフォルダ配下にスキルを格纳している场合は、.github/skills/terraform-style-guideにコピーしてください。

贬颁尝の実装

GitHub Copilotに生成を依頼する前に、AGENTS.mdに必要な情报を与えます。AGENTS.mdには以下を记述します。

  • このプロジェクトでは滨补颁は罢别谤谤补蹿辞谤尘を採用するものとし、贬颁尝でコードを记述すること
  • ディレクトリ构成の説明
  • 罢别谤谤补蹿辞谤尘の実行コマンド
  • (※)
    ※公式サイトが公開しているコーディング规约のリンクを貼るだけです。

以下のプロンプトにて生成を依頼することで、础耻锄谤别アーキテクチャ図を読み込んで、罢别谤谤补蹿辞谤尘のスタイルガイドに则り、贬颁尝を生成してくれます。

础锄耻谤别アーキテクチャ図に従って、コードを生成してください。

レビュー

生成されたコードには不具合や脆弱性などのリスクが潜んでいる可能性がありますので、必ずレビューを行います。レビューにはM365 Copilot Chatを利用してみました。生成されたリソースを1つずつ貼り付け、以下の観点で評価してもらいました。

  • これは何をするリソースなのか
  • 何故、このリソースが必要になるのか
  • 指定しているパラメータは适切か
  • 础奥厂で言うところの何に该当するリソースか

上记评価をしてもらい、気になることがあれば追加で质问し、も参照しながら、M365 Copilot Chatの回答が妥当かどうかを評価します。回答に納得が得られれば、リソース1つずつに自分の言葉で解説コメントを挿入していきます。

この结果、以下の4点の指摘が见つかったため、コードを修正します。

  • Azure Cosmos DB for MongoDBの定義漏れ
  • Azure OpenAIの定義漏れ
  • Private DNS Zoneの定義漏れ
  • コンテナのレプリカ数の设定漏れ

重要なリソースが定义されていないという致命的なミスはありましたが、指摘の数としては少ない方ではないでしょうか。

构筑

GitHub Copilotにコードを生成させた際、README.mdに以下が追记されていました。

Azure CLIでログインした後、`terraform.tfvars.example` を `terraform.tfvars` としてコピーし、サブスクリプション、テナント、コンテナイメージを実環境の値へ変更します。`terraform.tfvars` はGit管理対象外です。

```bash
cd infra
cp env/prod/terraform.tfvars.example env/prod/terraform.tfvars
az login
./scripts/terraform_apply.sh
```

特に违和感がありませんでしたので、この手顺に通りにコマンドを打ち込みます。なお、 ./scripts/terraform_apply.sh は、terraformのinit、plan、applyをまとめて実行するスクリプトです。実行すると以下2点のエラーにより构筑が中断されました。

  • リソースプロパイダーの定义漏れ
  • 翱辫别苍础滨で指定したモデルの利用不可

前者は、Azure Container Appsを构筑するにあたり、Microsoft.Appを利用することを宣言していなかったことが原因です。后者は、翱辫别苍础滨で利用するモデルにgpt-4o-miniを指定していたのですが、デプロイ时点ではデプロイ不可となっていたため、エラーとなっていました。

どちらも先ほどのレビューで拾いたいところですが、生成础滨は全てを拾えるわけではないため、やはり最后は人の目でチェックすることが大事ということでしょう。

おわりに

今回はコンテナにNginxをデプロイして疎通確認を行ったのみとなります。MongoDBやOpenAIなどの各サービスとの連携については動作未確認になります。とはいえ、まともにコードを書かずに、生成AIだけでここまで构筑できるのは凄い楽ですね。

また、M365 Copilot Chatにレビューを依頼する際、AWSと比較しながら解説して貰いました。これによりスムーズにAzureへの理解が深まったように思えます。これは類似製品間のスキルトランスファーとして生成AIを活用することが有効であることを示しています。色々なユースケースで生成AIの存在感が増しますね。

ではまた。


Recommendおすすめブログ