AWS認定デベロッパーアソシエイト取得に向けた学習記録です。
個人的なメモとして試験勉強で気になったところをまとめています。
今回はDynamoDBとLambdaが多めです。
追記:AWS認定デベロッパーアソシエイトに合格しました。勉強方法など以下の記事で紹介しているので参考にしてください。
スポンサーリンク
目次
- 1 学習期間
- 2 学習記録
- 2.1 Lambdaを定期的に実行する方法
- 2.2 Lambda関数のアプリケーション処理としてリクエストを非同期に処理する方法
- 2.3 DynamoDBでアクセス増加に伴い書き込み時のデータ不整合を防ぐ手段
- 2.4 マルチリージョン構成のDynamoDBで全てのリージョンのテーブルの更新を追跡・保存する設定
- 2.5 DynamoDBストリームでストリームに書き込むデータの設定
- 2.6 ECSでコンテナインスタンスをグループ化してタスクを設定する機能
- 2.7 ACMが利用できないリージョンでSSL/TLS証明書を安全にインポートするために利用するべきAWSサービス
- 2.8 LambdaのデッドレターキューをSQSまたはSNSに送信するための設定
- 2.9 PCやモバイルなどのデバイス間でアプリケーションデータを同期するための新しいサービスについて
- 2.10 DynamoDBで各アイテムを1つずつデータ処理してパフォーマンスが低下している際の対策
- 2.11 AWS KMSでエンベロープ暗号化する方法
- 2.12 EC2インスタンスのCPU使用率を10秒間隔で取得する方法
- 2.13 RDSのバックアップの最大保持期間35日の制限を超えて自動バックアップする方法
- 2.14 SQSキューのメッセージを全部削除する方法
- 2.15 DynamoDBで特定のパーティションに大容量の読み書きトラフィックが送信され、スロットルエラーが発生している際のコスト最適化
- 3 まとめ
学習期間
- 2021/09/12 – 2021/09/15
学習記録
Lambdaを定期的に実行する方法
- CloudWatchイベントを利用してLambdaを定期的に実行するルールを作成する。
Lambda関数のアプリケーション処理としてリクエストを非同期に処理する方法
- Lambdaを直接呼び出して非同期処理をする場合はInvoke APIを使用し、
InvocationType
にEvent
を設定する。 - REST APIでのLambdaの非同期処理はAPI GatewayのLambdaカスタム統合で設定する。
- すべてのリクエストを非同期にする場合
- 統合リクエストのヘッダーに
X-Amz-Invocation-Type
ヘッダーを追加し、値としてEvent
を設定する。
- 統合リクエストのヘッダーに
- クライアントが非同期か同期か指定する場合
- メソッドリクエストに
InvocationType
ヘッダーを追加する。 - 統合リクエストのヘッダーに
X-Amz-Invocation-Type
ヘッダーを追加し、マッピング式method.request.header.InvocationType
を値に設定する。 - クライアントがリクエスト時に
InvocationType
ヘッダーに値を設定する。- 非同期処理:
Event
- 同期処理:
RequestResponse
- 非同期処理:
- メソッドリクエストに
- すべてのリクエストを非同期にする場合
DynamoDBでアクセス増加に伴い書き込み時のデータ不整合を防ぐ手段
- 同時アクセスによるデータの不整合を防ぐためバージョン番号によるオプティミスティックロックを設定する。
マルチリージョン構成のDynamoDBで全てのリージョンのテーブルの更新を追跡・保存する設定
- DynamoDBストリームに対してAmazon Kinesisアダプターを連携する。
DynamoDBストリームでストリームに書き込むデータの設定
- DynamoDBストリームを有効化した上で、
StreamViewType
にタイプを設定する StreamViewType
には以下を設定することができる。KEYS_ONLY
:変更されたアイテムのキー属性のみストリームに書き込む。NEW_IMAGE
:変更された後のアイテム全体をストリームに書き込む。OLD_IMAGE
:変更される前のアイテム全体をストリームに書き込む。NEW_AND_OLD_IMAGES
:新しいアイテムと古いアイテムの両方をストリームに書き込む。
ECSでコンテナインスタンスをグループ化してタスクを設定する機能
- クラスタークエリ言語でアベイラビリティーゾーン、インスタンスタイプ、カスタムメタデータなどの属性でコンテナインスタンスをグループ化する。
- グループを定義した後、グループに基づいてコンテナインスタンスのタスクを配置する。
ACMが利用できないリージョンでSSL/TLS証明書を安全にインポートするために利用するべきAWSサービス
- IAMをCertificate Manager として使用する。
- IAMはプライベートキーを安全に暗号化し、暗号化されたバージョンをIAM SSL証明書ストレージに保存することができる。
LambdaのデッドレターキューをSQSまたはSNSに送信するための設定
- SQSキューまたはSNSトピックのARNをLambdaの
DeadLetterConfig
パラメータとして指定する。
PCやモバイルなどのデバイス間でアプリケーションデータを同期するための新しいサービスについて
- AWS AppSyncまたはAmazon Cognito Syncを利用することで同期することが可能。
- 現在、アプリケーション関連のユーザーデータのデバイス間の同期するのにはAWS AppSyncが推奨されている。
DynamoDBで各アイテムを1つずつデータ処理してパフォーマンスが低下している際の対策
- DynamoDBのBatchオペレーションを利用することで、1つずつ行っていたしていたデータ処理をまとめて実施する。
BatchGetItem
- 1回あたりの取り出し可能最大数:100アイテム
- サイズ制限:合計16MB
BatchWriteItem
- 1回あたりの作成・削除可能最大数:25アイテム
- サイズ制限:合計16MB
AWS KMSでエンベロープ暗号化する方法
- KMSコンソール画面でマスターキーを生成する。
- マスターキーからデータキー(暗号化キー)を生成する
GenerateDataKey
API:データキーのプレーンテキストと暗号化されたデータキーを取得する。GenerateDataKeyWithoutPlaintext
API:暗号化されたデータキーのみ取得する。
- データキーを使って平文のデータを暗号化する。
- データキーを暗号化する。
- 暗号化済みのデータキーと暗号化済みのデータを保管する。
EC2インスタンスのCPU使用率を10秒間隔で取得する方法
- CloudWatchのカスタムメトリクスを発行する際にメトリクスの解像度を高解像度に定義する。
- 1秒、5秒、10秒、30秒、または60秒の倍数の期間でメトリクスを読み取り・取得が可能。
RDSのバックアップの最大保持期間35日の制限を超えて自動バックアップする方法
- CloudWatchでcronイベントを作成し、スナップショット機能をトリガーするAWS Lambdaでバックアップする処理を実装する。
SQSキューのメッセージを全部削除する方法
PurgeQueue
を利用する。- メッセージの削除処理には最大で60秒かかる。
DynamoDBで特定のパーティションに大容量の読み書きトラフィックが送信され、スロットルエラーが発生している際のコスト最適化
- 対応1:エラーの再試行する際に指数バックオフを実装する。
- クライアントアプリケーションで再試行をする際の待機時間を徐々に長くすることでリクエストの成功率を高める。
- ジッター (ランダム化された遅延) を使用することでリクエスト毎に待機時間を変えて衝突しないようにすることが可能。
- 対応2:I/Oリクエストを均等に分散するリファクタリングを実施する。
- カーディナリティの高いパーティションキーを使用する。
- メールアドレスや従業員番号などなるべく一意となるような値を属性を使用する。
- 複合属性を使用する。
- 複数の属性を組み合わせてユニークキーを構成するようにする。
- パーティションキーに乱数を追加する。
- 書き込みの多いユースケースの場合、事前に定義された範囲からパーティションキーに乱数を追加する。
- カーディナリティの高いパーティションキーを使用する。
まとめ
AWS認定デベロッパーアソシエイトの学習記録でした。
流石に座学ばかりやっていると飽きてくるので、今度の連休は実際にAWSを使ってみたいと思います。
スポンサーリンク
スポンサーリンク