AWS Solution Architect Associateへの道〜第９夜

# サービス選ぶ系

Q1. ECS + DynamoDB構成のアプリケーションがある。DynamoDBへの新しいエントリーがあった場合に、Lambdaのトリガーが引かれるようにしたい。どうすれば良いか。

1. DynamoDB Streamsを有効にしてテーブルの動きをキャプチャし、Lambdaへのトリガーを張る
2. ECSクラスタがデータ処理を行うごとにSNSを利用してLambdaを起動する
3. SystemsManagerAutomationを利用してDynamoDBへの新しいエントリーを検知し、Lambdaを起動する
4. CloudWatchAlarmsを利用してDynamoDBへの新しいエントリーを検知してLambdaを起動する


A1. 1

- DynamoDBはLambdaと統合されており、DynamoDB Streamsを利用することで、テーブルの変化をトリガーに処理を起動することができる
- CloudWatchAlarmsはメトリクスを起因に起動はできるが、データの変化を参照はできない
- Lambdaを起動するためにSNSを設定する必要はない（できなくはない）
- SystemsManagerAutomationは一般的に、EC2や他のリソースでの共通のメンテナンスやデプロイタスクを簡素化するために使われ、データベースの変化を検知する機能はない

---

Q2. 世界中にユーザがいるオンライン証券取引システムがある。レイテンシを減らすために、ユーザートラフィックをユーザに最も近いapplication endpointに接続させる必要がある。そのためトラフィックを、AnycastIPを介して、ユーザに最も近いedge locationにルーティングしたい。また、DDoS攻撃を防ぐためにAWS Shieldも設置したい。どのサービスを利用すればよいか

1. AWS PrivateLink
2. CloudFront
3. Global Accelerator
4. AWS WAF

A2. 3

- Global Acceleratorはsingle or multipleなリージョンのアプリケーションエンドポイントに接続するための静的IPを提供する
- GAはユーザとアプリケーションのパスを最適化するためにAWS global networkを利用し、TCP,UDPトラフィックのパフォーマンスを改善する
- 常にアプリケーションエンドポイントのヘルスチェックを行い、unhealthyなものがあった場合、およそ1分以内にhealthyなエンドポイントにリダイレクトさせるようになる
- GAとCloudFrontは、いずれもAWS global networkと世界中のedge locationを利用しているが、それぞれは分離されたサービス
- CloudFrontはcachable(動画やビデオ)とdynamic(API acceleration and dynamic site delivery)どちらもパフォーマンスを向上させる
- GAはTCP,UDPパケットをひとつ以上のAWS Regionにプロキシすることで、幅広いアプリケーションの性能を向上させる
- GAはHTTPだけでなく、non-HTTP（ゲーム（UDP）、IoT（MQTT）、Voice over IPなど）の性能向上にも有効
- CloudFrontには、AnycastIPを用いてパケットを最も近いedge locationにルーティングさせる機能はない

---

Q3. オンプレのLightweight Directory Access Protocol(LDAP)をAWSに統合したい。現在使っているものはSAMLには対応していない。どのように統合すべきか？

1. LDAPクレデンシャルがアップデートされるたびにローテートされるIAM rolesを使う
2. オンプレでcustom identity broker アプリケーションを作成して、一時的なAWS credentialを利用するためにSTSを使う
3. LDAP identifiersとAWS credentialを参照するようなIAM policyを使う

A３. 2

- SAMLが使えないならcustom identity broker applicationを使って同様のことを実現しよう
- アプリケーションから一時的なAWS credentialをリクエストして、それをユーザに渡すことで一時的にAWSリソースにアクセスできるようにする
- AssumeRole or GetFederationTokenをアプリケーションからコールする
- AWSはAWS access key ID, secret access key, session tokenを渡す
- 手動でIAM roleをローテーションするのは最適解ではなく、SAML,STS,custom identity brokerを利用すべきなので1はNG
- 単純にIAMを使うだけではLDAPを統合できないので3はNG

---

Q４. とあるアプリケーションが監査ログを出力しており、セキュリティチームはアプリがそのログを5年間保持することを義務付けている。どのようにこれを実現するか？

1. Glacier Vault Lock
2. EBSに保存して毎月スナップショット
3. EFSに保存してNFSv4 file-locking mechanism
4. S3に保存して、MultiFactor Authentication Delete

A4. 1

[Amazon S3 Glacier のボールトロック](https://docs.aws.amazon.com/ja_jp/amazonglacier/latest/dev/vault-lock.html)

---

Q5. API GatewayとLambdaでRESTful APIを利用するアプリケーションがある。ユーザのリクエストをトレースして解析したい場合、どのサービスを利用すればよいか

1. X-Ray
2. CloudWatch
3. VPC flow logs
4. CloudTrail

A5. 1

- X-Rayはリクエストのend-to-endの情報を提供する
- API Gatewayは全てのエンドポイントタイプ（regional, edge-optimized, and private）でX-Rayをサポート
- APIのステージに対してX-Rayを有効化することができる
- FlowLogsはネットワークインターフェースを出入りするIPトラフィックをトレースする。（リクエストに関する情報もあるが、X-Rayの方が詳細が見れる）


Q6. オンプレミス環境上にあるWebAppsをAWSに移行したい。移行の際にダウンタイムをゼロにせよとの指示が出たため、まずは50%のトラフィックをAWS環境に振り分け、問題がなければ完全切り替えを行うことにした。この時に使えるAWSサービスは何か？２つ選択

1. NetworkLoadBalancer with Weighted Target Groups
2. ApplicationLoadBalancer with Weighted Target Groups
3. Route53 with Failover routing policy
4. Route53 with Weighted routing policy
5. AWS Global Accelerator

A6. 2,4

- ALBの加重ターゲットを使うと、トラフィックのルーティングに重み付け可能
- ひとつのALBでblue-green, canary, hybrid deploymentなど実現可能
- オンプレ、EC2、Lambdaなどを設定できる

- Route53 Weighted routing policyでも同様のことができる
- ひとつのドメイン（or サブドメイン）でトラフィックをそれぞれのリソースに分配可能