AWS認定デベロッパー アソシエイト 練習問題を解こう

## はじめに

- AWS認定ソリューションアーキテクト-アソシエイト、AWS認定SysOpsアドミニストレータ-アソシエイトの資格取得を行いましたので、アソシエイトレベルの資格のラストとしてAWS認定デベロッパー-アソシエイト(AWS Certified Developer Asociate)にチャレンジしたいと思います 
- ソリューションアーキテクトやSysOpsアドミニストレータの試験対策でやったように、出題傾向のイメージをつかむために練習問題を解こうと思いましたが、2018年6月リリース版の[AWS認定デベロッパー アソシエイトの公式サイト](https://aws.amazon.com/jp/certification/certified-developer-associate/)には*練習問題のリンクがありません*…（2019年5月現在 準備中なのでしょうか）
- とりあえず、一世代前の[練習問題](https://d1.awsstatic.com/training-and-certification/docs-dev-associate/AWS%20Certified_Developer_associate_examsample_JP.pdf)を見つけましたので、そちらを解きつつ、関係している公式ドキュメントのリンクを掲載し、内容を整理します
- 【追加】English版の一世代前(2017年)の[練習問題](https://d1.awsstatic.com/training-and-certification/docs-dev-associate/AWS_certified_developer_associate_examsample.pdf)も見つけました
  日本語版とは問題が異なるようですので、そちらの日本語訳と解説も追記します

## 問題と解説（一世代前日本語版）
```
Q1. 次の文のうち、SQS について正しく述べているものはどれですか? 

1. メッセージは 1 回だけ配信され、先入れ先出しの順序で配信される。 
2. メッセージは 1 回だけ配信され、配信順序は決まっていない。 
3. メッセージは 1 回以上配信され、先入れ先出しの順序で配信される。 
4. メッセージは 1 回以上配信され、配信順序は決まっていない。
```
→ 回答：４

* SQSのキューの基本概念に関する問題
* スタンダードキュー
  * メッセージは１回以上配信
  * ベストエフォートの順序付け
* FIFOキュー
  * メッセージは１回だけの配信
  * 先入れ先出しの順序保証
* 当問題作成時はFIFOキューはまだ使えなかった
* [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html)


```
Q2. EC2 インスタンスは Amazon マシンイメージ(AMI)から起動されます。次のうち、パブリック AMI について当てはまるものはどれですか? 

1. そこの AWS リージョンであっても EC2 インスタンスを起動するために使用できる。 
2. その AMI が格納されている国で EC2 インスタンスを起動するためにのみ使用できる。 
3. その AMI が格納されている AWS リージョンで EC2 インスタンスを起動するためにのみ使用できる。 
4. その AMI が格納されている AWS アベイラビリティーゾーンで EC2 インスタンスを起動するためにのみ使 用できる。 
```
→回答：３

* パブリックAMIの使用可能範囲に関する問題
* パブリックAMIは、そのリージョンでのみ使用可能
* 他リージョンで使いたい場合は、AMIを該当リージョンにコピーして共有する必要がある
* [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/usingsharedamis-finding.html)



```
Q3. 企業 B では、オンライン画像認識サービスを提供しており、スケーラビリティを実現するために SQS を利用してシ ステムコンポーネントを切り離しています。SQS キューからタスクを処理して実行するバックエンドインスタンスは、キ ューを可能な限り頻繁にポーリングして、処理を早く行えるようにしています。しかし短い周期でのポーリングによっ て、処理すべきタスクがない空のレスポンスが返り CPU が無駄に消費される可能性があります。空のレスポンスの 数を減らすには、どうすればよいですか? 

1. キューの VisibilityTimeout 属性を 20 秒に設定する。 
2. キューの ReceiveMessageWaitTimeSeconds 属性を 20 秒に設定する。 
3. キューの MessageRetentionPeriod 属性を 20 秒に設定する。 
4. メッセージの DelaySeconds パラメータを 20 秒に設定する。 
```
→回答 ：２

* SQSのロングポーリングの設定に関する問題
* ロングポーリング設定にするにはReciveMessage待機時間を20 秒に設定する
* [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/working-with-messages.html#setting-up-long-polling)



```
Q4. Amazon S3 で US‐STANDARD リージョンにオブジェクトを格納したところ、正常に格納できたという確認メッセージ を受信しました。その直後に、別の API を呼び出して、このオブジェクトを読み込もうとしました。しかし S3 から、オブ ジェクトが存在しないというメッセージが返されました。どのような原因が考えられますか? 

1. US‐STANDARD で結果整合性を使用していて、バケットでオブジェクトが読み込み可能になるまでに時間 がかかることがある。 
2. Amazon S3 のオブジェクトは、第 2 のリージョンに複製されるまでは表示されない。 
3. US‐STANDARD では、新しいオブジェクトが読み込み可能になるまでに 1 秒の遅延が課されている。 
4. バケットのオブジェクト制限を超えたため。この制限を増やすと、オブジェクトが表示される。 
```
→回答 ：１

- S3のデータ整合性モデルに関する問題
  - S3の新しいオブジェクトの PUTS については「書き込み後の読み込み整合性」となっている
  - すべてのリージョンで PUT および DELETEの上書きについて結果整合性を提供している
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/Introduction.html)

```
Q5. リージョンの CloudFormation スタックの数についてのアカウント制限に達しました。制限を増やすには、どうすればよいですか? 

1. API を呼び出す。 
2. AWS に連絡する。 
3. マネージメントコンソールを使用する。 
4. 制限を増やすことはできない。 
```
→回答 ：２

- CloudFormationの制限緩和に関する問題
  - AWSの各サービスには、制限緩和可能なソフトリミットと制限緩和不可のハードリミットの２種類の制限が存在している
  - １リージョンあたりのCloudFormationのスタック数はデフォルトでは２００スタックまでとなるが、制限緩和可能なソフトリミット
  - AWSコンソールからサポート宛に上限緩和申請を行うことで制限の緩和をしてもらえる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html)

```
Q6. DynamoDB について正しいことを述べている文はどれですか?(正解を 2 つ選択) 

1. DynamoDB では、ペシミスティックロックモデルを使用する。 
2. DynamoDB では、楽観的オプティミスティック同時実行制御を使用する 。 
3. DynamoDB では、一貫性を実現するために条件付き書き込みを使用する。 
4. DynamoDB では、読み込み時の項目アクセスを制限する。 
5. DynamoDB では、書き込み時の項目アクセスを制限する。 
```
→回答 ：２、３

- DynamoDBの基本概念に関する問題
  - DynamoDBでロックを実現するには、更新時にバージョンをチェックする楽観的オプティミスティック制御となる
  - 一般的なRDBで使用されるレコード取得時にロックするペシミスティック(悲観的)制御は出来ない
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
  - DynamoDBでは条件付き書き込みをサポートしている
  - 条件付き書き込みが成功するのは項目の属性が 1 つ以上の想定条件を満たす場合のみとなり、それ以外はエラーを返す
  - たとえば、同じプライマリキーを持つ既存の項目がない場合にのみ、PutItemオペレーションが成功するようにできる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.ConditionalUpdate)
  - 読み込み時、書き込み時の項目アクセス制限はできない
  - アクセス制限はリソース(テーブル)やメソッドに対して可能

```
Q7. Amazon EBS‐backed インスタンスと Instance store‐backed インスタンスの違いは何ですか? 

1. Instance store‐backed インスタンスは停止と再開ができる。 
2. Auto Scaling には Amazon EBS‐backed インスタンスを使う必要がある。 
3. Amazon EBS‐backed インスタンスは停止と再開ができる。 
4. Virtual Private Cloud には EBS‐backed インスタンスが必要である。
```
→回答 ：３

- EC2のルートデバイスストレージの概念に関する問題
  - instance store-backed AMIの場合は、物理サーバーのストレージをルートストレージとするため、揮発性のストレージとなる
  - instance store-backed AMIは停止と再開は出来ず、停止すると削除される
  - instance store-backed AMIはディスクのIO性能が高い
  - Amazon EBS-backed AMIの場合は、Elastic Block Strorageをルートストレージとするため、データが永続化される
  - Amazon EBS-backed AMIは停止と再開が可能
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/RootDeviceStorage.html) 
  - VPCやAuto Scalingサービスを利用することにインスタンスタイプごとの制限はない

