連載 [第9回] :
今日からはじめる Pulumiでカンタン インフラ運用・管理TerraformからPulumiへの移行
2023年11月28日(火)

第9回となる今回は、既にTerraformでAWS環境に作成されているリソースをPulumiへ移行するケースを想定して、CoexistenceとConversionのハンズオンを実践していきます
【Conversion】Terraformで作成されたリソースのimportとコード変換
先ほどの手順はTerraformとの共存を想定したケースになりますが、その後Terraformの利用をストップしてPulumiだけでインフラストラクチャを管理したい場合のケースを想定して、Terraform fileのコードを変換するConversionを実施します。
- コード変換するTerraformのディレクトリに移動します。
1
$ pwd
2
/***/pulumi-migrate
3
4
$ cd ../terraform-aws-s3
5
6
$ pwd
7
/***/terraform-aws-s3
- 「pulumi convert」コマンドでTerraform fileからPulumi Programへのコード変換を行います。「--from」で「terraform」を指定して「--language」には変換先のコード「python」を選択します。コード変換後のファイルは「../converted」ディレクトリに格納するようにします。
コマンドの実行が完了すると、Pulumiのデプロイに必要なファイルがいくつか自動生成されていることが確認できます。
01
$ pulumi convert --from terraform --language python --out ../converted
02
Converting from terraform...
03
Downloading provider: terraform
04
Downloading provider: random
05
Converting to python...
06
Installing dependencies...
07
08
Creating virtual environment...
09
Finished creating virtual environment
10
Updating pip, setuptools, and wheel in virtual environment...
11
Collecting pip
12
Using cached pip-23.3.1-py3-none-any.whl (2.1 MB)
13
~~(中略)~~
14
Finished installing dependencies
また、変換で出力されたpythonコードの中身も確認すると、想定通りの内容でコードが出力されていることが確認できます。1
$ ls ../converted
2
Pulumi.yaml __main__.py bin include lib pyvenv.cfg requirements.txt
01
$ cat ../converted/__main__.py
02
~~~
03
import pulumi
04
import pulumi_aws as aws
05
import pulumi_random as random
06
07
bucket_suffix = random.RandomString("bucket_suffix",
08
length=8,
09
special=False,
10
upper=False)
11
tf_s3_bucket = aws.s3.BucketV2("tf_s3_bucket",
12
bucket=bucket_suffix.result.apply(lambda result: f"tf-bucket-{result}"),
13
tags={
14
"name": "terraform-s3-bucket",
15
})
16
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コマンドによる自動コード変換は、変換元のコード量が多いほど大幅な工数削減が見込めます。ぜひ、積極的に活用してください。次回もお楽しみに!
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- Oracle Cloud Hangout Cafe Season7 #2「IaC のベストプラクティス」(2023年7月5日開催)
- Iacツール「Terraform」の基本的な使い方
- 既に存在するリソースをPulumiで管理してみよう
- PulumiでAWSリソースをデプロイしよう
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう
- 「Pulumi Automation API」でPulumi CLIの機能をコード化しよう
- Pulumi Kubernetes Operatorを活用してPulumiのCI/CDを実現しよう
- SecretもPulumiで使いこなしたい! PulumiのSecurityを試してみよう
- Infrastructure-as-Codeアプローチと「Pulumi」の概要
- インフラの構成管理を自動化するTerraform入門