【Conversion】Terraformで作成されたリソースのimportとコード変換
【Conversion】Terraformで作成されたリソースのimportとコード変換
先ほどの手順はTerraformとの共存を想定したケースになりますが、その後Terraformの利用をストップしてPulumiだけでインフラストラクチャを管理したい場合のケースを想定して、Terraform fileのコードを変換するConversionを実施します。
- コード変換するTerraformのディレクトリに移動します。
$ pwd /***/pulumi-migrate $ cd ../terraform-aws-s3 $ pwd /***/terraform-aws-s3 - 「pulumi convert」コマンドでTerraform fileからPulumi Programへのコード変換を行います。「--from」で「terraform」を指定して「--language」には変換先のコード「python」を選択します。コード変換後のファイルは「../converted」ディレクトリに格納するようにします。
コマンドの実行が完了すると、Pulumiのデプロイに必要なファイルがいくつか自動生成されていることが確認できます。$ pulumi convert --from terraform --language python --out ../converted Converting from terraform... Downloading provider: terraform Downloading provider: random Converting to python... Installing dependencies... Creating virtual environment... Finished creating virtual environment Updating pip, setuptools, and wheel in virtual environment... Collecting pip Using cached pip-23.3.1-py3-none-any.whl (2.1 MB) ~~(中略)~~ Finished installing dependencies
また、変換で出力されたpythonコードの中身も確認すると、想定通りの内容でコードが出力されていることが確認できます。$ ls ../converted Pulumi.yaml __main__.py bin include lib pyvenv.cfg requirements.txt$ cat ../converted/__main__.py ~~~ import pulumi import pulumi_aws as aws import pulumi_random as random bucket_suffix = random.RandomString("bucket_suffix", length=8, special=False, upper=False) tf_s3_bucket = aws.s3.BucketV2("tf_s3_bucket", bucket=bucket_suffix.result.apply(lambda result: f"tf-bucket-{result}"), tags={ "name": "terraform-s3-bucket", }) pulumi.export("bucketId", tf_s3_bucket.id)
簡単にはなりますが、Conversionの作業としては以上です。この後、最後の移行ステップとして生成したコード(Bucket)の「Importing」作業が必要になります。Importing作業は、前回で紹介している「import option(リソースID)をProgramに付与してimport」の手順か、または「Pulumiコマンドによるimport」を参照してください。
おわりに
今回は、Terraformを例にCoexistenceとConversionの作業について紹介しましたが、AWS CloudFormationやAzure ARMでも同じような手順となりますので、参考にしていただければと思います。特にConversionのPulumiコマンドによる自動コード変換は、変換元のコード量が多いほど大幅な工数削減が見込めます。ぜひ、積極的に活用してください。次回もお楽しみに!
- この記事のキーワード