AWS 認定 デベロッパー アソシエイトサンプル問題を解説します

こんにちは。
本記事は、株式会社日立システムズのアドベントカレンダーの12/25の記事です。

今回は、 AWS 認定 デベロッパー アソシエイトのサンプル問題解説です。

AWS で開発を担当する開発者の方向けの認定試験です。

## AWS認定とは
>AWS 認定は、クラウドの専門知識を検証し、専門家が需要の高いスキルを強調し、組織が AWS を使用してクラウドイニシアチブにおける効果的で革新的なチームを構築するのに役立ちます。個人やチームが独自の目標を達成できるように、役割と専門分野ごとに設計したさまざまな認定試験から選択します。

AWS 認定は領域やレベルごとに分けられ、本校執筆時点(2020/12)では12の認定資格が存在しています。

* レベル
 * 基礎
 * アソシエイト(中級ととらえてください)
 * プロフェッショナル(上級ととらえてください)
 * 専門知識(対象分野に特化した高度な認定) 
* 領域
 * 全般
 * ソリューション
 * 開発
 * 運用
 * DBや機械学習といった専門分野 

表にまとめると以下の通りです。

|#|レベル|認定名|
|---:|:---|:---|
|1|基礎|クラウドプラクティショナー|
|2|アソシエイト|ソリューションアーキテクト アソシエイト|
|3|アソシエイト|デベロッパー アソシエイト|
|4|アソシエイト|SysOps アドミニストレーター アソシエイト|
|5|プロフェッショナル|ソシューションアーキテクト プロフェッショナル|
|6|プロフェッショナル|DevOps エンジニア プロフェッショナル|
|7|専門知識|高度なネットワーク|
|8|専門知識|Alexaスキルビルダー|
|9|専門知識|セキュリティ|
|10|専門知識|機械学習|
|11|専門知識|データ分析|
|12|専門知識|データベース|


## AWS認定 デベロッパー アソシエイト
試験の概要や出題割合などは、以下の試験ガイドをご確認ください。
https://d1.awsstatic.com/ja_JP/training-and-certification/docs-dev-associate/AWS-Certified-Developer-Associate_Exam-Guide.pdf


## サンプル問題を解いてみよう
それでは、サンプル問題を確認していきましょう。

サンプル問題：
https://d1.awsstatic.com/ja_JP/training-and-certification/docs-dev-associate/AWS-Certified-Developer-Associate_Sample-Questions.pdf

※以降、Markdown記載に合わせて、サンプル問題のABCDを1234と置き換えています。

### 第1問
#### 問題文
ある企業が、レガシーアプリケーションを Amazon EC2 に移行しようとしています。MySQL データベースに接続するためのユーザー名とパスワードが、アプリケーションのソースコードに直接コーディングされています。
このデータベースは、Amazon RDS for MySQL データベースインスタンスに移行される予定です。この企業は、移行プロセスの一環として、データベース認証情報を格納および自動ローテートするためのセキュアな方法を実装したい、と考えています。

これらの要件を満たすには、どうすればよいですか。 

1. データベース認証情報を Amazon Machine Image (AMI) の環境変数内に格納する。AMI を置換することによって認証情報をローテートする。
2. データベース認証情報を AWS Systems Manager の Parameter Store に格納する。認証情報を自動ローテートするよう、Parameter Store を構成する。
3. データベース認証情報を EC2 インスタンス上の環境変数内に格納する。EC2 インスタンスを再起動することによって認証情報をローテートする。
4. データベース認証情報を AWS Secrets Manager に格納する。認証情報を自動ローテートするよう、SecretsManager を構成する。

#### 回答
４

#### 解説
AWS 移行に合わせてセキュリティ的によろしくない「ユーザー名とパスワードの直接コーディング」状態を解消し、さらにセキュアな状態で認証情報を自動的に更新するにはどうしたらよいかを問うてるものです。