```
Q8. 企業ウェブアプリケーションを Amazon VPC 内にデプロイし、IPSec VPN 経由で企業データセンターに接続してい ます。このアプリケーションは、オンプレミスの LDAP サーバーに対して認証を行う必要があります。認証後、ログイン したユーザーは、そのユーザーに固有の S3 キー空間のみにアクセスできます。 
この目的を満たすことができる方法を、次の中から 1 つ選んでください。 

1. アプリケーションを LDAP に対して認証する。次に、アプリケーションで IAM Security Token Service を呼び出して、LDAP 認証情報を使用して IAM にログインする。アプリケーションでは、IAM の一時的な認証情報を使用して適切な S3 バケットにアクセスできる。
  
2. アプリケーションを LDAP に対して認証し、ユーザーに関連する IAM ロールを取得する。次に、IAM Security Token Service を呼び出して、その IAM ロールを引き受ける。アプリケーションでは、一時的な認 証情報を使用して適切な S3 バケットにアクセスできる。 

3. LDAP 認証情報を使用して、アプリケーションを IAM Security Token Service に対して認証する。これらの一 時的な AWS セキュリティ認証情報を使用して、適切な S3 バケットにアクセスする。 

4. LDAP に対して認証を行う認証ブローカーを開発し、IAM Security Token Service を使用して IAM フェデレー ションユーザー認証情報を取得する。アプリケーションで認証ブローカーを呼び出して、適切な S3 バケット へのアクセスを有する IAM フェデレーションユーザー認証情報を取得する。 

5. IAM Security Token Service に対して認証を行って IAM ロールを引き受け、一時的な AWS セキュリティ認 証情報を取得する認証ブローカーを開発する。アプリケーションで認証ブローカーを呼び出して、適切な S3 バケットへのアクセスを有する AWS の一時的なセキュリティ認証情報を取得する。 
```
→回答 ：４

