AWS Developer Associate 出題分野と関連サービス概要

## 目的
試験の出題範囲と関わるサービス概要をふんわり把握する
そもそも触ったことのないサービスや自身の理解が薄いサービスを発見する
それらを試験対策の目安にする

Sysops編はこちら
[AWS SysOps Administrator Associate 出題分野と関連サービス概要](https://qiita.com/ooooouchi/items/1e971b729ddfc669376d)

Sysops合格期はこちら
[【AWS SOA】AWS 認定 SysOps アドミニストレーター – アソシエイト試験に合格しました！](https://www.ooooouchi.info/entry/2020/06/10/083000)

## 出題範囲

### 分野と出題比率
|分野       |       出題の比率|
|:-----------------|------------------:|
|デプロイ            |              22%|
| セキュリティ  |            26%|
| AWSサービスを使用した開発          |              30% |
| リファクタリング               |                10% |
| モニタリングとトラブルシューティング |             12% |

アプリケーション開発に関する分野が出題される
主にサーバー レスアプリケーションの経験、知識が問われる
CI/CDやNoSqlなどの問題はAWS以外のサービスでの経験があると非常に有利

## 各分野で理解しなければならないこと

### デプロイ
- Code兄弟を使用してCI/CDのパイプライン、プロセスを構築してAWSにデプロイする
- Elastic Beanstalk を使用してアプリケーションをデプロイする
- デプロイ用のパッケージを準備する
- サーバー レスアプリケーションをデプロイする

主にCode兄弟(Commit、Build、Deploy、Pipeline)の理解度が試される分野  
 
#### AWS CodeCommit

- プライベートGitリポジトリをホストするマネージドサービス
- 独自のソースコントロールシステムを稼働させる必要がなくなる
- 既存のGitツールとシームレスに動作

#### AWS CodeBuild

- いわゆるビルドサーバー
- ソースコードをコンパイル、テストを実行し、パッケージ化できる
- ビルドサーバーのプロビジョニング、管理、スケーリングが不要になる
- 複数のビルドを同時に処理できる

#### AWS CodeDeploy

- 任意のインスタンスへのデプロイを自動化できる
  - EC2、Fargate、Lambda、オンプレミスサーバなど
- デプロイ中のダウンタイムを防げるメリットがある

#### AWS CodePipeline

- フルマネージド型のCDサービス
- アプリケーションの更新プロセスを自動化できる
- コードが変更される度にビルド、テスト、デプロイを行う
- GitHubなどのサードパーティ製のサービスと簡単に統合できる

#### Elastic Beanstalk

- デプロイに関する設定を自動的に処理することができる
- コードの更新に関する処理も行うことができる
インフラの詳細なデプロイを行えるCloudFormationとの差別点となる

#### OpsWorks

- 構成管理ツールを利用したデプロイメント、プロビジョニングを行うことができる
- OpsWorksスタック、Chef、Puppetを使用することができる
- 問題が発生した場合、スタックが自動的に修復される

オンプレでChefやPuppetを使用している場合は、管理サーバー をAWSに移行すると良い

#### CloudFormation

IaC（Infrastructure as Code）

- テンプレートファイルにインフラを定義することができる
- テンプレートに基づいてスタックを作成、更新、削除することができる
- スタック作成後、手動で変更していないリソースのみ更新、削除することができる

#### AWS SAM(サーバー レスアプリケーションモデル)
- サーバー レスに最適化された AWS CloudFormationの拡張機能
- CloudFormationでサポートしている全てのものをサポート

#### AWS Lambda

- サーバーのプロビジョニングや管理を行わずにコードを実行できる
- コードが実行された時間単位での課金


#### スケーラブルで可用性の高いアプリケーションをデプロイする
- 複数のAZ、複数のリージョン
- ヘルスチェック、フェイルオーバー
- ステートレス、セッションはキャッシュサーバー かDBに保存

目的を達成するためにどのサービスが役に立つかを理解する
<b>例：高可用性とスケーラブルな構成
→Auto Scaling</b>

### セキュリティ

- AWSに対して認証された呼び出しを行う
- AWSを使用して暗号化を実装する
- アプリケーションの認証と認可を実装する

 AWSにおける責任共有モデルについて理解しておく

#### Amazon VPC

- 仮想ネットワークの論理的に分離された一部
- セキュリティ要件を満たすための設計、設定を理解する
    - サブネット
    - ネットワークACL
    - ルートテーブル
    - セキュリティグループ

#### S3

- S3が管理するキーまたは、個人が用意したキーを使用してサーバー 側の暗号化を利用できる
  - SSE-S3
  - SSE-KMS
  - SSE-C
- S3に保存する前にデータを暗号化することもできる（クライアント側暗号化）
- Glacierはデフォルトでデータを暗号化する

#### IAM

- IAMユーザー
- IAMグループ
- IAMロール
- IAMポリシー

#### AWS STS（Security Tok en Service）
外部のIDプロパイダーで信頼されたユーザーなどに対し、一時的な認証情報を提供する

- 外部IDを使用してIDフェデレーションをすることができる
  - WebIDフェデレーション
    - Amazon Cognito
    - Login With Amazon
    - Facebook
    - Google
  - SAML2.0ベースのフェデレーション
    - Active Direvtory
    - LDAPS

###  AWSサービスを使用した開発

- サーバー レスアプリケーションのコードを記述する
- アプリケーション設計を実装する
- API、SDK、CLIを使用してAWSと連携するコードを記述する

#### S3

- バケット：レイテンシー、コスト、規制要件に基づいてリージョン を選択する
- ACLを使用し、オブジェクトレベルまたはバケットレベルでアクセス許可を付与する

#### Amazon DynamoDB 

- フルマネージド NoSQLデータベース
- データ整合性モデルを選択できる
- 読み込みキャパシティユニットと書き込みキャパシティユニットに計算方法を理解する

#### Amazon SNS 
 
- 通知サービス
- トピックからサブスクライバーへと通知を配信する

[S3 put時に Amazon SNSを使用してメールを送信する](https://www.ooooouchi.info/entry/2020/05/25/080000)

#### Amazon SQS 

- キュー送信サービス
- FIFOキューはメッセージの順序つけ、少なくとも1回の配信をサポートする
- メッセージの保持期間を指定できる

#### Step Functions

- ワークフローのステートを制御することができる

#### API Gateway

- EC2、Lambdaを使用するバックエンドシステムのAPIを作成できる

#### CloudFront

- エッジロケーションを使用してコンテンツを素早く配信できる

#### Elasti Cache

- memcache、redisを使用できるキャッシュサービス

#### Amazon ECS

- コンテナ管理サービス


#### AWS Fargate

- コンテナ向けサーバー レスコンピューティングエンジン
- サーバー のプロビジョンと管理が不要

#### AWS EKS

- フルマネージド型のKubanetesサービス
- オンデマンドかつダウンタイムがゼロのアップグレードとパッチ適用が提供される

### リファクタリング

- AWSの機能を最大限に活用できるようアプリケーションを最適化する
- 既存のアプリケーションコードを移行してAWSで実行する
- 環境を自動化し、スケーラビリティを強化する
- サーバー ではなくサービスを設計する
- 単一障害点をなくす
- キャッシュを使用する

### モニタリング
- モニタリング可能なコードを記述する
- テストまたは本番環境で見つかった障害の根本原因の分析を実行する

#### Amazon CloudWatch
- AWSリソースの使用率のモニタリングができる

[Amazon CloudWatch を使用してEC2のCPU使用率が高い時に通知する](https://www.ooooouchi.info/entry/2020/06/05/080000)

#### Amazon CloudWatch Logs
- EC2、CloudTrail、Route53などのログ監視、保存、アクセスを行うことができる
  
#### AWS CloudTrail
- AWSのAPI操作ログを保存、アクセスを行うことができる
- 詳細な分析を必要とする問題の解決に役立つ

#### AWS X-Ray
- 本番環境の分散アプリケーションを分析してデバッグすることができる

## 推奨ホワイトペーパー
[AWS セキュリティのベストプラクティス](https://d1.awsstatic.com/whitepapers/ja_JP/Security/AWS_Security_Best_Practices.pdf)
[AWS Well-Architected フレームワーク](https://d0.awsstatic.com/whitepapers/architecture/AWS_Well-Architected_Framework.pdf)
[クラウド向けのアーキテクチャの設計: AWS のベストプラクティス](https://d1.awsstatic.com/whitepapers/AWS_Cloud_Best_Practices.pdf)
[ AWS での継続的インテグレーションと継続的デリバリーの実践: DevOps によるソフトウェアデリバリーの高速化](https://d1.awsstatic.com/whitepapers/DevOps/practicing-continuous-integration-continuous-delivery-on-AWS.pdf)
[AWS におけるマイクロサービス](https://d1.awsstatic.com/whitepapers/microservices-on-aws.pdf)
[AWS Lambda を使用したサーバーレスアーキテクチャ](https://d1.awsstatic.com/whitepapers/serverless-architectures-with-aws-lambda.pdf)
[サーバーレスアーキテクチャによるエンタープライズのエコノミクスの最適化](https://d1.awsstatic.com/whitepapers/optimizing-enterprise-economics-serverless-architectures.pdf)
[ AWS でのコンテナ化されたマイクロサービスの運用](https://d1.awsstatic.com/whitepapers/DevOps/running-containerized-microservices-on-aws.pdf)
[AWS でのブルー/グリーンデプロイ](https://d1.awsstatic.com/whitepapers/AWS_Blue_Green_Deployments.pdf)

## 最後に

詳細や練習問題は公式のデジタルトレーニングでの確認をおすすめします。
出題される概念、問題の解き方など非常に有用なインプットを行えます。
[Exam Readiness: AWS Certified Developer – Associate (Digital)](https://www.aws.training/Details/Curriculum?id=19185)