WIP
- https://www.hashicorp.com/blog/cdk-for-terraform-enabling-python-and-typescript-support
- https://github.com/hashicorp/terraform-provider-aws
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/CHAP_TemplateQuickRef.html
- Examples
cdktf
cli は直接使わずに npm scripts 経由で使用します。cp .env.local.example .env.local
とし、.env.local
で必要な設定をコメントに沿って設定してください。pnpm deploy:manager
,pnpm deploy:env
でデプロイできます。コンパイルはしてくれます。manager
: 管理層になります。いろいろな設定値のインフラを作る上で、一個だけ存在しておけばよいというものenv
: 各環境向けのインフラ郡の単位- TODO: 複数人での開発について
- すべてのリソースについて、
new
したものを変数に格納します - terraform 用のリソース名と、格納先の変数名を同一にします
- why: これにより、変数スコープで名前の衝突回避をします
- why: 考えるべき名前が一つ減ります
- 環境変数は直接参照せずに util/env-vars.ts にまとめます。
- 可能なすべての箇所に
tags
を指定する - 可能なすべての
tags
継承オプションを指定する - 可能なすべての
name
を指定する - アカウント内、もしくは全体で共通のネームスペースを使うリソースの場合、ランダムプロバイダーで生成した
suffix
を使用しますsuffix
はクラスごとに生成し、private
を指定します- SecretsManager に限り
namePrefix
を使用します- why: SecretsManager の削除は即時には行われないため
- class は修飾子が基本必要ないレベルまで分割する
- つまり、
devBuildApiRole = new ...
よりrole = new ...
にできるレベルに分割
- つまり、
fs.readFileSync
よりも terraform のfile()
かfilebase64
を使います。- why:
${}
による変数展開されてしまう可能性がある
- why:
以下のスコープに分類できない TODO は残さないことを目標とする。
- (service): サービス品質・アベイラビリティに関する
- (security): セキュリティに関する
- (logging): ログに関する
- (cost): コストに関する
- (scale): スケーリングに関する
- (perf): パフォーマンスに関する
- (hardcoded): ハードコーディングされている。これらは必要になるまで解消するつもりがないものも含む
- 本当は
.parent
方式はなくしたい (定義順が逆転するかもしれないので)