1. 不適当です。AMI の環境変数内に格納すること自体は、「ユーザー名とパスワードの直接コーディング」状態を解消しているかもしれませんが、ローテートするためには、置換後の AMI で EC2 インスタンスを起動する必要があります。複数台インスタンスが稼働している場合、置換前の AMI から起動しているインスタンスで RDS への接続エラーが発生したり、システムを止めないとならないといった弊害があります。
2. 不適当です。「ユーザー名とパスワードの直接コーディング」状態を解消し、認証情報を暗号化しておくことができますが、自動ローテートをするためのローテーションライフサイクルがありません。
3. 不適当です。選択肢1と同様です。EC2 インスタンスが複数ある場合、その台数分環境変数を書き換えないとならなかったり、作業が終わるまで接続エラーが起きたりシステムを止めないとならないといった弊害があります。
4. 適当であると考えます。Secrets Manager を使うことで認証情報のセキュアな格納や自動ローテートといったことが可能になります。


### 第2問
#### 問題文
コメントを投稿したユーザーがほぼリアルタイムでフィードバックを受け取ることができる機能を備えた Web アプリケーションを、開発者が設計しています。

これらの要件を満たすには、どうすればよいですか (2 つ選択してください)。

1. AWS AppSync スキーマ、および対応する API を作成する。Amazon DynamoDB テーブルをデータストアとして使用する。
2. Amazon API Gateway 内に WebSocket API を作成する。AWS Lambda 関数をバックエンドとして使用する。Amazon DynamoDB テーブルをデータストアとして使用する。
3. Amazon RDS データベースをバックエンドとして使用する AWS Elastic Beanstalk アプリケーションを作成する。長寿命 TCP/IP ソケットを許可するよう、アプリケーションを構成する。
4. Amazon API Gateway 内に GraphQL エンドポイントを作成する。Amazon DynamoDB テーブルをデータストアとして使用する。
5. Amazon CloudFront で WebSocket を有効化する。AWS Lambda 関数をオリジンとして使用する。Amazon Aurora データベースクラスターをデータストアとして使用する。


#### 回答
１，２

#### 解説
リアルタイム性のあるアプリケーションを作る際に、どの AWS サービスを使えばよいかを問うています。

1. 適当であると考えます。AWS AppSync で API を作成し、NoSQL DB である Amazon DynamoDB を用いることでほぼリアルタイムにフィードバックを受け取ることができる Web アプリケーションを開発できます。
2. 適当であると考えます。WebSocket を使うことで双方向通信ができるようになることと、NoSQL DB である Amazon DynamoDB を用いることでほぼリアルタイムにフィードバックを受け取ることができる Web アプリケーションを開発できます。
3. 不適当です。RDS は RDB であり、一般的に RDB で利用する SQL のオーバーヘッドにより、ほぼリアルタイムにフィードバックを受け取ることができません。
4. 不適当です。 Amazon API Gateway 内に GraphQL エンドポイントを作成することはできません。
5. 不適当です。まず、Amazon CloudFront のオリジンとして Lambda 関数を指定できません。また、3と同様に、Amazon Aurora も RDB であるため、SQL のオーバーヘッドにより、ほぼリアルタイムにフィードバックを受け取ることができません。

### 第3問
#### 問題文
開発者が、サインアップ機能とサインイン機能をアプリケーションに追加しようとしています。このアプリケー
ションでは、カスタム分析ソリューションに対する API 呼び出しを実行し、ユーザーのサインインイベントをロギングする必要があります。

これらの要件を満たすには、どうすればよいですか (2 つ選択してください)。 

1. Amazon Cognito を使用して、サインアップ機能とサインイン機能を追加する。
2. AWS IAM を使用して、サインアップ機能とサインイン機能を追加する。
3. 認証後イベントによってトリガされる API 呼び出しを実行するよう、AWS Config ルールを構成する。
4. 認証後イベントによってトリガされる API 呼び出しを実行する Amazon API Gateway メソッドを呼び出す。
5. 認証後イベントによってトリガされる API 呼び出しを実行する AWS Lambda 関数を実行する。

