AWS認定デベロッパーアソシエイトを受験した時の話

## この記事の概要
2019/08/15に
**AWS認定デベロッパーアソシエイト**
(AWS Certified Developer - Associate (DVA))
を受験したので、その時の記録

## 試験の概要

![aws_dev.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/a76c6b35-1b20-e9e1-9fbf-b8262a352294.png)

アソシエイトレベル(下から2番目)の**開発者向け**試験です。

「AWS を使用するクラウドベースの**アプリケーションの開発、デプロイ、デバッグ**について習熟していることを認定します。最低でも 1 種類の高水準プログラミング言語について深い知識を持ち、AWS ベースの**アプリケーション開発および保守**に関して**1年以上の実務経験のある方**が対象です。」
AWS公式より引用：[引用元](https://aws.amazon.com/jp/certification/?nav=tc&loc=3)

**◼︎ 試験要項**
問題数　　：65問
試験時間　：130分
受験料　　：¥15,000(税別)
合格ライン：100~1000点中720点(約69%)
受験資格　：なし

**◼︎ 出題範囲**

| 分野 | 出題割合 |
|:--|:--:|
| 分野 1: 展開 | 22% |
| 分野 2: セキュリティ | 26% |
| 分野 3: AWS サービスを使用した開発 | 30% |
| 分野 4: リファクタリング | 10% |
| 分野 5: モニタリングとトラブルシューティング | 12% |

**2019/08時点の最新バージョン(Ver.1.3)**のものです。
バージョンアップで範囲等は変更されるので、受験時は公式で確認してください。
[AWS 認定デベロッパー – アソシエイト | AWS](https://aws.amazon.com/jp/certification/certified-developer-associate/)

## 勉強開始前の状態
AWSで動いているアプリ開発の業務経験1年以上、３ヶ月ほど前にソリューションアーキテクト - アソシエイトは取得済み。
DynamoDB, S3, Lambda, SQSの利用経験あり、SDKによる開発がメイン。

:point_down: AWSソリューションアーキテクトを受験した時の話
https://qiita.com/aminosan000/items/24c6dff9532658a5c4d5

## 勉強に使ったもの

**1. AWS BlackBelt(サービス別資料)**
[AWSクラウドサービス活用資料集 | サービス別資料](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)
出題範囲の中で利用経験のないサービスの資料を利用。正直スライドだけだとわかりづらい部分もありますが、音声付きの動画は非常にわかりやすいのでおすすめ。

**2. オンライン練習問題(非公式)**
[AWS Certified Developer Associate | Whizlabs](https://www.whizlabs.com/aws-developer-associate/)
**日本語非対応 + 有料**と少しハードルは高いですが、模擬試験や本番試験とほぼ同じ問題も複数出てきたので、利用する価値はあるかと思います。
最新のバージョンの問題が**325問(65問×5パターン)**用意されています。
常時割引クーポンがあるようで、今回は40%OFFクーポン利用で**$11.97**とお手頃価格。
~~(購入時のクーポン欄に「FREEDOM」と入力)~~
**※2019/12追記**
上記クーポンコードは現在は利用不可
トップページ上部のクーポンコード、または「wizlab coupon」でググってみて割引率の高い方を購入時に入力
※支払いはPayPalが利用可能です。PayPalへのクレジットカード登録が必要ですが、日本でも広く使われる決済サービスなので安心です。
![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/d0059f80-91c8-cc0f-8f86-064917889522.png)
英語はあまり得意ではないので、Google翻訳で翻訳しながら日本語が怪しい部分は原文とあわせながら利用。

**3. AWS公式模擬試験**

**4. AWSアカウント**

前回のソリューションアーキテクト取得時は対策本を２冊購入しましたが、デベロッパーに関しては実用的な対策本は**出版されておらず**、問題集等もあまりない状態。

**※2019/12追記**
2019/6にアソシエイト3資格対策本が発売されました。
[AWS認定アソシエイト3資格対策~ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター~](https://amzn.to/2ZGdl4X)

なので今回は、まず公式の模試を受験し、難易度と傾向を図り、そこから苦手部分を補う形で勉強開始。
特にデプロイ周り**(CloudFormation, Codeシリーズ, Beanstalk等)**は業務でもノータッチ + SAAでもほぼ出てこなかったため、
**BlackBeltの資料**を一通り確認。**チュートリアル**を見ながら、触ってみる。

あとは、**オンライン問題集**をひたすら解く。

## 勉強時間
トータルで**20時間**ぐらい
問題集を解いてわからないところを調べる時間とチュートリアルをみながら操作する時間で半々程度

## 受験後
しっかり見直しして1時間ほど残して終了。出題形式的に時間は結構余裕があります。
**結果スコアは818**で合格、自信を持って提出した割にスコアは思ったより少し低かったです。

「最低でも 1 種類の高水準プログラミング言語について深い知識を持ち」とありますが、**プログラミングに関する問題やSDKの使い方は出てきませんでした。**
展開(デプロイ)は**CodeシリーズとSAM, CloudFormationが半々ぐらい？**とりあえず、どれも一度チュートリアルだけ触って構成ファイル名とかデプロイの流れを知っておくと良さそう。
セキュリティは**KMSの使い方とかIAMのロール・ポリシー・ユーザ・アクセスキーの使い分け**とか、
あとは**DynamoDBの読み取り効率化**と**X-Ray**が思ったより出た印象でした。

次はSysOpsアドミニストレーターか、ソリューションアーキテクト - Professionalですかね。
いずれにしろ少し先になると思います。

## 2020/5/11追記
SysOpsアソシエイトも受験しました。
:point_down: AWS認定SysOpsアドミニストレーターアソシエイトを受験した時の話
https://qiita.com/aminosan000/items/b1765260e8ad1435a366

## 勉強になったことメモ
試験のために勉強したことで、今後どこかで使えそうなことを忘れないようにメモ

#### Beanstalkのデプロイメントポリシー
 - All at Once：一括ですべてのサーバへ更新を適用
 - カナリア：2段階(それ以上の場合もあり)に分けてリリース、まずX%のサーバへのみ更新を適用し、その後残りすべてへ適用
 - Blue/Green：二つの環境を用意し、新環境葉と旧環境葉を交互に入れ替えていく、新環境で正常性を確認してから移行
 - 変更不可(Immutable)：更新時にまず新しい環境を構築して、移行後古い環境を削除
 - ローリング: サーバを少しずつ「LBから外して更新」「LBに戻す」を繰り返し、徐々に更新を適用していく。
 - 追加バッチとローリング：ローリングのLBから外す前に同数のサーバを追加することで、インスタンスの数を一定に保つ。  
    ※「追加バッチとローリング」以外はBeanstalkに限らずリリース方式として覚えておいたほうが良さそう

#### Code3兄弟
 - CodeCommit：Gitリポジトリのホスティングサービス、IAMで認証できる。
 - CodeBuild：ビルドサービス、CodeCommit, GitHub, S3からコードをDLしてmavenでjarをS3に出力とかできる。
 - CodeDeploy：デプロイサービス、S3からEC2とかECSとかにデプロイできる。

#### CodePipeline
  Code3兄弟を一括管理するサービス、Code3兄弟以外(EC2のJenkins)とかも使える。

#### Kinesis3兄弟
 - Kinesis Data Stream：標準的データストリーム。
 - Kinesis Data Firehose：S3などのデータストアへのストリームのロードに利用。
 - Kinesis Data Analytics：ストリームデータに直接SQLやJavaで処理し、分析を行える。

#### DynamoDBの並列スキャン
  サイズの大きいテーブルへのスキャンに有効。高速にスキャンできる。

#### API-Gatewayのリリース方式
  カナリアリリース機能がある

#### S3オブジェクトのハッシュプレフィックス
  オブジェクトキーの先頭にハッシュ値を追加することでランダムなキー名になり、負荷が分散される

##### 指数関数バックオフ
  LambdaやDynamoDBなどでスロットリングが発生する場合にアプリケーション側に指数関数バックオフを組み込むことが有効

#### X-Ray
 - ECSやEC2のX-Rayの有効化のためにはX-Rayデーモンのインストールが必要
 - 複数のサービスを含むシステムのボトルネックをみつけるなど、性能改善に役立つ

#### RDSのスロークエリログ
  指定した時間より長くかかったクエリを出力させる、SQLのパフォーマンスのトラブルシューティングに有効、デフォルトでは無効になっている。

#### DynamoDBのアイテムサイズ上限
  DynamoDBのアイテムサイズ上限は400KB、これを超える場合、DynamoDBには識別子のみ保存し、データはS3に保存することを検討する。(データの圧縮は推奨される恒久的解決策ではない)

#### AWS Secrets Manager
  認証情報等のシークレットを一元管理し、サービス間で共有できる。

#### CloudWatchの高解像度カスタムメトリクス
  CloudWatchの標準メトリクスの最大間隔は1分間、高解像度のカスタムメトリクスを利用すると最大10秒間隔のアラームを設定できる。

#### S3のマルチパートアップロード
  S3へアップロードするオブジェクトが100MBを超える場合、並列処理でアップロードを高速化するマルチパートアップロードの利用が推奨される。

#### DynamoDBのセカンダリインデックス(GSI, LSI)
 - グローバルセカンダリインデックス：テーブルに対し、パーティションキー+レンジキーだと効率の悪くなるクエリ(キー以外を条件にした検索等)を効率良くするために作成する明示的インデックス。全く別の属性をパーティションキー+レンジキーとして指定できる。
 - ローカルセカンダリインデックス：グローバル同様明示的に追加するインデックスだが、パーティションキーは変更できない。  
 ※セカンダリインデックスの更新時もキャパシティユニットを消費することに注意