6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pulumiの状態管理にクラウドストレージバックエンドを使う

Last updated at Posted at 2019-06-23

初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に組み込む場合、異常終了としないような仕組みが必要そうです。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?