【正解】B
【0からの解説】
この問題は AWS CDK で「再利用可能なコンポーネント」と「共通のコスト配分タグ」を両立する正しい設計を問うものです。
ポイントは2つあります。
1つ目は「再利用可能なコンポーネントの作り方」です。CDK では、複数のリソースをまとめた再利用可能な部品を「コンストラクト (Construct)」と呼びます。自分で作った共通パターン(VPC、サブネット、ロギング設定など)を部品化するには、カスタム CDK コンストラクトライブラリを作成するのが正攻法です。AWS Service Catalog は IT サービスのカタログ化・配布のためのサービスであり、CDK コンストラクトを書くための部品ではないため、ここでは不適切です。
2つ目は「コスト配分タグの付け方」です。CDK では `Tags` クラス(`Tags.of(scope).add(key, value)`)を使うと、対象スコープ配下のすべてのリソースに再帰的にタグを伝播できます。これがアプリ全体やスタック全体に統一タグを適用する公式の方法です。一方 `TagManager` は CDK 内部で各コンストラクトのタグを保持・集約するための低レベルクラスであり、利用者がアプリ全体にタグを付ける用途で直接使うものではありません。
さらにマイクロサービスは、ベストプラクティスとして「マイクロサービスごとに高レベルのコンストラクトを定義し、個別の CDK スタックとしてデプロイ」します。こうすると各サービスを独立してデプロイ・更新・ロールバックでき、障害の影響範囲を分離できます。
したがって、カスタムコンストラクトライブラリ+`Tags` クラス+サービスごとの個別スタック、という B が正解です。
【誤りの選択肢】
A:再利用可能コンポーネントの作り方(カスタムライブラリ)は正しいですが、`TagManager` クラスはタグ付けの公式手段ではなく `Tags` クラスを使うべきです。また全マイクロサービスを単一スタックにまとめるとデプロイの分離ができず、マイクロサービスの利点を損ないます。
C:再利用可能コンポーネントに Service Catalog 製品を使う点が誤りです(CDK コンストラクトの部品にはなりません)。`TagManager` 使用と単一スタックも不適切です。
D:`Tags` クラスと個別スタックは正しいですが、共通インフラパターンの再利用に Service Catalog 製品を使う点が誤りです。CDK で再利用部品を作るならカスタムコンストラクトライブラリが正解です。
【参考】
AWS CDK - TagsAWS CDK - Constructs