- IDフェデレーションに関する問題
  - すでにユーザーIDをAWS外で管理している場合は、AWS アカウントに IAM ユーザーを作成する代わりに、IAM IDプロバイダーを利用できる
  - IAMロールを使用して、IDが組織または第三者のプロバイダー (IdP) からフェデレーションされたユーザーのアクセス許可を指定できる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)

```
Q9. 広告収益モデルの写真共有ウェブサイトを運営しており、サイト訪問者への写真配信に S3 を使用しています。 いつからかその写真に他のサイトが直接リンクを張るようになり、広告収益の減少を招いていることに気づきました。 この影響を緩和するにはどの対策が効果的ですか? 

1. 静的コンテンツに CloudFront ディストリビューションを使用する。 
2. パブリックの読み込み権限を削除し、有効期限付きの署名 URL を使用する。 
3. 被害を及ぼしているウェブサイトの IP をセキュリティグループで遮断する。 
4. 写真をウェブサーバーの EBS ボリュームに保存する。 
```
→回答 ：２

- S3の署名付きURLに関する問題
  - S3のオブジェクトはデフォルトではプライベートとなり、所有者のみがアクセスできる
  - パブリックアクセスとせずに、他ユーザとオブジェクトを共有する場合は、署名付きURL を作成し、独自のセキュリティ証明書を使用して、オブジェクトをダウンロードするための期限付きの許可を相手に付与する
  - 署名付きURL は、指定した期間のみ有効となる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/ShareObjectPreSignedURL.html)

```
Q10. アプリケーションで 6 GB のファイルを Simple Storage Service にアップロードしようとしていますが、「指定された アップロードは、アップロード可能な最大オブジェクトサイズを超えています。」というメッセージが表示されます。これ を解決する方法はありますか? 

1. ない。Simple Storage Service オブジェクトは 5 GB に制限されている。 
2. このオブジェクトにマルチパートアップロード API を使用する 。 
3. このオブジェクトに大きなオブジェクトのアップロード API を使用する。 
4. サポートに連絡してオブジェクトサイズ制限を増やす。 
5. 異なるリージョンにアップロードする。 
```
→回答 ：２

- S3のマルチパートアップロードに関する問題
  - S3では1 回のPUT オペレーションでアップロードできるオブジェクトの最大サイズは５GBに制限されている
  - マルチパートアップロードAPIを使用すると、オブジェクトをいくつかに分けてアップロードし、最大５TB の大容量オブジェクトをアップロードできる
  - オブジェクトのパートは、単独で、任意の順序で、または並行してアップロードできる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UploadingObjects.html)



## 問題と解説（一世代前English版）

```
1) CloudFormationテンプレートは、us-east-1で2層のWebアプリケーションを起動します。
us-west-1で開発スタックを作成しようとすると、プロセスが失敗します。
何が問題なのでしょうか?

A) テンプレートで参照されているAMIはus-west-1では使用できません。
B) テンプレートで参照されているIAMロールはus-west-1では無効です。
C) 2つのELBクラシック・ロード・バランサが同じ名前タグを持つことはできません。
D) CloudFormationテンプレートは単一のリージョンでのみ起動できる。
```

→ 回答：A

