連載 [第8回] :
今日からはじめる Pulumiでカンタン インフラ運用・管理既に存在するリソースをPulumiで管理してみよう
2023年10月19日(木)
第8回となる今回は、既にクラウド環境にデプロイされているリソースをPulumiで管理(import)する方法について、ハンズオンで実践していきます。
Programにimport option(リソースID)を
付与した場合のPulumi up
次に、import option(リソースID)を付与した場合のPulumi upの挙動を確認していきます。
- APIリファレンスによると、S3 Bucketの場合「bucket-name」がリソースIDとなるため、以下のように「s3.Bucket functionの引数」に「opts=ResourceOptions(import_='my-bucket-pulumi')」を追記します。「import_」に続く値がS3 BucketのリソースID(bucket-name)になります。既存リソースのimportに利用するpythonモジュール「ResourceOptions」のimportも忘れずに記載します。
import pulumi from pulumi_aws import s3 from pulumi import ResourceOptions bucket = s3.Bucket('my-bucket-pulumi', opts=ResourceOptions(import_='my-bucket-pulumi')) pulumi.export('bucket_name', bucket.id)
【Pulumi Program (__main__.py)】 - この状態で一度pulumi upを実行すると、先ほどのケースとは異なりbucketのplan内容が「create」ではなく「import」になっていることが分かります。これはS3 Bucketについて実際にリソースを作成(create)せずに、指定したIDのリソース情報をstateに追加するplan内容となります。
$ pulumi up Previewing update (***/dev) View in Browser (Ctrl+O): https://app.pulumi.com/***/pulumi-import/dev/previews/*** Type Name Plan + pulumi:pulumi:Stack pulumi-import-dev create = └─ aws:s3:Bucket my-bucket-pulumi import Outputs: bucket_name: "my-bucket-pulumi" Resources: + 1 to create = 1 to import 2 changes Do you want to perform this update? yes Updating (***/dev) View in Browser (Ctrl+O): https://app.pulumi.com/***/pulumi-import/dev/updates/4 Type Name Status + pulumi:pulumi:Stack pulumi-import-dev created (2s) = └─ aws:s3:Bucket my-bucket-pulumi imported (0.72s) Outputs: bucket_name: "my-bucket-pulumi" Resources: + 1 created = 1 imported 2 changes Duration: 6s
- importが無事完了すると、AWSマネジメントコンソールでは、先ほどの「リソースIDを付与しない場合のPulumi up」のケースのように新たにリソースが作成されず、かつ以下のようにstateにリソースの情報が追加されていることが確認できます。
$ pulumi stack export { "version": 3, "deployment": { "manifest": { "time": "2023-09-28T17:14:41.428624+09:00", "magic": "1fce246d436c6e46d168db13ed1014131c96be0ccf8401639052718fba57ac37", "version": "v3.72.2" }, "secrets_providers": { "type": "service", "state": { "url": "https://api.pulumi.com", "owner": "***", "project": "pulumi-import", "stack": "dev" } }, "resources": [ { "urn": "urn:pulumi:dev::pulumi-import::pulumi:pulumi:Stack::pulumi-import-dev", "custom": false, "type": "pulumi:pulumi:Stack", "outputs": { "bucket_name": "my-bucket-pulumi" }, "created": "2023-09-28T08:14:39.351901Z", "modified": "2023-09-28T08:14:39.351901Z" }, { "urn": "urn:pulumi:dev::pulumi-import::pulumi:providers:aws::default_6_2_1", "custom": true, "id": "b4c8a4e5-e5ce-4b35-88ae-fb4a3ae43b83", "type": "pulumi:providers:aws", "inputs": { "region": "ap-northeast-1", "skipCredentialsValidation": "false", "skipMetadataApiCheck": "true", "skipRegionValidation": "true", "version": "6.2.1" }, "outputs": { "region": "ap-northeast-1", "skipCredentialsValidation": "false", "skipMetadataApiCheck": "true", "skipRegionValidation": "true", "version": "6.2.1" }, "created": "2023-09-28T08:14:40.485069Z", "modified": "2023-09-28T08:14:40.485069Z" }, { "urn": "urn:pulumi:dev::pulumi-import::aws:s3/bucket:Bucket::my-bucket-pulumi", "custom": true, "id": "my-bucket-pulumi", "type": "aws:s3/bucket:Bucket", "inputs": { "__defaults": [ "acl", "bucket", "forceDestroy" ], "acl": "private", "bucket": "my-bucket-pulumi", "forceDestroy": false }, "outputs": { "accelerationStatus": "", "arn": "arn:aws:s3:::my-bucket-pulumi", "bucket": "my-bucket-pulumi", "bucketDomainName": "my-bucket-pulumi.s3.amazonaws.com", "bucketRegionalDomainName": "my-bucket-pulumi.s3.ap-northeast-1.amazonaws.com", "corsRules": [], "grants": [], "hostedZoneId": "Z2M4EHUR26P7ZW", "id": "my-bucket-pulumi", "lifecycleRules": [], "loggings": [], "objectLockConfiguration": null, "region": "ap-northeast-1", "replicationConfiguration": null, "requestPayer": "BucketOwner", "serverSideEncryptionConfiguration": { "rule": { "applyServerSideEncryptionByDefault": { "kmsMasterKeyId": "", "sseAlgorithm": "AES256" }, "bucketKeyEnabled": true } }, "versioning": { "enabled": false, "mfaDelete": false }, "website": null }, "parent": "urn:pulumi:dev::pulumi-import::pulumi:pulumi:Stack::pulumi-import-dev", "provider": "urn:pulumi:dev::pulumi-import::pulumi:providers:aws::default_6_2_1::b4c8a4e5-e5ce-4b35-88ae-fb4a3ae43b83", "additionalSecretOutputs": [ "tagsAll" ], "importID": "my-bucket-pulumi", "created": "2023-09-28T08:14:41.418829Z", "modified": "2023-09-28T08:14:41.418829Z" } ] } }
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- PulumiでAWSリソースをデプロイしよう
- 「Pulumi Stack」とは ー Pulumiによるマルチステージ環境の構築方法
- TerraformからPulumiへの移行
- SecretもPulumiで使いこなしたい! PulumiのSecurityを試してみよう
- 「Pulumi Automation API」でPulumi CLIの機能をコード化しよう
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう
- Pulumi Kubernetes Operatorを活用してPulumiのCI/CDを実現しよう
- Oracle Cloud Hangout Cafe Season7 #2「IaC のベストプラクティス」(2023年7月5日開催)
- TFXを使った機械学習パイプラインの構築(実装編その1)
- TFXを使った機械学習パイプラインの構築(デプロイ編)