こんにちは。アプリケーションサービス部の渡辺です。
AWS Config カスタムルールを作成することで、独自のルールで AWS リソースの設定内容を評価することができます。 AWS Config カスタムルールのひとつである AWS Config カスタム Lambda ルールは Lambda 関数を使用してルールを作成することができます。
デプロイの観点 で考えると色々な選択肢が思い浮かびます。
- AWS RDK
- AWS CloudFormation
- AWS CDK
- AWS SAM
それぞれどのような特徴があり AWS Config カスタムルールをデプロイする際に選択すべきツールはどれが最適でしょうか?
デプロイツール比較表
ツール | 良い点 | 考慮すべき点 |
---|---|---|
AWS RDK | ルールのロジックのみ記述すれば良い | Lambda ランタイムに制限あり |
AWS CloudFormation | IaC によるルールの管理 | リソース定義を記述する必要がある |
AWS CDK | IaC によるルールの管理 L2 コンストラクトで抽象化された IaC |
リソース定義を記述する必要がある |
AWS SAM | IaC によるルールの管理 Lambda 関数のリソース定義が抽象化されている |
リソース定義を記述する必要がある |
AWS RDK
AWS RDK は AWS Config カスタム Lambda ルールの開発のために最適化されたツールです。 CLI 操作で Lambda 関数の雛形の作成、デプロイまでを実施できます。 また、作成したルールのテストもサポートしています。
開発者が注力し、管理すべきなのは独自ルールのロジック (Lambda 関数コード) のみです。
考慮すべき点は、 Lambda 関数のランタイムに制限があることです。
詳しくは以下の弊社ブログを参照ください。
AWS Config カスタム Lambda ルールを素早く開発しデプロイしたい際の選択肢として最適です。
AWS CloudFormation
AWS CloudFormation は AWS リソースを IaC で管理するサービスです。 リソース定義を細かいところまで実施することができます。 一方で、リソース定義テンプレートの記述が多くなってしまう傾向があります。
AWS CloudFormation 既に使っている or AWS Config カスタム Lambda ルールの Lambda ランタイムを選びたい際の選択肢として最適です。
AWS CDK
AWS CDK は AWS リソースをプログラムで定義できるツールです。 リソース定義が抽象化されており、リソース定義の記述を AWS CloudFormation より少なくすることもできます。
AWS Config カスタム Lambda ルール用の L2 コンストラクト class CustomRule (construct) · AWS CDK が提供されており、記述量が少ない抽象化された表現が可能です。
AWS CDK 既に使っている or AWS Config カスタム Lambda ルールの Lambda ランタイムを選びたい際の選択肢として最適です。
AWS SAM
AWS SAM は サーバーレスリソースをより簡潔な IaC で管理する記法・ツールです。 AWS CloudFormation と似た記述方法で Lambda 関数の定義テンプレートがより簡潔になります。 一方で AWS Config カスタム Lambda ルールに必要な AWS::Config::ConfigRule には未対応です。 そのため、リソース定義には AWS SAM と AWS CloudFormation の併用が必要です。
とにかく AWS SAM で Lambda 関数を管理したいという強い意図がある際の選択肢として最適です。
まとめ
AWS RDK が AWS Config カスタムルールの開発に最適化されたツールのため、デプロイ観点で考えた際も、 AWS RDK が一番手軽です。 一方で、リソース管理などの側面から IaC が必要になる場合もあります。 その際は、無理に AWS RDK ではなく、 AWS CloudFormation や AWS CDK などの既にお使いのツールを用いるという選択肢が良いのかなと思いました。