#### 回答
１，５

#### 解説
アプリケーションに対して、ユーザーの新規登録や認証の機能を追加したいという要件を満たすものはどれかを問うています。

1. 適当であると考えます。Amazon Cognito を使うことで、サインアップやサインインといった機能をアプリケーションに追加することができます。
2. 不適当です。AWS IAM でアプリケーションのサインアップやサインインといった機能を提供できません。
3. 不適当です。認証後のイベントをトリガーとしてAPI 呼び出しを実行するように AWS Config ルールを構成することはできません。
4. 不適当です。認証後のイベントをトリガーとして Amazon API Gateway のメソッドを呼び出すことはできません。
5. 適当であると考えます。Amazon Cognito の認証後トリガーを使用して、カスタム分析ソリューションに対する API 呼び出す Lambda 関数を実行することができます。

### 第4問
#### 問題文
ある企業が、ある AWS アカウント内の REST API に対して Amazon API Gateway を使用しています。セキュリティチームは、別の AWS アカウント内の IAM ユーザーだけがこれらの API にアクセスできるようにしたいと考えています。

これらの要件を満たすには、どうすればよいですか (2 つ選択してください)。 

1. IAM 権限ポリシーを作成し、各 IAM ユーザーにアタッチする。API に対するメソッド承認タイプを AWS_IAMに設定する。署名バージョン 4 を使用して API リクエストに署名する。
2. Amazon Cognito ユーザープールを作成し、各 IAM ユーザーをこのプールに追加する。API に対するメソッド承認タイプを COGNITO_USER_POOLS に設定する。Amazon Cognito の IAM 認証情報を使用して認証し、ID トークンをリクエストヘッダーに追加する。
3. Amazon Cognito アイデンティティプールを作成し、各 IAM ユーザーをこのプールに追加する。API に対するメソッド承認タイプ COGNITO_USER_POOLS に設定する。Amazon Cognito の IAM 認証情報を使用して認証し、アクセストークンをリクエストヘッダーに追加する。
4. 各 IAM ユーザーにのみアクセスを許可する、API に対するリソースポリシーを作成する。
5. 各 IAM ユーザーにのみアクセスを許可する、API に対する Amazon Cognito オーソライザーを作成する。API に対するメソッド承認タイプを COGNITO_USER_POOLS に設定する。

#### 回答
１，４

#### 解説
Amazon API Gateway で作成された REST API に対するアクセス権を設定するにはどうしたらよいかを問うています。API Gateway でこの要件を満たすには、リソースポリシーや署名バージョン 4 プロトコルを使用します。

1. 適当であると考えます。要件を満たすための、設定などがなされ署名バージョン 4 を使用しています。
2. 不適当です。Amazon Cognito のユーザープールに IAM ユーザーを追加することはできません。
3. 不適当です。Amazon Cognito のアイデンティティプールに IAM ユーザーを追加することはできません。
4. 適当であると考えます。要件を満たすためのリソースポリシーを作成しています。
5. 不適当です。API Gateway のオーソライザーで指定する Amazon Cognito はほかの選択肢と同様に IAM ユーザーに対する許可設定はできません。

### 第5問
#### 問題文
開発者が、テキストファイルを .pdf ファイルに変換するアプリケーションを作成しています。このテキストファイルは、別のアプリケーションによって変換元 Amazon S3 バケットに格納されています。開発者は、テキストファイルが Amazon S3 に格納されたときにそのテキストファイルを読み取り、AWS Lambda を使用して .pdf ファイルに変換したいと考えています。開発者は、Amazon S3 および Amazon CloudWatch Logs に対するアクセスを許可す
る IAM ポリシーをすでに作成しています。

この Lambda 関数に適切な権限を付与するには、どうすればよいですか。 

