はじめに
AWS認定デベロッパーアソシエイト取得に向けた学習ログです。
学習期間
2020年7月20日~7月26日
学習ログ
Fargeteで起動するDockerコンテナに対するX-Rayの設定方法
DynamoDBトランザクションの特徴
SQSのメッセージ重複排除
DockerコンテナでX-Rayデーモンを実行する
- X-Rayデーモン
- UDPポート2000でリッスンする
Lambdaの同時実行数の見積もり
- S3
- 1秒あたり10回のイベント
- Lambda
- データ処理平均は5秒
- Lambdaの同時実行数は、10回×5秒=50
たとえば、Lambda 関数の実行に平均 3 秒掛かり、Amazon S3 が 1 秒あたり 10 個のイベントを発行するとします。この場合、Lambda 関数の同時実行数は 30 です。(出典:AWS Lambda開発者ガイド)
https://oji-cloud.net/2019/07/08/post-2318/oji-cloud.net
Beanstalkの環境設定
- マニフェスト環境(env.yaml)
Lambda関数の呼び出しタイプ
- 非同期
InvocationType:Event
- 同期実行
InvocationType:RequestResponse
CodeCommitでリポジトリにアクセスするために必要な最小限権限
- Gitに対してプル、プッシュしたい
codecommit: GitPush
codecommit: GitPull
EC2 Fleetとは
- オンデマンドインスタンスとスポットインスタンスのグループのこと
EC2プレイスメントグループ
- インスタンスが立ち上がる場所を明示的に指定する考え方
- クラスター
- AZ内でまとめる
- 低レイテンシを実現できる
- AZ内でまとめる
- パーティション
- 複数の論理パーティションに分散
- Hadoopなど、大規模な分散ワークロードが実現できる
- 複数の論理パーティションに分散
- 分散
- クラスター
DynamoDBのオプティミスティックロック
- Optimistic(楽観的)ロック
- 更新・削除しているクライアント側の項目が、DynamoDBの項目と確実に同じになるための方法
- 他のユーザの書き込みによって上書きされないように保護する
DynamoDBストリームによる更新内容の追跡
- DynamoDBストリーム
Keys only
- 変更された項目のキー項目のみ
New image
- 変更後に表示される項目全体
Old image
- 変更前に表示されていた項目全体
New and old images
- 項目の新しいイメージと古いイメージの両方
- ストリームレコードを正しい順番で処理するには、
Kinesis Adapter
も一緒に使う
APIからMFA認証を使う
- GetSessionRole
- リクエストを作成するIAMユーザーと同じAWSリソースにアクセスする
- AssumeRole
- 異なるAWSアカウントへの呼び出し
ECSのタスク配置戦略
- タスクの配置、タスクの終了でインスタンスを選択するためのアルゴリズム
ECSのタスクグループ
- 一連の関連するタスクをグループ化できる docs.aws.amazon.com
ECSのクラスタークエリ言語
- オブジェクトをグループ化できる式
- 以下のような属性で、コンテナインスタンスをグループ化できる
- AZ
- インスタンスタイプ
- カスタムメタデータ
- 使用例
attribute:ecs.instance-type == t2.small attribute:ecs.availabitity-zone in [us-east-1a,us-east-1b] # service:productionグループのタスクをホストするインスタンスを指定 task:group == service:production # databaseグループのタスクをホストしないインスタンスを指定 not(task:group == database) # 実行中のタスクの数 runningTasksCount == 1
Cognito ID
- ユーザの一意のIDを作成し、IDプロバイダーで連携させることができる
- Apple
- など
- IDプールを使用すると、権限が制限された一時的なAWS認証情報を取得して、他のAWSサービスにアクセスできる
ACMが使用できない場合にSSL/TLS証明書をインポートする方法
- Systems Managerを使用してインストールする?
SQSの可視性タイムアウト
- デフォルト30秒
- 同一ユーザが同じキューを送信、受信できないように制御する
Elastic BeanStalkのデプロイ方法
All at One
- 一度にすべてデプロイ
- デプロイの間、サービス停止状態になる
- 一度にすべてデプロイ
Rolling
- ローリング
- 流れ
- EC2インスタンスをバッチに分割
- ここで言うバッチとは、batchではなく、1まとまり、という意味合い
- 10インスタンス
- バッチサイズ30%
- バッチ=3インスタンス(切り捨て)
- ここで言うバッチとは、batchではなく、1まとまり、という意味合い
- バッチサイズ分のインスタンスがLBからデタッチ+デプロイ
- ヘルスチェックが通れば、そのバッチがLBに再度アタッチされる
- すべてのインスタンスがデプロイされるまで、繰り返し
- LBからデタッチ、デプロイ、ヘルスチェック
- デメリット
- 最初にバッチサイズ分デタッチされるので、リクエストを受け付けるインスタンスの数が減る
- ローリングデプロイ中は、新旧のバージョンが混在する
Rolling with additional batch
- 追加バッチによるローリング
- バッチに新しいバージョンをデプロイ
- デプロイ中に総容量を維持するため、インスタンスの新しいバッチを起動する
- ???
- 特徴
- 最初にバッチサイズ分のインスタンスを追加する
- Rollingの欠点を解消
- リクエストを受け付けるインスタンス数は減らない
- 最初にバッチサイズ分のインスタンスを追加する
- 流れ
- バッチサイズ分のインスタンスを追加作成+デプロイ
- バッチサイズ分のインスタンスがLBからデタッチ+デプロイ
- ヘルスチェックが通れば、そのバッチがLBに再度アタッチされる
- すべてのインスタンスがデプロイされるまで、繰り返し
- LBからのデタッチ、デプロイ、ヘルスチェック
- 追加作成分のインスタンスをshutdownする
- デメリット
- デプロイ中は、新旧のバージョンが混在する
- 追加バッチによるローリング
Immutable
- 変更不可のデプロイ
- 既存のインスタンスでアプリケーションの古いバージョンを実行しながら、新規にインスタンスのフルセットでAuto Scalingグループで新しいバージョンを実行する
Traffic spliting
- トラフィック分割
- アプリの新しいバージョンを新しいグループにデプロイ
- 受信トラフィックをアプリの新旧バージョンで一時的に分割する
- トラフィック分割
Cognito Syncによるユーザデータの同期
- Cognitoの役割
- アイデンティティの管理と認可
Cognito
- データ同期
Cognito Sync
- 非同期通信
- アイデンティティの管理と認可
- Cognito Syncの特徴
- オフライン動作
- クライアントライブラリは、ローカルにデータをキャッシュする
- アプリはデバイスの接続状態に関わらず、データを読み書きできる
- つまり、オフラインでも動く
- 同期処理
- Cloudへのデータ保存と同期を行う
- アプリ関連のユーザデータのデバイス間同期を行う
- モバイル端末と、ウェブ間でユーザプロファイルデータを同期できる
- オフライン動作
https://image.slidesharecdn.com/20150928aws-blackbelt-cognito-150928041658-lva1-app6892/95/aws-black-belt-tech-2015-amazon-cognito-30-638.jpg?cb=1443413862image.slidesharecdn.com
KMSのデフォルト暗号化があるS3バケットにアップロードするとAccess Deniedエラーが出る原因
- KMSの権限が足りないため
- 対処法
- 以下2つを更新する
- IAMポリシー
kms:Decrypt
アクションのアクセス許可を追加
- KMSキーポリシー
kms:GenerateDataKey
アクションのアクセス許可を追加
- IAMポリシー
- 以下2つを更新する
KMSのエンベロープ暗号化
- envelope
- 封筒
- 封書
- 封入
- 以下2つを行う手法
- データキーでプレーンテキストを暗号化
- データキーとは、大量のデータや、他のデータ暗号化キーを暗号化するためのキー
- データキーを別のキーで暗号化
- データキーの生成は、
GenerateDataKey
APIで実施する
- データキーでプレーンテキストを暗号化
- マスターキーを安全に保管して管理する
https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/kms-dg.pdfdocs.aws.amazon.com
SQSキューの暗号化
- SQSは、サーバサイド暗号化(SSE)に対応している
- KMSで管理されているキーを使って、キュー内のメッセージを保護する
AWS OpsWorks
- ChefやPuppetを使って運用を自動化する
- CloudFormationとの違いは、対象領域
- EC2
- EBS
- EIP
- CloudWatch
- アプリケーション志向のAWSリソースに限られる
CodeCommitとSNSの連携
- CodeCommitのリポジトリトリガー
- SNSから通知できるようになる
RDSの自動バックアップ期間
- デフォルトは7日間
- 0日~35日まで変更可能
- 36日以上保持したい場合は、Lambda等でスナップショットを取る
DynamoDBの読み書きエラーに対するアプローチ
- エラーの再試行と、指数バックオフ(Exponential Backoff)を実装する
- リトライ間隔を指数関数的に増加させる
- 1秒後
- 2秒後
- 4秒後
- 8秒後・・・
- リトライ間隔を指数関数的に増加させる
- I/Oリクエストを均等に分散するリファクタリングを実施する