mcpField
P
pulumi-terraform-to-pulumi

pulumi-terraform-to-pulumi

github.com/pulumiクラウド・DevOps78963 回インストール3 週間前に更新
リポジトリ

pulumi-terraform-to-pulumi について

pulumi-terraform-to-pulumi は、Terraform のプロジェクトと状態を Pulumi へ移行するスキルです。計画、状態変換、Provider の設定、コード調整、プレビュー検証を経て、Pull Request の準備を支援します。

主な機能

  1. 01移行範囲と対象言語の計画
  2. 02terraform-migrate による Terraform 状態の変換
  3. 03必要な Pulumi Provider の導入
  4. 04変換後の状態に合わせたコード調整
  5. 05Pulumi preview による変更検証

活用シーン

  1. 01Terraform 管理のインフラを Pulumi プロジェクトへ移行する場面
  2. 02レビュー前に予期しないリソース変更がないか確認する場面

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pulumi/agent-skills --skill pulumi-terraform-to-pulumi

インストール後、Claude Code で/pulumi-terraform-to-pulumiを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yamluse_cases.yaml

詳細

Terraform から Pulumi への移行

重要な制約 — 作業を始める前にお読みください:

  • pulumi convert は実行しないでください。代わりに terraform-migrate プラグインを使用してください。このプラグインは状態のマッピングを保持します。
  • pulumi package add terraform-module は実行しないでください。これは別のワークフローで使用するものです。
  • /workspace の下に Pulumi プロジェクトを作成しないでください。チェックアウト済みのリポジトリ内に作成してください。
  • 以下の ${terraform_dir} と ${pulumi_dir} は、ユーザーに確認した実際のパスに置き換えてください。

まず、以下の項目をユーザーと確認し、移行の範囲と計画を明確にします。

  • Terraform のソースの場所(${terraform_dir})
  • 移行後の Pulumi プロジェクトの場所(${pulumi_dir})
  • 対象とする Pulumi の言語(TypeScript、Python、YAML など)
  • 移行の目的が Pulumi スタックの状態の設定なのか、ソースコードの変換だけなのか

作業に進む前に、計画をユーザーに確認します。

選択した言語で、${pulumi_dir} に新しい Pulumi プロジェクトを作成します。ソースを空にして、リソースを宣言しないように編集します。Pulumi スタックが存在することを確認します。

先に進む前に、pulumi_up ツールを実行して、初期スタック状態が書き込まれるようにする必要があります。

${terraform_dir} にローカルの .tfstate ファイルが存在しない場合、状態はリモートバックエンド(S3、Pulumi Cloud、Terraform Cloud など)にある可能性があります。続行する前に、状態を取得します。

cd ${terraform_dir} && terraform state pull > terraform.tfstate

これは Pulumi Cloud を含むすべてのバックエンドで動作します。terraform が利用できない場合は、代わりに tofu state pull を試してください。

次のコマンドで、Pulumi の状態変換ドラフトを作成します。

pulumi plugin run terraform-migrate -- stack \
    --from ${terraform_dir} \
    --to ${pulumi_dir} \
    --out /tmp/pulumi-state.json \
    --plugins /tmp/required-providers.json

プラグインは必要に応じて自動インストールされるため、インストールしないでください。

tofu refresh が許可されていないために、terraform-migrate プラグインが失敗することがあります。この手順を省略しないでください。コマンドを実行できるよう、必要な認証情報を提供する Pulumi ESC 環境をユーザーと一緒に探すか、作成してください。ESC 環境を設定できない場合は、移行を自動で進められないことをユーザーに伝えてください。

生成された /tmp/required-providers.json を読み取り、記載されているすべての Pulumi プロバイダーを新しいプロジェクトにインストールします。すでにインストールされているプロバイダーをダウングレードする場合でも、推奨バージョンを使用してください。このファイルには、[{"name":"aws","version":"7.12.0"}] のようなレコードが含まれます。

言語固有のパッケージマネージャーを使って、プロバイダーをプロジェクトの依存関係としてインストールします(プラグインをダウンロードするだけで依存関係に追加しない pulumi plugin install は使わないでください)。

# TypeScript/JavaScript
npm install @pulumi/[email protected]

# Python
pip install pulumi_aws==7.12.0

# Go
go get github.com/pulumi/pulumi-aws/sdk/[email protected]

# C#
dotnet add package Pulumi.Aws --version 7.12.0

変換した状態のドラフト(/tmp/pulumi-state.json)を Pulumi スタックにインポートします。

pulumi stack import --file /tmp/pulumi-state.json

Terraform のソースと変換後の状態の両方に合うようにソースコードを変換します。完全に一致させることを目指してください。使用する Pulumi のリソース型と名前は、状態のドラフト /tmp/pulumi-state.json を参照できます。

pulumi_preview ツールで変更がなく、差分が空またはほぼ空であることが確認されるまで、ソースコードを修正し続けます。プロバイダーの差分やタグの差分は許容される場合があります。

各 Pulumi スタックが必要なプロバイダー認証情報にシームレスにアクセスできるよう、スタックに ESC 環境をリンクすることをユーザーに提案します。

すべて問題がなければ、移行後のソースコードを含むプルリクエストを作成します。

コメント