はじめに
AWS認定デベロッパーアソシエイト取得に向けた学習ログです。
学習期間
2020年6月29日~7月5日
学習ログ
要件達成のために利用するAWSサービス
- 要件
- 美術館商用SNSアプリケーション
- 収入源は広告
- 広告をクリックした回数データを収集する
- 多数のユーザが利用しても問題ないようなDB実装
- 実現方法
- DBとしてDyamoDBを使用
- カウンタの
UpdateItem
オペレーション用のアトミックカウンタを実装する
- 参考 docs.aws.amazon.com
ECSのタスク配置戦略
- ECSタスク配置戦略とは
- タスク配置、タスク終了でインスタンスを選択するためのアルゴリズム
- 参考 docs.aws.amazon.com
- 要件
- ECSクラスターを使用
- 使用中のインスタンス数を最小限に抑える
- コスト効率を向上させたい
- 実現方法
binpack
タスク配置戦略を使用する- 未使用のCPU、メモリを最小にする
- 使用中のコンテナインスタンス数を最小限にする
Elastic Beanstalkで最も時間がかからないデプロイ方法
- 解決方法
All at Once
- 1度に全て
- 新しいバージョンをすべてのインスタンスに同時に展開する
- 他のデプロイ方法
Rolling
- ローリングデプロイ
- 部分的に古いバージョンが残るタイミングがある
Rolling with additional batch
- 新しいバージョンをバッチで展開
Immutable
- 変更不可能な更新を実行
- 古いバージョンを起動しているインスタンスと平行して、別のAuto Scallingグループで起動
- 新しいインスタンスがヘルスチェックをパスしなかった場合、元のインスタンスを残す
- ブルーグリーンデプロイメントのイメージ。
Codeシリーズを使用する際に考慮するポイント
- 要件
- CI/CD環境を整備
- Cloudとオンプレミスのハイブリッド環境を使用中
- CodePipelineで両方にアプリを展開したい
- 実現方法
- CodeDeployを使う
- EC2とオンプレミスの両方にアプリをデプロイできる
- CodeDeployを使う
AWS Organizationsによるアクセス許可の設定方法
- 要件
- 開発部門
- アプリA用AWSアカウント
- アプリBへの接続が必要
- アプリB用AWSアカウント
- アプリA用AWSアカウント
- 開発部門
- 実現方法
- アプリAアカウントのメンバーに、アプリB環境のリソースへのクロスアカウントアクセスを許可する
最適なAPI Gateway統合タイプ
- 要件
- Elastic Beanstalkを使用
- クライアントが送信したメソッドRequestをバックエンドに渡す
- メソッド確立後はクライアントとバックエンドがHTTPエンドポイントで直接対話する
- 実現方法
HTTP_PROXY統合
- 参考 docs.aws.amazon.com
EC2+DynamoDBのソリューション
- 要件
- 訪問者を追跡して最適な広告を表示する
- ユーザー行動データはDynamoDBに蓄積
- 最小構成で実現したい
- 実現方法
- アトミックカウンターを使用する
UpdateItem
を使用する- 同一ユーザからのアクセスをカウントすることができる
KMSによるS3サーバサイド暗号化
- 要件
- サーバサイド暗号化しているS3バケットにアップロードするバッチを作りたい
- 実現方法
- リクエストヘッダーに、
x-amz-server_-ide-encription
ヘッダーを指定する
- リクエストヘッダーに、
Kinesisのデータ重複対策
- 要件
Putrecord api
を使って、Kimesis data streamsにデータを送信- 2回送信してしまい、データ重複エラーが出た
- 対策
- 主キーを設定する
AWS SAMをcloud formationで使用する
- 実現方法
Transform
セクションで、AWS SAMのバージョンを指定する
Transform: AWS::Serverless-2016-10-31 Resources: MyServerlessFunctionLogicalID: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: 's3://testBucket/mySourceCode.zip'
- 参考情報 docs.aws.amazon.com
サーバレスアプリケーションを適切に展開する方法
- 構成要素
- Node.jsで構築されたサーバレスアプリケーション
- 単一のスタックで構成
- Lambda
- API Gateway
- DynamoDB
- 実現方法
- Node.jsのカスタムランタイムを含む新しいレイヤーを作成
- そのランタイムを使用するLambda関数を起動する
- 参考情報 docs.aws.amazon.com docs.aws.amazon.com
DynamoDBでテーブルの単一パーティションに対して、複数のインデックスを使用したクエリを実行したい
- 実現方法
- ローカルセカンダリインデックスを使う
- ローカルセカンダリインデックスとは
- プライマリキー以外の検索を行う際に必要
- プライマリキーの代わりに代替えのソートキーを使用する
- 同じパーティション内では、暗黙のインデックスで整理されている
- これに加えて別の規則でインデックスを構築すること
- テーブル作成前にローカルセカンダリインデックスを作成する必要がある
- 最大5つ作成できる
- プライマリキー以外の検索を行う際に必要
- イメージ
- プライマリインデックス
- 同一のハッシュキーのデータに対して、さらに並べ替え用のインデックスを貼るイメージか。
- テーブル全体ではなく、特定のハッシュキーが範囲となるからローカル。
- プライマリインデックスとは別に、レンジキーを追加できる
- だからセカンダリ
- 参考情報
www.slideshare.net
DynamoDBで、非キー属性のクエリを高速化するためにインデックスを貼りたい
- 実現方法
- グローバルセカンダリインデックスを使う
- グローバルセカンダリインデックスとは
- テーブルに対して自由に追加できるインデックス
- すべてのパーティションで、テーブル全体に対してクエリを実行できる
- だからグローバル
- プライマリインデックスとは別に、ハッシュキー、レンジキーを追加できる
- だからセカンダリ
- イメージ