Closed6
Pulumi でインポート作業メモ
Pulumi 初見からインポートに挑戦
Create a project
S3 Backend
$ pulumi login s3://bucket-name-here
Create a project that named import
$ pulumi new aws-typescript --force
This command will walk you through creating a new Pulumi project.
Enter a value or leave blank to accept the (default), and press <ENTER>.
Press ^C at any time to quit.
project name (import):
project description (A minimal AWS TypeScript Pulumi program):
Created project 'import'
stack name (dev):
Created stack 'dev'
Enter your passphrase to protect config/secrets:
Re-enter your passphrase to confirm:
aws:region: The AWS region to deploy into (us-east-1): us-west-2
Saved config
Import
pulumi import
Packages / AWS Classic
インポートの手段は2つ
-
pulumi import
コマンド- 既存リソースを Pulumi stack に追加
- コードを出力
- CLI でインポートしたリソースはうっかり削除されないようにプロテクトされている
- コードの中に
import
を書く- コードを先に書いて、インポートするリソースを指定する感じ
- 即時に Pulumi stack へ追加されない、
pulumi up
で追加
インポートするために必要な情報は2つ
- Type Token
- API ドキュメントに書いてある
- AWS リソースの ID と名前
Bulk Import
pulumi import
コマンドで複数リソースをインポートする。
JSON を用意する。
my-resources.json
{
"resources": [
{
"type": "aws:ec2/vpc:Vpc",
"name": "application-vpc",
"id": "vpc-0ad77710973388316"
},
{
"type": "aws:ec2/subnet:Subnet",
"name": "public-1",
"id": "subnet-0fb5fdff92b9e5a3b"
},
{
"type": "aws:ec2/subnet:Subnet",
"name": "private-1",
"id": "subnet-0a39d25dd9f7b7808"
}
]
}
-f
オプションを付けてコマンドを実行する。
$ pulumi import --file ./my-resources.json
インポート失敗した
JSON にリソース記述して実行。記述ミスったらちゃんとコマンドも失敗した。
中途半端にインポートされることはなさそう。
$ pulumi import --file ./import_vpc.json
Enter your passphrase to unlock config/secrets
(set PULUMI_CONFIG_PASSPHRASE or PULUMI_CONFIG_PASSPHRASE_FILE to remember):
Enter your passphrase to unlock config/secrets
Previewing import (dev):
Downloading plugin: 250.91 MiB / 250.91 MiB [======================] 100.00% 25s
[resource plugin aws-6.36.0] installing
Type Name Plan Info
+ pulumi:pulumi:Stack import-dev create 1 error
= ├─ aws:ec2:Subnet sandbox-subnet-public1-us-west-2a import 5 warnings
= ├─ aws:ec2:Subnet sandbox-subnet-public2-us-west-2b import 5 warnings
= ├─ aws:ec2:Subnet sandbox-subnet-private1-us-west-2a import 1 error
= ├─ aws:ec2:Subnet sandbox-subnet-public3-us-west-2c import 5 warnings
= ├─ aws:ec2:Subnet sandbox-subnet-private4-us-west-2d import 5 warnings
= ├─ aws:ec2:Vpc sandbox-vpc import 2 warnings
= ├─ aws:ec2:Subnet sandbox-subnet-private2-us-west-2b import 5 warnings
= ├─ aws:ec2:Subnet sandbox-subnet-public4-us-west-2d import 5 warnings
= └─ aws:ec2:Subnet sandbox-subnet-private3-us-west-2c import 5 warnings
完璧ではない
サブネットをインポートしようとすると Warning が出る。
aws:ec2:Subnet (sandbox-subnet-public4-us-west-2d):
warning: Type checking failed. If any of these are incorrect, please let us know by creating anissue at https://github.com/pului/pulumi-terraform-bridge/issues.
warning: urn:pulumi:dev::import::aws:ec2/subnet:Subnet::sandbox-subnet-public4-us-west-2d verification warning: expected string type, got [] type: Examine values at tags.__defaults
warning: One or more imported inputs failed to validate. This is almost certainly a bug in the `aws` provider. The import will still proceed, but you will need to edit the generated code after copying it into your program.
warning: aws:ec2/subnet:Subnet resource 'sandbox-subnet-public4-us-west-2d' has a problem: Conflicting configuration arguments: "availability_zone": conflicts with availability_zone_id. Examine values at 'sandbox-subnet-public4-us-west-2d.availabilityZone'.
warning: aws:ec2/subnet:Subnet resource 'sandbox-subnet-public4-us-west-2d' has a problem: Conflicting configuration arguments: "availability_zone_id": conflicts with availability_zone. Examine values at 'sandbox-subnet-public4-us-west-2d.availabilityZoneId'.
インポートした後、pulumi preview
すると error になる。
availabilityZone
と availabilityZoneId
の何れかを使えってことらしいけど、そうならインポート時にそうしてほしかった。
$ pulumi preview
Enter your passphrase to unlock config/secrets
(set PULUMI_CONFIG_PASSPHRASE or PULUMI_CONFIG_PASSPHRASE_FILE to remember):
Enter your passphrase to unlock config/secrets
Previewing update (dev):
Type Name Plan Info
pulumi:pulumi:Stack import-dev
└─ aws:ec2:Subnet sandbox-subnet-public2-us-west-2b 2 errors
Diagnostics:
aws:ec2:Subnet (sandbox-subnet-public2-us-west-2b):
error: aws:ec2/subnet:Subnet resource 'sandbox-subnet-public2-us-west-2b' has a problem: Conflicting configuration arguments: "availability_zone_id": conflicts with availability_zone. Examine values at 'sandbox-subnet-public2-us-west-2b.availabilityZoneId'.
error: aws:ec2/subnet:Subnet resource 'sandbox-subnet-public2-us-west-2b' has a problem: Conflicting configuration arguments: "availability_zone": conflicts with availability_zone_id. Examine values at 'sandbox-subnet-public2-us-west-2b.availabilityZone'.
Output file を指定してインポート
pulumi import
は標準出力にコードを出す。-o
または --out
でファイルに保存できるのでこっちが便利。
$ pulumi import --file ./import_vpc.json --out vpc.ts
そのファイルを読み込むよう index.ts
に1行追記してあげれば OK。
index.ts
import "./vpc";
このスクラップは2024/05/17にクローズされました