LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

Facebook X Instagram
ラックピープル | 

AIエージェントでTerraform importはどこまで楽になる?

「IaCで管理したいのに、GUIで作ってしまった既存リソースが大量に残っている」
このような状況に心当たりはないでしょうか?

Terraformで既存リソースを管理下に置くにはimport作業が必要ですが、対象リソースの特定や構成ファイルの作成は手間がかかり、つい後回しになりがちです。従来のTerraform importでは、AWS CLIや管理コンソールで対象リソースを確認し、リソースIDを取得してimportブロックを作成し、generate-config-outで構成ファイルを生成、plan結果を見ながら修正するといった作業を、リソースごとに繰り返す必要がありました。環境が大規模になるほど工数は増え、設定ミスや取り込み漏れのリスクも高まります。

そこで役立つのが、AIエージェント(Kiro CLI)です。自然言語で指示するだけで、リソースの洗い出しからID取得、importブロック作成、plan差分確認、修正までの一連の作業を効率化できます。反復作業をAIに任せることで、作業者はリソースをコード管理の対象とすべきかといった判断に集中できます。

本記事では、AIエージェント型ツール「Kiro CLI」とTerraform 1.5の-generate-config-outオプションを組み合わせ、既存のAWSリソースを洗い出してインポートするまでの流れを、実際の操作例とともに紹介します。AWS上でインフラを運用し、既存環境のIaC化を効率よく進めたいエンジニアの方は、ぜひ参考にしてみてください。

Kiro CLIについて

Kiro CLIは、ターミナル上で動作するAIエージェント型の開発支援ツールです。ファイルの読み書きやAWS CLIの実行、Terraformコマンドの操作などをAIが自律的に行います。

カスタムエージェントの定義

カスタムエージェント(--agentオプション)を定義することで、特定のワークフローに特化した振る舞いを持たせることができます。今回は以下のようなルールを定義しました。全文は付録に記載しましたので、そちらをご参照ください。

  • importブロック方式を使い、terraform importコマンドは使わない
  • Terraformコマンドでコードを生成する
  • terraform applyは必ずユーザー確認を取る

Terraformのimportとgenerate-config-out

Terraform 1.5以降では、HCLファイルにimportブロックを書き、`terraform plan -generate-config-out=generated.tf`を実行することで、既存リソースをもとにTerraformの構成を自動生成できます。生成コードには不要な属性が混ざることがあるので、planで差分を確認しながら修正を繰り返すのが基本的な流れです。

AIにHCLを初めから生成させる方法もありますが、最終的には同じようにplan差分を確認・修正する工程が必要になります。今回の記事では、Terraformが既存リソースから生成した構成を出発点とし、Kiro CLIに確認・修正・再実行を任せるアプローチを採用しました。この方法なら、Terraformの標準機能を活用しながら、リソースの洗い出しからimport、差分解消までの一連の作業を再現性高く進められます。

ここで重要なのは、AIにHCLを一から書かせることではありません。Terraformが生成した構成をベースに、AIエージェントが確認・修正・再実行を繰り返すことで、手作業を減らしつつ、エンジニアは設計や差分の妥当性といった本来注力すべき判断に集中できます。

インポート作業の実行

実行環境、作業ディレクトリ、ディレクトリ構成などの前提条件は付録にまとめています。

まず、インポート対象となるSQSキューを作成しておきます。

seq 1 5 | while read -r N; do
  aws sqs create-queue --queue-name "sample-queue-${N}"
done

エージェントを指定してKiro CLIを起動します。

kiro-cli chat --agent terraform-import
インポート作業画面。エージェントを指定してKiro CLIを起動

起動したら、以下のプロンプトを入力します。

sampleから始まる SQSキューをインポートしてください。

指示を出すと、AWS CLIでsampleから始まるSQSキューが検索され、5つのキューが見つかります。

続けてimportブロックの生成と`terraform plan -generate-config-out`の実行まで進みます。

インポート作業画面。確認結果を表示

最初のplanで差分やエラーが検出されることがあります。エージェントは生成コードの矛盾する属性を修正し、差分がなくなるまでplanを再実行します。

インポート作業画面。エージェントは生成コードの矛盾する属性を修正し、差分がなくなるまでplanを再実行

applyの実行前には必ずユーザーの確認を求めます。許可を出すと、インポートが実行されます。

インポート作業画面。インポートの実行と完了

最後に

Kiro CLIとTerraformのgenerate-config-outを組み合わせることで、リソースの特定からHCL生成・修正・plan確認、必要に応じたapply実行までを一連の対話で進められました。既存環境のIaC化では、AWS CLIでリソースを一覧取得、IDをコピーする、importブロックを作成する、planで差分を確認する、不要な属性を修正するといった定型作業を何度も繰り返す必要があります。AIエージェントの価値は、こうした反復作業をまとめて任せ、人は設計や差分の妥当性を判断することに集中できる点にあります。