- リソースの使用可能範囲に関する問題

  - AMIは存在しているリージョンでしか使用出来ない

    - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/usingsharedamis-finding.html)

  - IAMロールはアカウント全体で使用可能

    - [公式ドキュメント](https://aws.amazon.com/jp/iam/faqs/)

  - ELBの名前はロードバランサーのセット内で一意である

    - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html)

  - CloudFormationテンプレートはグローバルで使用可能

    - [公式ドキュメント](https://aws.amazon.com/jp/cloudformation/faqs/)

    

```
2）アプリケーションはSQSキューからコマンドを読み取り、パートナーがホストするWebサービスにそれらを送信します。
パートナーのエンドポイントが停止すると、アプリケーションはそのコマンドをキューに継続的に返します。
これらのコマンドを配信しようとする試みを繰り返すと、リソースを使い果たします。
配信できないコマンドは失われてはいけません。
リソースを無駄にすることなく、パートナーの壊れたWebサービスにどのように対応できますか？

A）遅延キューを作成し、DelaySecondsを30秒に設定します。
B）VisibilityTimeoutを30秒にしてメッセージを再キューします。
C）デッドレターキューを作成し、最大受信数を3に設定します。
D）30秒のDelaySecondsでメッセージを再キューします。
```

→回答：C

* SQSのデッドレターキューに関する問題
  * デッドレターキューを指定している場合は所定回数以上のエラーが発生した場合に、メッセージがデッドレターキューに格納される
  * メッセージのReceiveCountがキューのmaxReceiveCountを超える場合、Amazon SQS はこのメッセージをデッドレターキューに (元のメッセージ ID で) 移動させる
  * [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html)



```
3）アプリケーションはSQSキューにメッセージを書き込む必要があります。
企業のセキュリティポリシーでは、AWS認証情報は常に暗号化され、少なくとも週に1回はローテーションされることが求められています。
アプリケーションからキューへの書き込みを許可する資格情報をどのように安全に提供できますか？

A）実行時にアプリケーションにAmazon S3バケットからアクセスキーを取得させます。
B）IAMロールを使用してアプリケーションのAmazon EC2インスタンスを起動します。
C）アプリケーションのソースコード内のアクセスキーを暗号化します。
D）インスタンスをActive Directoryドメインに登録し、AD認証を使用します。
```

→回答：B

- EC2のIAMロール使用による他サービスへのアクセスに関する問題

  - EC2にIAMロールを付与することで、EC2上で稼働しているアプリケーションがAWSリソースにアクセスするための認証情報を保有させる必要がなくなる
  - IAMロールは一時的なセキュリティトークンに基づいているため、自動的にローテーションされる
  - 以前はEC2作成時の指定が必要であったが、現在はEC2作成後にIAMロールを付与することも可能
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)

  

```
4）一時的に矛盾する結果を返す可能性のある操作はどれですか？

A）最初に作成された後にAmazon S3からオブジェクトを取得する
B）挿入後にAmazon RDSデータベースから行を選択する
C）削除後にAmazon RDSデータベースから行を選択する
D）削除された後にAmazon S3からオブジェクトを取得する
```

→回答：D

- Amazon S3のデータ整合性モデルに関する問題

  - Amazon S3は、すべてのリージョンで PUT および DELETE の上書きについて結果整合性を提供している
    - 既存のオブジェクトを置換し、すぐにそのオブジェクトの読み取りを試みます。変更が完全に反映されるまで、Amazon S3 が古いデータを返すことがある。
    - 既存のオブジェクトを削除し、すぐにそのオブジェクトの読み取りを試みます。削除が完全に反映されるまで、Amazon S3 が削除済みのデータを返すことがある
  - 新しいオブジェクトの PUTS については 「書き込み後の読み込み」整合性を提供する
    - 新しいオブジェクトを Amazon S3に書き込み、すぐにバケット内のキーを一覧表示すると、変更が完全に反映されるまで、オブジェクトがリストに表示されないことがある
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/Introduction.html)

  

