Q19 — AWS DVA-C02 第1章
第 19/100 問 | ← 第1章
企業は、AWS CloudFormationテンプレートを使用して、すべてのAmazon RDSデータベースインスタンスをデプロイする必要があります。これは、AWS CodePipelineによる継続的インテグレーション/継続的デリバリー(CI/CD)自動化の一部として実施されます。データベースインスタンスのマスターパスワードは、デプロイプロセス中に自動生成される必要があります。この要件を満たすために、開発作業量を最小限に抑えるソリューションはどれですか?
- A. AWS Lambda対応のCloudFormationカスタムリソースを作成します。安全な文字列を生成するLambdaコードを記述します。安全な文字列の値をカスタムリソースのレスポンスオブジェクトのDataフィールドとして返します。CloudFormationのFn::GetAtt組み込み関数を使用して安全な文字列の値を取得し、それを用いてデータベースインスタンスを作成します。
- B. CodePipelineのAWS CodeBuildアクションを使用し、以下のAWS CLIコマンドで安全な文字列を生成します:aws secretsmanager get-random-password。生成された安全な文字列をCloudFormationパラメータとして渡し、NoEcho属性をtrueに設定します。このパラメータ参照を用いてデータベースインスタンスを作成します。 ✓
- C. AWS Lambda対応のCloudFormationカスタムリソースを作成します。安全な文字列を生成するLambdaコードを記述します。安全な文字列の値をカスタムリソースのレスポンスオブジェクトのDataフィールドとして返します。CloudFormationのFn::GetAtt組み込み関数を使用して安全な文字列の値を取得します。AWS Secrets Managerでシークレットを作成し、Secrets Managerの動的参照を使用して、そのシークレットに格納された値を用いてデータベースインスタンスを作成します。
- D. AWS::SecretsManager::Secretリソースを使用して安全な文字列を生成します。安全な文字列をAWS Secrets Managerにシークレットとして保存します。Secrets Managerの動的参照を使用して、そのシークレットに格納された値を用いてデータベースインスタンスを作成します。
正解: B. CodePipelineのAWS CodeBuildアクションを使用し、以下のAWS CLIコマンドで安全な文字列を生成します:aws secretsmanager get-random-password。生成された安全な文字列をCloudFormationパラメータとして渡し、NoEcho属性をtrueに設定します。このパラメータ参照を用いてデータベースインスタンスを作成します。
解説
選択肢A:AWS Lambda対応のCloudFormationカスタムリソースを作成し、安全な文字列を生成するLambdaコードを記述し、CloudFormationのFn::GetAtt組み込み関数でその値を取得してデータベースインスタンスを作成する。この方法は可能ですが、追加の複雑性と開発作業量が発生します。 選択肢B:AWS CLIとAWS Secrets Managerを活用して安全な文字列を生成・管理し、CloudFormationパラメータとしてデータベースインスタンス作成プロセスに渡す。この方法はシンプルかつ直接的であり、追加のカスタムリソースやLambda関数を必要とせず、CI/CDパイプラインへの統合も容易です。 選択肢C:選択肢Aと同様にAWS Lambda対応のCloudFormationカスタムリソースを使用しますが、さらにAWS Secrets Managerでシークレットを作成して安全な文字列を保存します。機能的には強力ですが、選択肢Bと比較して複雑性と不要な手順が増加します。 選択肢D:選択肢Cと同様にAWS Secrets Managerを使用しますが、安全な文字列をシークレットとして保存し、動的参照で使用します。これにより、管理と権限設定の複雑性が増し、最もシンプルなソリューションではありません。 したがって、選択肢Bが最適な選択であり、AWS CLIとAWS Secrets Managerを活用して安全な文字列を生成・渡すことで、CI/CDパイプラインへの統合が容易であり、追加のカスタムリソースやLambda関数を必要としません。