kakakakakku blog

Weekly Tech Blog: Keep Learning!

Pulumi で Filesystem Backend から Google Cloud Storage (GCS) Backend にステートを移行する

Pulumi で Filesystem Backend を使ってステートをローカル環境で管理している構成から Google Cloud Storage (GCS) Backend でステートを管理する構成に移行する流れを試してみた❗️基本的な流れは公式ドキュメントの Migrating Between State Backends というセクションにまとまっていて参考になる.

www.pulumi.com

準備

まずは pulumi new gcp-typescript --dir sandbox-pulumi-state-migration コマンドを実行して Pulumi プロジェクトを作る.そして index.ts を以下のように修正しておく.Cloud Storage バケット1つと Pub/Sub トピック1つでシンプル👌

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

new gcp.storage.Bucket("sandbox-pulumi-state-migration", {
    name: "sandbox-pulumi-state-migration",
    location: "asia-northeast1",
});

new gcp.pubsub.Topic("sandbox-pulumi-state-migration", {
    name: "sandbox-pulumi-state-migration",
});

Filesystem Backend でログイン

次に pulumi login コマンドを実行して Filesystem Backend でログインする.

$ pulumi login file://./

pulumi up コマンドを実行してデプロイすると .pulumi ディレクトリの下にステート .pulumi/stacks/sandbox-pulumi-state-migration/dev.json ができていた.

$ tree .pulumi/stacks/sandbox-pulumi-state-migration
.pulumi/stacks/sandbox-pulumi-state-migration
├── dev.json
├── dev.json.attrs
├── dev.json.bak
└── dev.json.bak.attrs

1 directory, 4 files

www.pulumi.com

Google Cloud Storage (GCS)

今度は Google Cloud Storage (GCS) Backend として使う Cloud Storage バケットを gcloud storage buckets create コマンドでデプロイする.バージョニング設定も有効化しておく.gcloud コマンドの認証まわりは割愛する.

$ gcloud storage buckets create gs://kakakakakku-sandbox-pulumi-states \
  --location=asia-northeast1 \
  --project=kakakakakku

$ gcloud storage buckets update gs://kakakakakku-sandbox-pulumi-states --versioning

ステートのエクスポート

Google Cloud Storage (GCS) Backend にステートをインポートするために pulumi stack export コマンドでステートをエクスポートする.

$ pulumi stack export --show-secrets --stack dev --file dev-state.json

www.pulumi.com

Google Cloud Storage (GCS) Backend でログイン

ここで pulumi login コマンドを実行して Google Cloud Storage (GCS) Backend でログインする.

$ pulumi login gs://kakakakakku-sandbox-pulumi-states

ちなみにログインをした時点で Cloud Storage バケットに .pulumi/meta.yaml が作られていた✅️

ステートのインポート

最後に pulumi stack init コマンドでスタックをセットアップして,pulumi stack import コマンドでステートをインポートすれば完了❗️

$ pulumi stack init dev
Created stack 'dev'

$ pulumi stack import --stack dev --file dev-state.json
Import complete.

www.pulumi.com

差分確認

最後に pulumi preview コマンドを実行して「差分なし」になっていることを確認できた \( 'ω')/

$ pulumi preview
Previewing update (dev):
     Type                 Name                                Plan     
     pulumi:pulumi:Stack  sandbox-pulumi-state-migration-dev           

Resources:
    3 unchanged

お掃除

不要になったステートのエクスポートと Filesystem Backend.pulumi ディレクトリを削除しておく🗑️

$ rm dev-state.json
$ rm -rf .pulumi

まとめ

あくまで検証用のシンプルな Pulumi プロジェクトだけど,Pulumi で Filesystem Backend から Google Cloud Storage (GCS) Backend にステートを移行する流れを確認できて良かった❗️

関連記事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com