【Pulumi】Pulumi ~ 基本編 / Output<T> ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/03/02/122037

で、Glue workflow と trigger を作る時に、 apply() を使ったのだが、
だんだんと、Pulumi Output や 非同期処理 について、
分かってきたので、整理する意味でメモしておく。

なお、理解する際に以下のサイトが役に立った。感謝。。。

https://qiita.com/346/items/6f972990baf3c708273f

目次

【1】Output<T>
 補足:Promiseについて
【2】関連メソッド
 1)pulumi.apply / pulumi.all
 2)pulumi.interpolation
 3)その他メソッド

【1】Output

https://www.pulumi.com/docs/intro/concepts/inputs-outputs/

より抜粋
~~~~
Outputs are values of type Output<T> , which behave very much like promises.
~~~~

Output は、 Promise と非常に近しい振る舞いをする(Output ≒ Promise)
 => これに尽きる、、、遅延実行的なこと
 => 非同期処理でとりあえず、Output をオブジェクトを渡すイメージ

補足:Promiseについて

* 詳細は、以下の関連記事を参照のこと

非同期処理 ~ async/await, Promise ~
https://dk521123.hatenablog.com/entry/2021/01/16/202822

【2】関連メソッド

1)pulumi.apply / pulumi.all

pulumi.apply

* 非同期処理からの結果が返ってきた際のコールバック関数
 => 非同期処理を待たずに次の処理に移行できる

https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#inputs-and-outputs

より抜粋
~~~~
a callback that receives the raw value, and computes a new output
[意訳] raw値を受け取った際のコールバックで、そして新しいOutputを生成する
~~~~

pulumi.all

* apply() の複数版

https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#all

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

// ★注目
let connectionString = pulumi.all([sqlServer.name, database.name])
    .apply(([server, db]) => `Server=tcp:${server}.database.windows.net;initial catalog=${db}...`);

2)pulumi.interpolation

* 文字列結合(TypeScriptの `${xxx}` の非同期版?)

cf. interpolation = 補間

https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#inputs-and-outputs

より抜粋
~~~~
concatenate string outputs with other strings directly
[意訳] 直接他の文字列との連結をOutputとして返却
cf. concatenate = 連結
~~~~

https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#outputs-and-strings

// interpolate takes a JavaScript "template literal" and expands outputs correctly:
const url2: Output<string> = pulumi.interpolate `http://${hostname}:${port}/`;

3)その他メソッド

pulumi.lifting
https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#inputs-and-outputs

より抜粋
~~~~
directly read properties off an output value
[意訳] Output値からプロパティを直接読み取る
~~~~

参考文献

https://qiita.com/346/items/6f972990baf3c708273f

関連記事

Pulumi ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/10/23/025230
Pulumi ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2022/01/10/155206
Pulumi ~ 入門編 / Hello World in Local/k8s
https://dk521123.hatenablog.com/entry/2022/03/07/233752
Pulumi ~ 入門編 / Hello World in AWS
https://dk521123.hatenablog.com/entry/2022/03/11/184041
Pulumi ~ 基本編 / CLI
https://dk521123.hatenablog.com/entry/2021/10/25/215508
Pulumi ~ 基本編 / Config ~
https://dk521123.hatenablog.com/entry/2022/03/15/224217
Pulumi ~ 基本編 / Logging ~
https://dk521123.hatenablog.com/entry/2022/03/04/111618
Pulumi ~ 基本編 / Component ~
https://dk521123.hatenablog.com/entry/2022/03/05/100153
Pulumi ~ AWS S3 / KMS のデプロイ ~
https://dk521123.hatenablog.com/entry/2022/03/03/095415
Pulumi ~ AWS Glue のデプロイ ~
https://dk521123.hatenablog.com/entry/2022/03/02/122037
Pulumi に関するトラブル
https://dk521123.hatenablog.com/entry/2022/01/11/105319
非同期処理 ~ async/await, Promise ~
https://dk521123.hatenablog.com/entry/2021/01/16/202822
Future パターン
https://dk521123.hatenablog.com/entry/2014/01/18/000804