```
5）次の属性を使用してDynamoDBテーブルを作成しています。
・PurchaseOrderNumber（パーティションキー）
・CustomerID：顧客ID
・PurchaseDate：購入日
・TotalPurchaseValue：総購入金額
日付範囲内の特定の顧客の購入額の合計を計算するために、アプリケーショがテーブルからアイテムを取得する必要があります。
テーブルに追加する必要があるセカンダリインデックスは何ですか?

A）CustomerIDのパーティションキーとPurchaseDateのソートキーを持つローカルセカンダリインデックス。 TotalPurchaseValue属性を射影します。
B）パーティションキーがPurchaseDateでソートキーがCustomerIDのローカル副次索引。 TotalPurchaseValue属性を射影します。
C）CustomerIDのパーティションキーとPurchaseDateのソートキーを持つグローバルセカンダリインデックス。 TotalPurchaseValue属性を射影します。
D）パーティションキーがPurchaseDateでソートキーがCustomerIDのグローバルセカンダリインデックス。 TotalPurchaseValue属性を射影します。
```

→回答：C

- Amazon DynamoDBのセカンダリインデックスに関する問題
  - 対象の顧客の日付範囲指定を行うためには、CustomerIDをパーティションキー、PurchaseDateをソートキーとする必要がある
    - パーティションキー・・・ハッシュ属性、パーティション (DynamoDB 内部の物理ストレージ)を特定するキー、DynamoDB が内部のハッシュ関数を使用しパーティションキーの値に基づいてパーティション間でデータ項目を均等に分散する
    - ソートキー・・・範囲属性、ソートキー値で並べ替えられた順にDynamoDB が同じパーティションキーを持つ項目どうしを物理的に近くに保存される
  - グローバルセカンダリインデックス
    - ベーステーブルと異なるパーティションキーとソートキーを持つインデックス
    - グローバルセカンダリインデックスは、そのインデックスのクエリはすべてのパーティションにわたって、ベーステーブルのすべてのデータを対象に実行できるので「グローバル」と見なされる
  - ローカルセカンダリインデックス
    - ベーステーブルと同じパーティションキーと、異なるソートキーを持つインデックス
    - local secondary index は、local secondary index のすべてのパーティションの範囲が、同じパーティションキーの値を持つベーステーブルパーティションに限定されるという意味で「ローカル」となる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SecondaryIndexes.html)



```
6）CloudFormationテンプレートには次のマッピングセクションがあります。
"Mappings"：{
   "RegionMap"：{
     "us-east-1"：{"32"： "ami-6411e20d"}、
     "us-west-1"：{"32"： "ami-c9c7978c"}
　　}
}
us-east-1でスタックが起動されたときにどのJSONスニペットが値「ami-6411e20d」をもたらすのでしょうか。

A）{"Fn :: FindInMap"：["Mappings"、{"RegionMap"：["us-east-1"、 "us-west-1"]}、 "32"]}
B）{"Fn :: FindInMap"：["Mappings"、{"Ref"： "AWS :: Region"}、 "32"]}
C）{"Fn :: FindInMap"：["RegionMap"、{"Ref"： "AWS :: Region"}、 "32"]}
D）{"Fn :: FindInMap"：["RegionMap"、{"RegionMap"： "AWS :: Region"}、 "32"]}
```

→回答：C

* AWS CloudFormationテンプレートのMappingsセクションに関する問題
  * 任意のMappingsセクションでは、キーと名前付きの一連の値とが対応付けられる
  * マップ内の値を取得するには「Fn::FindInMap」組み込み関数を使用する
  * 構文「{ "Fn::FindInMap" : [ "*MapName*", "*TopLevelKey*", "*SecondLevelKey*"] }」
  * [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html)



```
7）WebアプリケーションはDynamoDBテーブルからアイテムを読み取り、属性を変更してから、そのアイテムをテーブルに書き戻します。
あるプロセスが別のプロセスからの同時変更を上書きしないようにする必要があります。
並行性をどのようにして確保できますか？

A）条件付き書き込みを使用して、楽観的同時実行を実装します。
B）条件付き書き込みを使用して、悲観的並行性を実装します。
C）読み込み時にアイテムをロックすることで楽観的同時実行を実装する。
D）読み込み時にアイテムをロックすることで、悲観的な並行性を実装します。
```

→回答：A

- Amazon DynamoDBのロックに関する問題
  - DynamoDBでロックを実現するには、更新時にバージョンをチェックする楽観的オプティミスティック制御となる
  - 一般的なRDBで使用されるレコード取得時にロックするペシミスティック(悲観的)制御は出来ない
  - 観的オプティミスティック制御は、値が変更されていないことを確認するために保存時に値をチェックする
  - 悲観的同時性は、データベース内の項目または行をロックすることによって値が変更されるのを防ぐ
  - DynamoDBはアイテムのロックをサポートしていないため、条件付き書き込みは楽観的同時実行の実装に最適となる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)