1. AWS IAM を使用して、Lambda 実行ロールを作成する。IAM ポリシーをこのロールにアタッチする。このLambda 実行ロールを Lambda 関数に割り当てる。
2. AWS IAM を使用して、Lambda 実行ユーザーを作成する。IAM ポリシーをこのユーザーにアタッチする。この Lambda 実行ユーザーを Lambda 関数に割り当てる。
3. AWS IAM を使用して、Lambda 実行ロールを作成する。IAM ポリシーをこのロールにアタッチする。IAM ロールを Lambda 関数内に環境変数として格納する。
4. AWS IAM を使用して、Lambda 実行ユーザーを作成する。IAM ポリシーをこの ユーザーにアタッチする。IAM ユーザー認証情報を Lambda 関数内に環境変数として格納する。

#### 回答
１

#### 解説
Lambda 関数を実行する際に必要な権限設定の実施方法は、どれが適切かを問うています。問題文にある Lambda 実行ロールとは、IAM ロールの作成時に「ユースケースの選択」で Lambda を選択したり、ロールの信頼関係で「ID プロバイダー」に lambda.amazonaws.com が指定されているものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/85d46d55-4db3-fecc-ed9c-2f84a7ab74b1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/51b79210-1434-6bf6-72a5-45fdf81837e7.png)

信頼関係のポリシードキュメントはこんな感じです。

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

これらを踏まえて、適切なものを選択します。

1. 適当であると考えます。Lambda 実行ロールに既に作成済みの IAM ポリシーをアタッチし、Lambda 関数に割り当てているので要件を満たせます。
2. 不適当です。Lambda 実行ユーザーはありません。AWS サービスにアタッチできるのは、IAM ロールです。
3. 不適当です。IAM ロールを Lambda 関数の環境変数に割り当てても Lambda 関数に権限を付与することができません。
4. 不適当です。Lambda 実行ユーザーはありません。AWS サービスにアタッチできるのは、IAM ロールです。

### 第6問
#### 問題文
ある企業の AWS ワークロードが、複数の地域に分散しています。開発者は、Amazon Aurora データベースを us-west-1 リージョン内に作成しました。このデータベースは、顧客管理型 AWS KMS キーを使用して暗号化されています。開発者は、同様の暗号化データベースを us-east-1 リージョン内に作成したいと考えています。

この要件を満たすには、どうすればよいですか。 

1. データベースのスナップショットを us-west-1 リージョン内に作成する。このスナップショットを useast-1 リージョンにコピーし、us-east-1 リージョン内の KMS キーを指定する。コピーしたスナップショットからデータベースを復元する。
2. データベースの非暗号化スナップショットを us-west-1 リージョン内に作成する。このスナップショットを us-east-1 リージョンにコピーする。コピーしたスナップショットからデータベースを復元する。us-east-1 リージョン内の KMS キーを使用して、暗号化を有効化する。
3. データベースの暗号化を無効化する。データベースのスナップショットを us-west-1 リージョン内に作成する。このスナップショットを us-east-1 リージョンにコピーする。コピーしたスナップショットからデータベースを復元する。
4. us-east-1 リージョンで、us-west-1 リージョン内のデータベースの前回の自動バックアップデータからデータベースを復元する。us-east-1 リージョン内の KMS キーを使用して、暗号化を有効化する。

#### 回答
１

#### 解説
既に暗号化済みの Amazon Aurora データベースを別のリージョンで作成、起動したいというユースケースにおける設定、作業について問うています。ポイントとしては暗号化と、その暗号化キーを管理する AWS KMS の仕様を理解しているかどうかです。AWS KMS 暗号化キーはリージョン固有であるため、別のリージョンへコピーする際には、コピー先のリージョンで有効な KMS キーを指定する必要があります。このあたり、実は、RDSのユーザーガイドに記載があります。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Overview.Encryption.html#Overview.Encryption.Limitations