今回ご紹介したSQSキュー5件程度であれば手作業でも対応できますが、数十〜数百のリソースをIaC化する場面では、作業時間の短縮だけでなく、コピー漏れや設定ミスの防止という点でも大きな効果が期待できます。さらに、カスタムエージェントに命名規則や運用ルールをあらかじめ定義しておけば、より大規模なAWS環境でも同じ手順を再現しやすくなります。加えて、HashiCorp公式のterraform-search-importスキルを活用すると、関連リソースの洗い出しまで含めたimport作業のさらなる自動化も可能です。

agent-skills/terraform/code-generation/skills/terraform-search-import/SKILL.md at main · hashicorp/agent-skills · GitHub

AWS環境のIaC化はコードを書くことよりも、既存環境をどう効率よくコードへ移行するかが大きな課題です。本記事で紹介したように、Terraformの標準機能とAIエージェントを組み合わせることで、そのハードルを大きく下げられるでしょう。

本記事の検証および執筆:井上 尚人(株式会社ラック クラウドサービス部)

付録

本記事の検証環境と作業ディレクトリの前提は以下のとおりです。

  • 実行環境:Linux環境のターミナル(WSLなど)
  • インストール済みツール:Kiro CLI v2.8.1(検証時点で使用)、Terraform v1.5以降、AWS CLI、Docker
  • 事前設定:AWS CLIで対象アカウントに認証済み、AWSリソースへの参照権限があること
  • 利用リージョン:ap-northeast-1
  • 作業ディレクトリ:import/配下でterraform initを実行済みであること

インポート作業実行前のディレクトリ構成は以下のとおりです。

.
├── .kiro
│   ├── agents
│   │   └── agent-terraform-import.json
│   └── prompts
│       └── tf-import.md
└── import
    ├── .terraform/
    ├── .terraform.lock.hcl
    └── provider.tf

今回使用したエージェント定義の一部と、プロンプトの全文は以下のとおりです。

{
  "name": "terraform-import",
  "description": "Terraformインポート作業用エージェント。importブロックを使用したリソース取り込みワークフローを実行する。",
  "prompt": "file://../prompts/tf-import.md",
  "welcomeMessage": "Terraformインポート作業用エージェントです。対象リソースを教えてください。",
  ... 
}
あなたはTerraformのインポート作業を行う専門エージェントです。回答は日本語で行ってください。
 
## ワークフロー
 
以下の手順でインポート作業を進めます:
 
1. 事前確認
  - 作業ディレクトリが、terraform init 実施済みであることを確認する
    - 作業ディレクトリのデフォルトは import/ とする
    - 指定されたディレクトリが未作成、または、terraform init が未実施の場合は、ユーザーに確認を取ってから、terraform init を実行する
  - 対象AWSリソースの特定・確認
    - 関連リソースも含めるかをユーザーに確認する(関連リソースがない場合はそのまま進める)
 
2. importブロックの作成
  - `terraform import` コマンドは使わず、必ず `import {}` ブロックをtfファイルに記述する
  - リソースIDはAWS CLIで確認する
    - 関連するリソースも含める(補足参照)
 
3. コード生成
  - `terraform plan -generate-config-out=generated.tf` を実行
  - 生成されたコードの内容を確認・報告する
 
4. コード修正・plan確認
  - 生成コードに問題があれば修正する
  - `terraform plan` で変更なし(importのみ)になることを確認する
  - 差分がある場合はコードを修正して再度planする
 
5. インポート実行
  - `terraform apply` はユーザーの明示的な許可を得てから実行する
 
6. 事後確認
  - importブロックを削除する
  - `terraform plan` で差分がないことを確認する
 
## 制約
 
- `terraform plan` と `terraform validate` は確認なしで実行してよい
- `terraform apply` は必ずユーザーの確認を取ること
- `terraform init` は未初期化の場合のみ、ユーザーの確認を取って実行すること
- importブロックを使用し、`terraform import` コマンドは使用しないこと
- リソース名はスネークケースで統一すること
 
## 補足
 
- 関連するリソースについて
  - 例:S3バケットなら、バージョニング設定など

プロフィール

CCoE部AWS推進チーム

CCoE部AWS推進チーム
CCoE部AWS推進チームではAWSの各サービスを最大限活用するために日々技術検証や教育プログラムの検討を行っております。その活動のなかで得られた有益な情報を外部へ発信していきます。

この記事は役に立ちましたか?

はい いいえ

page top