Closed17

pulumiについてメモ

koheiyamayamakoheiyamayama

まず、pulumiには

  • OSSとして公開されているIaCソフトウェア
  • SaaSとしてpulumiをmanageするソフトウェア

の2つが存在する。

ひとまず、OSSの方を見ていく。

koheiyamayamakoheiyamayama

https://www.pulumi.com/docs/intro/concepts/

引用元

↑の図が紹介されている。
StackはおそらくTerraformでいうところのtfstateみたいなやつ。だと思ったけど、違いそう。
Programはリソースがあるべき姿を記述するためのもの。
ProjectはProgramとProgramを実行するためのMetadataを含んでいる。
ResourceはおそらくProgram内の一要素に過ぎなそう。ec2オブジェクトとかそういうやつ?

基本的に動作はTerraformっぽい。
プログラムを書いて理想状態のStackを記述し、現在のStackとの比較があれば、実際のインフラを更新する。

リソースの命名にユニークとなるようにsuffixが付与されるらしいのが気になる。既存のリソースをインポートした時に便利設定が外れてしまいそう。

koheiyamayamakoheiyamayama

Resources

https://www.pulumi.com/docs/intro/concepts/resources/

ResourceはEC2, S3, k8s clusterなどのインフラを構成するための基礎的なユニットのことである。
Resourceは2種類ある。

  • CustomResource
    • AWSなどのresource providerによって提供されるResource
  • ComponentResource
    • コンポーネントリソースとは、他のリソースを論理的にグループ化し、その実装の詳細をカプセル化した、より大きな、より高いレベルの抽象化を作成するものである。(deepl)
koheiyamayamakoheiyamayama

Secrets

const cfg = new pulumi.Config()
const param = new aws.ssm.Parameter("a-secret-param", {
    type: "SecureString",
    value: cfg.requireSecret("my-secret-value"),
});

stateにシークレット値がハードコーディングされないように↑のように書ける。
valueキーの値を環境変数で設定するようにすれば、git管理しやすそう。
.envファイルだけ別途管理する必要があるけど。

koheiyamayamakoheiyamayama

pulumiのimport、めちゃくちゃ便利そう。
jsonを使って一括インポート & インポート後は自動でコードを生成してくれるらしく、めちゃくちゃ良さそう。

koheiyamayamakoheiyamayama

pulumiでどういうディレクトリ構成で進めるか
https://www.pulumi.com/docs/guides/organizing-projects-stacks/#organizing-your-project-code

koheiyamayamakoheiyamayama

terraformはworking directory直下のtfファイルは全て実行するみたいな感じだったけど、pulumiはentry pointが決まっていて、それのみを実行するスタイルっぽい。

koheiyamayamakoheiyamayama

複数stack(環境)に対してソースコードは1つという構成。
getStack関数で選択中のstackを取得できて、それを使ってソースコード中で分岐するのが良さそう。

koheiyamayamakoheiyamayama

index.ts内で

if "prod" == getStack() {
  updateProdStack()
} else if "stg" == getStack() {
  updateStgStack()
} else {
  throw new Expection()
}

みたいなことをして、それぞれのstackに適用するprogramを書いていくのが良さそう。

koheiyamayamakoheiyamayama

この感じだとStackReferenceをグローバルステートとして扱うのが良いのか、、っていう気持ちになる。

koheiyamayamakoheiyamayama

ただそれをするには、StackOutputにデータを登録するための術がないと厳しい。

koheiyamayamakoheiyamayama

疑問点

  • どうしてaws.ec2.SecurityGroupのプロパティは全てreadonlyなのか?
このスクラップは2023/02/14にクローズされました