1. 適当であると考えます。上述の通り、スナップショットを取得、コピーし、コピー先のリージョンの KMS キーを指定して復元をしています。
2. 不適当です。既に暗号化済みのデータベースから非暗号化スナップショットを作成することはできません。
3. 不適当です。既に暗号化済みのデータベースの暗号化を無効にするのはできません。
4. 不適当です。リージョンをまたいでいるので、us-west-1 リージョンから us-east-1 リージョンへコピーする必要があります。またコピー時にコピー先リージョンの AWS KMS キーを指定する必要があります。

### 第7問
#### 問題文
開発者が、Amazon ElastiCache for Memcached を既存のレコード格納アプリケーションに追加しようとしています。その目的は、データベースの負荷を減らし、パフォーマンスを向上させることです。開発者は、典型的なレコード処理パターンの分析結果に基づき、遅延読み込み機能を使用することにしました。

遅延読み込み機能を適切に実装するための擬似コード例はどれですか。

1. record_value = db.query("UPDATE Records SET Details = {1} WHERE ID == {0}", record_key,record_value)<br>cache.set (record_key, record_value)
2. record_value = cache.get(record_key)<br>if (record_value == NULL)<br>   record_value = db.query("SELECT Details FROM Records WHERE ID == {0}", record_key)<br>   cache.set (record_key, record_value)
3. record_value = cache.get (record_key)<br>db.query("UPDATE Records SET Details = {1} WHERE ID == {0}", record_key, record_value)
4. record_value = db.query("SELECT Details FROM Records WHERE ID == {0}", record_key)<br>if (record_value != NULL)<br>   cache.set (record_key, record_value)

#### 回答
２

#### 解説
遅延読み込みを実装するコードはどれかを問うていますが、まずは遅延読み込みとはなにかを理解する必要があります。
遅延読み込みは、以下の図で示しているように、一度キャッシュ内に、欲しいレコードがあるか確認します。あればそのまま返しますが、ない場合は、データベースから取得し、その内容をキャッシュに格納するというのものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/6d707e0e-9134-5271-5bb2-6c4e847b0fd9.png)

そのため、疑似コードでそのような動きになっているものが回答になります。

1. 不適当です。データベースへの書き込みに合わせてキャッシュに格納しています。これは、書き込みスルーの実装です。
2. 適当であると考えます。まずキャッシュを確認し、レコードがないことを if 文で確認し、レコードがない場合は、データベースから取得後にキャッシュに格納しています。
3. 不適当です。キャッシュを確認後、データベースの書き込みを行う処理になっています。
4. 不適当です。データベースを確認し、レコードがないことを if 文で確認し、レコードがない場合は、キャッシュに格納するという処理になっています。


### 第8問
#### 問題文
開発者が、Amazon EC2 インスタンスフリート上で動作するアプリケーションのパフォーマンスを追跡したいと考えています。また、インスタンスフリート全体に関する統計情報 (例: 平均リクエスト遅延、最大リクエスト遅延) を表示および追跡したいと考えています。さらに、平均応答時間がしきい値を上回ったとき、すぐに通知を受信したいとも考えています。

これらの要件を満たすには、どうすればよいですか。

