■ はじめに
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