連載 [第3回] :
今日からはじめる Pulumiでカンタン インフラ運用・管理「Pulumi Stack」とは ー Pulumiによるマルチステージ環境の構築方法
2023年4月20日(木)
第3回となる今回は、Pulumi Stackの概要について解説し、複数Stackのデプロイについてハンズオンを実施していきます。
クリーンアップ作業
今回のハンズオンで構築した環境のクリーンアップ手順となります。複数のStackをデプロイしているため、リソースの削除もStackを切り替えて行います。
- dev用StackでVPCを作成しているため、VPCを利用しているprod用StackのリソースからでないとVPCを削除できないため、先にprod用Stackのリソースから削除します。prod用Stackに切り替えます。
$ pulumi stack select prod $ pulumi stack ls NAME LAST UPDATE RESOURCE COUNT URL dev 6 minutes ago 6 https://app.pulumi.com/***/pulumi-stack/dev prod* 4 minutes ago 8 https://app.pulumi.com/***/pulumi-stack/prod
- Pulumiで作成したリソースを削除する際は「pulumi destroy」コマンドを実行します。「pulumi up」と同じく「details」の選択で削除するリソースの詳細が確認できます。問題がなければ「yes」を選択します。
$ pulumi destroy Previewing destroy (prod) View Live: https://app.pulumi.com/***/pulumi-stack/prod/previews/6cde348b-595c-4756-9de6-*** Type Name Plan - pulumi:pulumi:Stack pulumi-stack-prod delete - ├─ aws:ec2:Instance prod-my-instance delete - └─ aws:ec2:Subnet prod-my-subnet delete Resources: - 3 to delete Do you want to perform this destroy? details - aws:ec2/instance:Instance: (delete) [id=i-0b700d8c150e5e938] [urn=urn:pulumi:prod::pulumi-stack::aws:ec2/instance:Instance::prod-my-instance] [provider=urn:pulumi:prod::pulumi-stack::pulumi:providers:aws::default_5_32_0::05b1fe6f-4ea7-4af8-b47d-***] - aws:ec2/subnet:Subnet: (delete) [id=subnet-0cf5b7c6fd6cdfc9f] [urn=urn:pulumi:prod::pulumi-stack::aws:ec2/subnet:Subnet::prod-my-subnet] [provider=urn:pulumi:prod::pulumi-stack::pulumi:providers:aws::default_5_32_0::05b1fe6f-4ea7-4af8-b47d-***]
- 次に、dev用Stackのリソースも削除します。dev用Stackに切り替えます。
$ pulumi stack select dev $ pulumi stack ls NAME LAST UPDATE RESOURCE COUNT URL dev* 6 minutes ago 6 https://app.pulumi.com/***/pulumi-stack/dev prod 3 minutes ago 0 https://app.pulumi.com/***/pulumi-stack/prod
- 同様に「pulumi destroy」コマンドを実行します。
$ pulumi destroy Previewing destroy (dev) View Live: https://app.pulumi.com/***/pulumi-stack/dev/previews/b9a22195-cc68-4639-a4ac-*** Type Name Plan - pulumi:pulumi:Stack pulumi-stack-dev delete - ├─ aws:ec2:Instance dev-my-instance delete - ├─ aws:ec2:Subnet dev-my-subnet delete - └─ aws:ec2:Vpc my-vpc delete Outputs: - vpc_id: "vpc-000f8f3d29d5dc0db" Resources: - 4 to delete Do you want to perform this destroy? details - aws:ec2/instance:Instance: (delete) [id=i-038301e0f4d846fc0] [urn=urn:pulumi:dev::pulumi-stack::aws:ec2/instance:Instance::dev-my-instance] [provider=urn:pulumi:dev::pulumi-stack::pulumi:providers:aws::default_5_32_0::3ff48aaf-c093-4fec-b80a-***] - aws:ec2/subnet:Subnet: (delete) [id=subnet-0aaf0264734052dd9] [urn=urn:pulumi:dev::pulumi-stack::aws:ec2/subnet:Subnet::dev-my-subnet] [provider=urn:pulumi:dev::pulumi-stack::pulumi:providers:aws::default_5_32_0::3ff48aaf-c093-4fec-b80a-***] - aws:ec2/vpc:Vpc: (delete) [id=vpc-000f8f3d29d5dc0db] [urn=urn:pulumi:dev::pulumi-stack::aws:ec2/vpc:Vpc::my-vpc] [provider=urn:pulumi:dev::pulumi-stack::pulumi:providers:aws::default_5_32_0::3ff48aaf-c093-4fec-b80a-***] - pulumi:pulumi:Stack: (delete) [urn=urn:pulumi:dev::pulumi-stack::pulumi:pulumi:Stack::pulumi-stack-dev] --outputs:-- - vpc_id: "vpc-000f8f3d29d5dc0db" Do you want to perform this destroy? yes Destroying (dev) View Live: https://app.pulumi.com/***/pulumi-stack/dev/updates/13 Type Name Status - pulumi:pulumi:Stack pulumi-stack-dev deleted - ├─ aws:ec2:Instance dev-my-instance deleted (30s) - ├─ aws:ec2:Subnet dev-my-subnet deleted (0.76s) - └─ aws:ec2:Vpc my-vpc deleted (1s) Outputs: - vpc_id: "vpc-000f8f3d29d5dc0db" Resources: - 4 deleted Duration: 36s
devおよびprodのStackリソース削除完了後、AWSマネジメントコンソールでも両Stackのリソースが削除されていることが確認できます。 - Stackリソースの削除が完了したことで、AWSに作成した全てのリソースも削除されましたが、Pulumiのリソースとしてまだ残っているStack自体も削除できます。Stack自体を削除すると「pulumi config」などで設定したStack自体の設定やStackのリソース変更履歴、Stackの設定ファイル「Pulumi.<stack名>.yaml」なども削除されるため注意してください。Stack削除コマンド「pulumi stack rm」実行後は、確認としてStack名の入力が求められるので、削除対象のStack名を入力します。
$ pulumi stack select dev $ pulumi stack ls NAME LAST UPDATE RESOURCE COUNT URL dev* 11 minutes ago 0 https://app.pulumi.com/***/pulumi-stack/dev prod 6 minutes ago 0 https://app.pulumi.com/***/pulumi-stack/prod $ pulumi stack rm This will permanently remove the 'dev' stack! Please confirm that this is what you'd like to do by typing `dev`: dev Stack 'dev' has been removed! $ pulumi stack select prod $ pulumi stack ls NAME LAST UPDATE RESOURCE COUNT URL prod* 6 minutes ago 0 https://app.pulumi.com/***/pulumi-stack/prod $ pulumi stack rm This will permanently remove the 'prod' stack! Please confirm that this is what you'd like to do by typing `prod`: prod Stack 'prod' has been removed! $ pulumi stack ls NAME LAST UPDATE RESOURCE COUNT URL
おわりに
今回は、Pulumi Stackの概要について解説し、複数Stackのデプロイについてハンズオンを実施しました。簡単なハンズオンではありますが、1つのProgramで複数のStackに対応したリソースを作成でき、また、Stack間で特定の値だけ差分を出す方法について、少しイメージできたのではないでしょうか。
Stackをうまく使いこなすことでインフラ環境の再現が容易になり、また、環境(dev/prodなど)の分離やアプリケーションの分離も明確になり、オペレーションミスなどの事故も未然に防げるようになります。ぜひ、この機会にPulumi Stackについて理解を深めていただければと思います。
次回以降も、引き続きPulumiの便利な機能について紹介していきますので、お楽しみに!
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- SecretもPulumiで使いこなしたい! PulumiのSecurityを試してみよう
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう
- PulumiでAWSリソースをデプロイしよう
- 既に存在するリソースをPulumiで管理してみよう
- Pulumi Kubernetes Operatorを活用してPulumiのCI/CDを実現しよう
- TerraformからPulumiへの移行
- 「Pulumi Automation API」でPulumi CLIの機能をコード化しよう
- 「Terraform」のコードを自分で書けるようになろう
- kustomizeで復数環境のマニフェストファイルを簡単整理
- マシン・イメージを自動構築し、作業効率を高めるPacker入門