1. 応答時間を測定し、Amazon S3 バケット内のログファイルを毎分更新する cron ジョブを各インスタンス上で構成する。ログファイルを読み取って新しいエントリを Amazon Elasticsearch Service (Amazon ES) クラスターに書き込む AWS Lambda 関数を、Amazon S3 イベント通知を使用してトリガする。結果を Kibanaダッシュボードに表示する。応答時間がしきい値を上回ったときに Amazon SNS トピックにアラートを送信するよう、Amazon ES を構成する。
2. 応答時間をシステムログに書き込むよう、アプリケーションを構成する。Amazon Inspector エージェントをインストールする。ログを継続的に読み取って応答時間を Amazon EventBridge に送信するよう、Inspectorエージェントを構成する。メトリクスグラフを EventBridge コンソールに表示する。応答時間メトリクスの平均値がしきい値を上回ったときに Amazon SNS 通知を送信するよう、EventBridge カスタムルールを構成
する。
3. 応答時間をログファイルに書き込むよう、アプリケーションを構成する。Amazon CloudWatch エージェントをインスタンスにインストールする。アプリケーションログを CloudWatch Logs にストリーミングするよう、CloudWatch エージェントを構成する。ログから応答時間のメトリクスフィルタを作成する。メトリクスグラフを CloudWatch コンソールに表示する。応答時間メトリクスの平均値がしきい値を上回ったときに Amazon SNS 通知を送信する CloudWatch アラームを作成する。
4. AWS Systems Manager エージェントをインスタンスにインストールする。応答時間を監視して Amazon CloudWatch にカスタムメトリクスとして送信するよう、Systems Manager エージェントを構成する。メトリクスグラフを Amazon QuickSight に表示する。応答時間メトリクスの平均値がしきい値を上回ったときに Amazon SNS 通知を送信する CloudWatch アラームを作成する。


#### 回答
３

#### 解説
パフォーマンスの追跡をするなら、 Amazon CloudWatch を利用するのが良いです。応答時間については CloudWatch Logs に書き込んだり、カスタムメトリクスとしてコマンドなどでCloudWatch メトリクスへ送信したり、通知は CloudWatch アラームを使うなどで達成できます。

1. 不適当です。S3 バケット上のログファイルを毎分更新や個々のインスタンス単位での更新では、しきい値を上回ったときにすぐに通知することが難しいですし、適当なものと比較しても余剰が多すぎます。
2. 不適当です。 Amazon Inspector はセキュリティ評価サービスのため、用途が異なります。
3. 適当であると考えます。ログファイルに応答時間を書き込むようにしておき、そのログファイルを CloudWatch Agent の管理下にすることで、ログファイルの更新のたびに自動的に CloudWatch Logs へログ内容が格納されます。また、CloudWatch Logs の内容に対して、メトリクスフィルタを作成すれば、CloudWatch メトリクスとして利用できるようになります。そのメトリクスに対して、CloudWatch アラームでしきい値を設定し、超過時に Amazon SNS で通知が行えます。
4. 不適当です。Windows では Systems Manager エージェントでカスタムメトリクスを送ることができましたが、Linux 系の場合ではできません。また、現在のベストプラクティスとしては、選択肢３のように、CloudWatch エージェントを使用するようになっています。

### 第9問
#### 問題文
開発者が、あるアプリケーションをローカル環境でテストしており、そのアプリケーションを AWS Lambda に展開しました。パッケージサイズを上限値以下に抑えるため、依存関係を展開ファイルに含めませんでした。アプリケーションをリモートでテストしたとき、依存関係が欠落しているため、関数が実行されませんでした。

この問題を解決するには、どうすればよいですか。

1. Lambda コンソールエディタを使用して、コードを更新し、欠落している依存関係を含めるようにする。
2. 欠落している依存関係を含めた .zip ファイルを別途作成し、このファイルを元の Lambda 展開パッケージに含める。
3. 欠落している依存関係への参照を、Lambda 関数の環境変数に追加する。
4. 欠落している依存関係を含めたレイヤーを Lambda 関数にアタッチする。

#### 回答
４

#### 解説
Lambda 関数の依存関係のファイル、つまり、関数を動かすのに必要なモジュールやライブラリ、ランタイムを取り込むとサイズの上限値を超えてしまう際の対処方法を問うています。 AWS Lambda には、レイヤーと呼ばれる機能があり、レイヤーにはモジュールやランタイムを組み込んで置き、Lambda 関数にアタッチすることで、関数側からレイヤーを呼び出すことができます。

