Open8

Pulumiのベストプラクティス

ユータユータ

Pulumiのコードをどこに保存するべきか

  1. アプリケーションコードと同じリポジトリに格納する
    1. シンプルだが細かいセキュリティ設定ができない
  2. アプリケーションコードとは別のリポジトリに格納する
    1 . 組織要件や様々なアクセス制御に対応できるが構成が複雑になる
ユータユータ

推奨プラクティスとして以下が大事

  1. Pulumiのコードはバージョン管理を使う。(Gitが望ましい)
  2. Pulumiのコードは、組織の要件に沿った方法でバージョン管理リポジトリに配置する。
  3. Pulumiスタックを活用して、一つのPulumiプログラムで複数のクラウドリソースのインスタンスを作成する。
ユータユータ

Gitブランチの考え方
Pulumi.dev.yamlPulumi.prod.yamlでスタック設定ファイルで環境差分を埋める。

  • mainブランチ
  • developブランチ
  • featureブランチ

feautreブランチでコード修正を行ない、Pulumi.dev.yamlでdevelopスタックを選択し、検証環境に先にpulumi upで動作確認。
Pulumi Cloud上ならdevelopブランチへのマージで検証環境の動作確認完了後、mainブランチにマージして本番反映する。

ユータユータ

Pulumiの最適なディレクトリ構造

考慮事項

  • アプリケーションが単一か複数か
  • 認証情報をどう扱うか
  • リソース間の関係の参照についてどうするか
  • リソースの更新頻度が同じものは同じプロジェクトに組み込む
ユータユータ

https://www.pulumi.com/blog/iac-recommended-practices-structuring-pulumi-projects/
この記事だとアプリケーションコードとPulumiのコードを同じリポジトリ上に置いていたが、プロダクト成長の足かせにならないようにインフラコードとアプリケーションコードを別のリポジトリに分けたっぽい。
EKS関係のコードはインフラとは明確に分けている。
VPC IDの参照が必要になるのでスタック間参照をする必要があると書いてある。

ユータユータ
// 他の場所で使用するために、いくつかの値をエクスポートする
export const vpcId = eksVpc.vpcId;
export const privSubnetIds = eksVpc.privateSubnetIds;
export const pubSubnetIds = eksVpc.publicSubnetIds;

VPCスタックで作成したVPC関連リソースの情報をEKSスタックに渡すためにエクスポートしている様子