初Pulumiです。
Pulumiは状態管理を行っており、ローカルかPulumiが用意したWebバックエンドが利用できます。
しかしそれだけなのでしょうか?terraformはクラウドストレージが使えますし、出来ればPulumiも同じようにしたいと感じます。
調べたところ少し前のPulumi 0.17.9にて、大手クラウドベンダ(GCP,AWS,Azure)のストレージサービスをバックエンドとして使えるようになったようです。ですが、ドキュメントに書かれていないようなのでここで紹介しておきます。
実装の裏ではgo-cloudを使って抽象化しているようです。(Pulumi上のコミット)
宗教上の理由で今回はAzureのblobで試してみます。go-cloudのドキュメントによると、アカウント名、アカウントキーもしくはSASを環境変数から与えて使うようです。
あらかじめAzure上にBlobストレージfukasawahpulumistates
を作成し、Blobストレージ上にコンテナpulumistates
を作っておきます。ストレージキーはXXXXXXXXXXXXXXXXXXXXXX
とすると、以下のように使います。
export AZURE_STORAGE_ACCOUNT=fukasawahpulumistates
pulumi login azblob://pulumistates
# AccessKeyの場合
export AZURE_STORAGE_KEY=XXXXXXXXXXXXXXXXXXXXXX
# SASの場合
export AZURE_STORAGE_SAS_TOKEN='sv=2018-03-28&ss=b&srt=o&sp=rwdlac&se=2020-06-23T22:45:53Z&st=2019-06-23T14:45:53Z&spr=https&sig=XXXXXXXXXXXXXXXXXXXXXXXX'
# 利用(stackをクラウド用に作り直さないといけない)
pulumi stack init dev-azure
pulumi stack select dev-azure
pulumi up
stack init後に、クラウドストレージ上にファイルが作られ、upで変更が入れば使えています。
注意点はpulumi login azblob://xxxx
の時点ではAZURE_STORAGE_ACCOUNT
しか意識していません。「Logged into ...」と出てもただローカル設定でストレージアカウント名を記録しているだけのようです。stack init等やupで失敗する場合、アクセスキーかSASが正しいかどうかを確認してください。
既知のバグで、upの完了後にPermalinkをログへ出力する際のURLをうまく生成できず以下のようなエラーになるバグがあります。クラウド上のファイルの更新は終わった後なので影響はそんなにないです。
error: Could not get signed url for stack location: blob (code=Unknown): to use SignedURL, you must call OpenBucket with a non-nil Options.Credential
既にIssue(pulumi/pulumi#2791)が上がっており、この対応を待つ必要があります。修正前にCIに組み込む場合、異常終了としないような仕組みが必要そうです。