1. 不適当です。パッケージサイズが超えてしまう可能性があるため、含めることができません
2. 不適当です。ZIP ファイルを作成しても元のパッケージのサイズが超えてしまう可能性があるため、含めることができません。
3. 不適当です。参照先を環境変数で指定しても依存関係の欠落はそのままです。
4. 適当であると考えます。レイヤーは Lambda 関数のパッケージサイズとはかかわりがないため、問題なく利用ができます。



### 第10問
#### 問題文
開発者が、Amazon API Gateway を使用する Web アプリケーションを作成しています。開発者は、開発ワークロード用環境と本番ワークロード用環境を別々に管理したいと考えています。この API では、AWS Lambda 関数を使用します。この関数には、開発用と本番用のエイリアスをそれぞれ割り当てます。

最小限の構成作業量でこの要件を満たすには、どうすればよいですか。 

1. 各環境用の REST API を作成する。API をそれぞれ、Lambda 関数の開発用エイリアスおよび本番用エイリアスと結び付ける。この 2 つの API をそれぞれのステージに展開し、ステージ URL を使用して API にアクセスする。
2. REST API を 1 個作成する。エイリアスではなくステージ変数を使用して、API を Lambda 関数と結び付ける。その後、API を開発用ステージおよび本番用ステージに展開する。各ステージ内でステージ変数を作成する。その際、変数の値として別々のエイリアスを使用する。それぞれのステージ URL を使用して API にアクセスする。
3. REST API を 1 個作成する。この API を Lambda 関数の開発用エイリアスと結び付け、開発環境に展開する。カナリアを Lambda 関数の本番用エイリアスと結び付けるよう、本番用カナリアリリース展開を構成する。
4. REST API を 1 個作成する。この API を Lambda 関数の本番用エイリアスと結び付け、本番環境に展開する。カナリアを Lambda 関数の開発用エイリアスと結び付けるよう、開発用カナリアリリース展開を構成する。

#### 回答
２

#### 解説
Amazon API Gateway と AWS Lambda を試用した Web アプリケーションで最小構成としながら、開発環境と本番環境を別々に管理するにはどうしたらよいかを問うています。問題文にある通り、AWS Lambda はエイリアスという機能があり、これで開発用と本番用の切り分けができます。また、API Gateway についても、ステージという概念があり、開発環境や本番環境のように管理が可能です。

1. 不適当です。リリースステージで分ければよいですが、選択肢では、各環境用(開発と本番)の REST API を作成するとあります。
2. 適当であると考えます。ステージを分け、それぞれの環境用の Lambda 関数エリアスをマッピングしています。
3. 不適当です。カナリアリリースは、従来バージョンと新バージョンでリリース時に、リクエストを 100% 新バージョンに流すのではなく、ある一定の重みづけの範囲で新バージョン、従来バージョンへリクエストを流す機能です。そのため、本番用、開発用のようにわけるためのものではありません。
4. 不適当です。3 と同様です。


## サンプル問題以外の学習リソース
様々な学習リソースが用意されています。

以下はその一例です。

* AWS公式の模擬問題
 * [AWS 認定サイト](https://www.aws.training/certification)から受験可能です。
* 認定準備ワークショップに参加
 * AWS が定期的に開催しているワークショップに参加して学ぶことが可能です。
* 試験対策テキスト
 * [AWS認定アソシエイト3資格対策~ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター~](https://www.amazon.co.jp/dp/4865941991/)


## まとめ
デベロッパー アソシエイト試験は、AWS 上でシステム開発を行う開発者がどれだけ開発系サービスを理解しているかを問うものです。ただ作るだけではなく、デプロイやリリース方法といった仕組みについても理解していないとなりません。開発系のサービスにどんなものがあるのか、それらのユースケースを学んだうえで、問題内容を把握し、最良の答えを選んでいっていただけたらと思います。　


記載されている会社名、製品名、サービス名、ロゴ等は各社の商標または登録商標です。