Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CDK初期設定のプラクティス集 with Projen

Avatar for アキキー アキキー
July 08, 2025
55

AWS CDK初期設定のプラクティス集 with Projen

Avatar for アキキー

アキキー

July 08, 2025
Tweet

More Decks by アキキー

Transcript

  1. 自己紹介 アキキー(池田 晃尚) AWS エンジニア 好きな AWS サービス AWS CDK,

    Amazon Q Developer CLI CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 2
  2. 本 LT の概要 AWS CDK プロジェクトの初期設定にまつわるプラクティスについて Projen を交えながら解説します! ※ プラクティスを実践するために

    Projen は必須ではありません CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 8
  3. pj Projen CDK App React App Python Project Setting files...

    Setting files... Setting files... Projen とは? プロジェクトの構成をコードで定義・管理 できるツール AWS CDK アプリだけではなくさまざまな プロジェクトを構築できる プロジェクトを構成するファイルを抽象化 し、必要な設定だけに集中できるようにな っている package.json, .tsconfig.json など CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 9
  4. Projen のはじめ方 コマンド 1 つで簡単セットアップ! npx projen new awscdk-app-ts .projenrc.ts

    CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 10
  5. CDK プロジェクト初期設定のプラクティス 1. Linter / Formatter を設定する 2. ESLint CDK

    Plugin を導入する(TypeScript のみ) 3. 単体テストを実装する 4. cdk-nag を導入する 5. CI/CD Pipeline を構築する CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 12
  6. 1. Linter / Formatter を設定する Linter...コードの文法やスタイルを静的解析し、バグやコーディング規約違反を検 出するツール パッケージ:ESLint, Biome, Oxlint

    CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 13
  7. Linter の設定 with Projen デフォルトの Linter は ESLint が設定されている .eslintrc.json

    でルールを管理 CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 14
  8. 1. Linter / Formatter を設定する Formatter...コードの見た目を整え、一貫性のあるスタイルを適用するツ ール パッケージ: Prettire、Biome singleQuote:

    true format ダブルクォート シングルクォート CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 15
  9. Formatter の設定 with Projen デフォルトで Formatter が入っていないので、Prettier の設定を追加 .pritterrc.json でルールを管理

    generate .projenrc.ts .prettierrc.json CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 16
  10. 2. ESLint CDK Plugin を導入する CDK コーディングにおけるセオリーをチェックする ESLint プラグイン ex)

    pascal-case-construct-id const bucket = new Bucket(this, "MyAwesomeBucket"); const bucket = new Bucket(this, "my_awesome_bucket"); → リソース名を生成した場合、アルファベットや数字が除去されてしまう Main-MyAwesomeBucket Main-myawesomebucket 参考:ESLint プラグインを使用して CDK のセオリーを適用する CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 17
  11. ESLint CDK Plugin の設定 with Projen STEP1. パッケージを devDeps に追記し、

    npx projen でインストール STEP2. プラグインとルールを ESLint に適用 エイリアスをつけてインストール .projenrc.ts .projenrc.ts eslint-plugin-cdk STEP 1. STEP 2. CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 18
  12. 3. 単体テストを実装する スナップショットテスト Template (旧) Template (新) ⽣成 ⽣成 CDK

    ⽐較 Test Fine-grained assertion テスト バリデーションテスト VPC Public Subnet Private Subnet Private Subnet Public Subnet 検証 Subnet の数は4 個? VPC flow log は有効? Test Stack Fargate メモリは2GB 以上? デプロイ前に検証できる Test 想定した差分であることを検証 想定したパラメータであることを検証 定義したバリデーションをデプロイ前に検証 参考:AWS CDK における単体テストの使い所を学ぶ CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 19
  13. 4. cdk-nag を導入する AWS リソースの定義を静的解析してセキュリティチェックするツール AwsSolutions-S2 S3 バケットでパブリックアクセスが制限およびブロックされていません。 AwsSolutions-VPC7 VPC

    には関連づけられたフローログがありません。 cdk-nag S3 VPC 検証 検証 Error: AwsSolutions-S2 Error: AwsSolutions-S2 CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 20
  14. 5. CI/CD Pipeline を構築する アプリのテスト → ビルド → デプロイの一連の処理を自動化する仕組み AWS

    CDK の場合、AWS アカウントへリソースがデプロイされる AWS Cloud Resources EC2 S3 Aurora デプロイ Stack GitHub Actions スタック 作成・更新 cdk deploy test cdk synth 検証 合成 GitHub CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 21
  15. Projen Pipelines Projen が CI/CD パイプラインを自動生成するツール 特定のプラットフォームに依存しない GitHub Actions cdk

    deploy test cdk synth 検証 合成 GitLab CI/CD パイプライン cdk deploy test cdk synth 検証 合成 ⽣成 ⽣成 pj Projen 参考: Projen Pipelines に入門してみた CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 22
  16. CDK プロジェクト初期設定のプラクティス 1. Linter / Formatter を設定する 2. ESLint CDK

    Plugin を導入する(TypeScript のみ) 3. 単体テストを実装する 4. cdk-nag を導入する 5. CI/CD Pipeline を構築する CDK プロジェクト初期設定のプラクティス集 with Projen Ops-JAWS Meetup35 IaC CDK 支部コラボレーション企画 23