tech.guitarrapc.cóm

Technical updates

Pulumi で他のstate 参照を行う

この記事は、Pulumi dotnet Advent Calendar 2019 の17日目です。

qiita.com

Pulumi のTIPS を見ていきましょう。

Terraform の Remote State に相当する処理を見てみます。 Pulumiで 他のStack で管理しているリソースは参照できるのでしょうか?

目次

TL;DR

  • 現状 Stack の参照は C# 実装では提供されていない
  • Provider を分けて持つことはできるので、Provider でリソースを参照して使うことで回避できる
  • TypeScript などGAされた言語では Stack Reference として提供されている

Stack Reference

TypeScript で次のように書いて、他の Stack の Output を参照できる。

import * as pulumi from "@pulumi/pulumi";
const other = new pulumi.StackReference("acmecorp/infra/other");
const otherOutput = other.getOutput("x")

これは dotnet (C#) ではまだサポートされいない。

そのため、もしほかの Stack を参照したい場合、Stack を直接みるのではなく、そのStack の Providerを別途用意して参照するしかない。

using Pulumi;
using Pulumi.Aws;

class Program
{
   async Task Main() =>
       Deployment.Run(() =>
       {
           // Create an AWS provider for the us-east-1 region.
           var useast1 = new Provider("useast1", new ProviderArgs { Region = "us-east-1" });

           // Create an ACM certificate in us-east-1.
           var cert = new Aws.Acm.Certificate("cert", new Aws.Acm.CertifiateArgs
           {
               DomainName = "foo.com",
               ValidationMethod = "EMAIL",
           }, new ResourceArgs { Provider = useast1 });
       });
}

イメージ的には、terraform の provider による管理に近い。

1つの terraform で複数 AWS Account をまとめて構築・管理する - エムスリーテックブログ

REF

Inter-Stack Dependencies | Organizing Projects and Stacks | Pulumi