LoginSignup
0
0

More than 1 year has passed since last update.

Pulumi でARNを参照したい

Last updated at Posted at 2021-10-09

Pulumiはプログラマーにとって慣れ親しんだ言語でインフラを構成できるモダンなIaCツールです。

小規模なプロジェクトで1人で何役もやっている人にとって、生産性が高いかもしれません。

イケてると思ったポイントや、ググってもサクッと分からなかった様な話を記事にしていきます。

前提条件

  • Pulumi及びAWSの設定が完了している

ARNを参照するコード

あるリソースのプロパティを元に、別のリソースのプロパティを設定したいケースが度々あります。
うまく動いたケース、うまく動かなかったケース、どのように修正したかを紹介します。

うまく動いたケース例



const policy = new aws.iam.Policy(`PolicyName`, {
  description: "{省略}",
  policy: `{省略}`,
});

const policyAttachment = new aws.iam.RolePolicyAttachment(
  `SomeRolePolicyAttachmentName`,
  {
    role: lambdaRole.name,
    policyArn: policy.arn,  // <----------上で作成したPolicyのARNを直接指定している
  }
);

この場合、policyArnプロパティに対して直接arnを指定しています。

このとき、policyArn の型は pulumi.Input<string> で、policy.arnの型は pulumi.Output<string>です。

うまく動かなかったケース例


const queue = new aws.sqs.Queue(`SomeQueueName`, {
  fifoQueue: true,
  redrivePolicy: JSON.stringify({
      deadLetterTargetArn: deadLetterQueue.arn, // <----------オブジェクトの値として指定している
      maxReceiveCount: 10,
    })
});

これだと、deadLetterQueue.arn をうまく解決してくれません。
このとき、deadLetterTargetArnは pulumi.Input<string> 型ではありません。

以下が修正


const queue = new aws.sqs.Queue(`QueueExample`, {
  fifoQueue: true,
  redrivePolicy: deadLetterQueue.arn.apply((arn) =>
    JSON.stringify({
      deadLetterTargetArn: arn,
      maxReceiveCount: 4,
    })
  ),
});

apply関数を適用することで、値が解決され、このケースでもうまく動くようになります。

pulumi.Output<T> 型 に関しては、インフラのプロビジョンが完了するまでその値が決定しない為、Promiseと似た非同期処理の形を取るようです。Apply関数を利用することで値が解決され、実際の値を取得可能です。

ドキュメントを見た限りでは、リソースのプロパティで pulumi.Input<T> の型に対しては、pulumi.Output<T> を直接指定しても、Pulumiが内部的に解決してくれるようです。

参考

0
0
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
0
0