```
8）あなたのアプリケーションはあなたのすべてのパートナーに配信されなければならないイベントを引き起こします。
正確なパートナーリストは絶えず変化しています。
一部のパートナーは高可用性エンドポイントを実行し、他のパートナーのエンドポイントは毎晩数時間しかオンラインになっていません。
あなたのアプリケーションはミッションクリティカルであり、あなたのパートナーとのコミュニケーションはその動作に遅れを導入してはいけません。
あるパートナーへのイベントの配信が遅れても、他のパートナーへの配信を遅らせることはできません。
これをコーディングするための適切な方法は何ですか？

A）各パートナーにメッセージを配信するためにAmazon SWFタスクを実装します。
Amazon SWFワークフローの実行を開始します。

B）イベントをAmazon SNSメッセージとして送信します。パートナーにHTTPを作成するように指示します。
HTTPエンドポイントをAmazon SNSトピックにサブスクライブします。

C）パートナーごとに1つのSQSキューを作成します。キューを繰り返し、それぞれにイベントを書き込みます。
パートナーは自分のキューからメッセージを取得します。

D）イベントをAmazon SNSメッセージとして送信します。 Amazon SNSトピックを購読するパートナーごとに1つのSQSキューを作成します。パートナーは自分のキューからメッセージを取得します。
```

→回答：D

* Amazon SNSとSQSに関する問題
  * パートナーは絶えず変化する
    * Amazon SNSを使用し、パートナーにサブスクライブしてもらう
  * パートナーは常にオンラインではない
    * Amazon SQSを使用し、パートナーから取得してもらう
* Amazon SWFは絶えず変化するパートナーリストへの対応は難しい



```
9）リージョン内のCloudFormationスタック数のアカウント制限に達しました。
どのようにあなたはあなたの制限を増やすのですか

A）AWS Command Line Interfaceを使用してください。
B）件名が「CloudFormation」のEメールをlimits@amazon.comに送信します。
C）AWSマネジメントコンソールのサポートセンターを使用してください。
D）すべてのサービス制限は固定されており、増やすことはできません。
```

→回答：C

* CloudFormationの制限緩和に関する問題
  - AWSの各サービスには、制限緩和可能なソフトリミットと制限緩和不可のハードリミットの２種類の制限が存在している
  - １リージョンあたりのCloudFormationのスタック数はデフォルトでは２００スタックまでとなるが、制限緩和可能なソフトリミット
  - AWSコンソールからサポート宛に上限緩和申請を行うことで制限の緩和をしてもらえる
  - [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html)



```
10）1つのAmazon VPCに3層のWebアプリケーション（Web、アプリ、データ）があります。
Web層とアプリケーション層はそれぞれ2つのアベイラビリティーゾーンにまたがっており、別々のサブネット内にあり、ELB Classicロードバランサーの背後にあります。
データ層は、データベースサブネット内のMulti-AZ Amazon RDS MySQLデータベースインスタンスです。
アプリケーション層インスタンスからデータベース層を呼び出すと、タイムアウトエラーが発生します。
これは何の原因と考えられますか？

A）アプリ層インスタンスに関連付けられているIAMロールには、MySQLデータベースに対する権限がありません。
B）Amazon RDSインスタンスのセキュリティグループは、アプリからのポート3306でのトラフィックを許可していない
C）Amazon RDSデータベースインスタンスにパブリックIPアドレスがありません。
D）Amazon VPCのアプリ層とデータベース層の間にルートが定義されていません。
```

→回答：B

* セキュリティグループはデフォルトですべてのネットワークトラフィックをブロックするため、セキュリティグループが正しく設定されていないと、タイムアウトエラーが発生する可能性がある
* IAMロールでMySQLに対する権限は管理できない、権限はMySQLの設定により管理される
* Amazon VPC内のすべてのサブネットには、他のすべてのサブネットへのルートがデフォルトで設定される
*  Amazon VPC内の内部トラフィックはパブリックIPアドレスを必要としない

## さいごに

* 英語版の試験ガイドにも練習問題は掲載されていないようです
* AWSトレーニングにDeveloper Asociateのデジタルトレーニングは無料提供されていますので、今後の試験はそちらで練習問題を提供していく方向性なのかも知れません（ただし日本語版は未提供）
* 今回の練習問題の内容から判断すると、他のアソシエイト試験と比べると、各サービスの基本的な機能とユースケースを理解することで対策としては十分のような気がします
* AWS認定デベロッパーアソシエイト試験対策の一貫として、各サービスの基本的な機能を整理していきたいと思います