Open7

AWS CDKの自動テスト

krabben16krabben16

IaCの自動テストが必要な理由

krabben16krabben16

テストすべきなのは、CDKアプリケーションによってCloudFormationを生成する箇所です。 以前と同じCloudFormationテンプレートが生成される事をテストする事で、CDKのバージョンが変わっても作成されるAWSリソースに変更が無いことを確認します。

https://dev.classmethod.jp/articles/awscdk-snapshot-test/

krabben16krabben16

自動テストの種類

krabben16krabben16

単体テストのカテゴリ

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のアップグレードによって合成されたテンプレートも変更される可能性があるため、スナップショットだけに頼って実装が正しいかどうかを確認することはできません。

https://docs.aws.amazon.com/cdk/v2/guide/testing.html

krabben16krabben16

静的解析のカテゴリ

  • TSを使っている場合は以下の2パターンが考えられる
    • TSコードの静的解析
    • CFnテンプレートの静的解析

TSコードの静的解析

ESLintやPrettierなど

CFnテンプレートの静的解析ツール

https://github.com/ScottBrenner/cfn-lint-action

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 テンプレートを検証することができます。リソースプロパティやベストプラクティスに対する有効な値のチェックも含みます。