【Pulumi】Pulumi ~ 基本編 / Config ~

■ はじめに

 Stack (dev/nonprod/prod etc) ごとで、
設定値を切り替える必要がでてきた。
まずは、手始めとして、PulumiのConfigについて学ぶ。

目次

【1】Config保存先
【2】CLIでの操作
 1)設定例:「dev」「nonprod」への設定
【3】プログラムでの操作
 1)API
 2)サンプル
 3)AWS用のAPI

【1】Config保存先

* Pulumi.<stack-name>.yaml (e.g. Pulumi.dev.yaml) で保存

構文

# 「config:」配下で管理。
config:
  <Project Name>:<Key>: <Value>

サンプル

encryptionsalt: xxxxx
config:
  quickstart:key_value: HelloWorld

【2】CLIでの操作

https://www.pulumi.com/docs/reference/cli/pulumi_config/

* 以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2021/10/25/215508

1)設定例:「dev」「nonprod」への設定

# Stackの選択(dev 選択)
pulumi stack select dev
# Stack 一覧表示
pulumi stack ls
# 設定
pulumi config set key_value HelloWorld

# Stackの選択(nonprod 選択)
pulumi stack select nonprod
# Stack 一覧表示
pulumi stack ls
# 設定
pulumi config set key_value HelloWorld-nonprod

【3】プログラムでの操作

1)API

https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/pulumi/#Config

* 大きく分けて、以下がある。
~~~~~
[1] get (getXxx系)
[2] require (requireXxx系)
~~~~~

[1] get
https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/pulumi/#Config-get

get loads an optional configuration value by its key, or undefined if it doesn’t exist.
 => 値がなかった場合、「undefined」を返却

require
https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/pulumi/#Config-require

require loads a configuration value by its given key. If it doesn’t exist, an error is thrown.
 => 値がなかった場合、例外が発生(「require」だから必須)
~[例外]~~~~
error: Missing required configuration variable 'quickstart:isMinikube'
    please set a value using the command `pulumi config set quickstart:isMinikube <value>`
~~~~~~~~~

サンプル

index.ts

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

const env = pulumi.getStack();
const projectName = pulumi.getProject();
const config = new pulumi.Config();

const isMinikube = config.requireBoolean("isMinikube");
const key_value = config.require("key_value");
let num = config.getNumber("num") || 42;

console.log(`env = ${env}`);
console.log(`projectName = ${projectName}`);
console.log(`isMinikube = ${isMinikube}`);
console.log(`key_value = ${key_value}`);
console.log(`num = ${num}`);

Pulumi.dev.yaml

config:
  quickstart:isMinikube: "true"
  quickstart:key_value: HelloWorld
  quickstart:num: 12

Pulumi.nonprod.yaml

config:
  quickstart:isMinikube: "false"
  quickstart:key_value: HelloWorld-nonprod

出力例

$ pulumi stack select dev
$ pulumi preview
...
Diagnostics:
  pulumi:pulumi:Stack (quickstart-dev):
    env = dev
    projectName = quickstart
    isMinikube = true
    key_value = HelloWorld
    num = 12

$ pulumi stack select nonprod
$ pulumi preview
...
Diagnostics:
  pulumi:pulumi:Stack (quickstart-nonprod):
    env = nonprod
    projectName = quickstart
    isMinikube = false
    key_value = HelloWorld-nonprod
    num = 42

3)AWS用のAPI

* リージョン取得するには、「aws.config.requireRegion()」

https://www.pulumi.com/blog/program-the-cloud-with-12-pulumi-pearls/

Pulumi.dev.yaml

config:
  aws:region: us-west-2

index.ts

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

export const region = aws.config.requireRegion()
console.log(`region = ${region}`) // us-west-2

参考文献

https://tech.guitarrapc.com/entry/2019/12/10/000000

関連記事

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 ~ 基本編 / 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