AWS CDKの自動テスト
IaCの自動テストが必要な理由
自動テストの種類
- 静的解析
- 単体テスト
- 結合テスト
- E2Eテスト
単体テストのカテゴリ
Fine-grained assertions test specific aspects of the generated AWS CloudFormation template, such as "this resource has this property with this value." These tests can detect regressions, and are also useful when you're developing new features using test-driven development (write a test first, then make it pass by writing a correct implementation). Fine-grained assertions are the tests you'll write the most of.
細かいアサーションは、生成されたAWS CloudFormationテンプレートの特定の側面をテストする。"このリソースはこのプロパティでこの値を持っている "といった具合だ。これらのテストはリグレッションを検出することができ、テスト駆動開発(最初にテストを書き、正しい実装を書くことでそれをパスさせる)を使って新機能を開発しているときにも便利です。細かいアサーションは、最も多く書くことになるテストです。
Snapshot tests test the synthesized AWS CloudFormation template against a previously-stored baseline template or "master." Snapshot tests let you refactor freely, since you can be sure that the refactored code works exactly the same way as the original. If the changes were intentional, you can accept a new baseline for future tests. However, CDK upgrades can also cause synthesized templates to change, so you can't rely only on snapshots to make sure your implementation is correct.
スナップショットテストは、合成されたAWS CloudFormationテンプレートを、以前に保存されたベースラインテンプレートまたは "マスター "に対してテストします。スナップショットテストでは、リファクタリングしたコードがオリジナルと全く同じように動作することが確認できるため、自由にリファクタリングすることができます。もしその変更が意図的なものであれば、将来のテストのために新しいベースラインを受け入れることができます。しかし、CDKのアップグレードによって合成されたテンプレートも変更される可能性があるため、スナップショットだけに頼って実装が正しいかどうかを確認することはできません。
静的解析のカテゴリ
- TSを使っている場合は以下の2パターンが考えられる
- TSコードの静的解析
- CFnテンプレートの静的解析
TSコードの静的解析
ESLintやPrettierなど
CFnテンプレートの静的解析ツール
This Action for CloudFormation Linter enables arbitrary actions for interacting with CloudFormation Linter to validate CloudFormation yaml/json templates against the CloudFormation spec and additional checks. Includes checking valid values for resource properties and best practices.
このAction for CloudFormation Linterは、CloudFormation Linterと対話するための任意のアクションを可能にし、CloudFormationの仕様と追加チェックに対してCloudFormation yaml/json テンプレートを検証することができます。リソースプロパティやベストプラクティスに対する有効な値のチェックも含みます。