AWS認定 DVA試験対策勉強メモ
AWS Secrets Manager
DBの認証情報など各種機密情報を管理できるサービス。
キーのローテートなどもできるので、問題文にそういった要件が入っていたらこのサービスが正解の可能性高い。
AWS Systems Managerと似ているがこちらはキーのローテートはサービス単体では出来ずLambdaなどと組み合わせる必要がある。
ELB スティッキーセッションとElasticCacheの関係
スティッキーセッションはELBでの振り分け時にユーザーごとにアクセス先を固定する仕組み。
この機能によってアプリケーションをステートフルに扱える。
ただ問題点としてはAutoScalingを使いアプリケーションの負荷を均等に分散させようと設計しても、スケールアウト前にアクセスしていたユーザーは同じEC2にアクセスし続けるため負荷分散に繋がらない。
この解決策としてElasticCacheでセッション管理する方法がある。ElasticCacheを使う場合はスティッキーセッションは無効化していい。
Lambdaのデバック方法
SQSのデッドレターキューを使う。
問題のあるメッセージを分離して、デッドレターキューに送ることで処理が成功しない理由を調べることができる。
リレーショナルデータベースのOS権限が必要且つ高可用なアーキテクチャ設計
マルチAZ構成でEC2にインストールする。
RDSを選びがちだが、OS権限にはアクセスできないので注意する。
DynamoDBの書き込みキャパシティユニットの計算方法
1kbごとに1つ × レコード数 / 時間 = 書き込みキャパシティユニット数
またトランザクション書き込みリクエストの場合1kbごとに2つ
例
レコードサイズ | レコード数 | 時間 | トランザクション書き込み |
---|---|---|---|
1.5kb | 1000万 | 1時間 | × |
この場合
2 × 10000000 / 3600 = 5555.55555
レコードサイズ | レコード数 | 時間 | トランザクション書き込み |
---|---|---|---|
3kb | 1000万 | 1時間 | ○ |
この場合
6 × 10000000 / 3600 = 16666.6
AWS SDKでアクセスキーを使用するベストプラクティス
EC2にIAMロールを使用する場合、明示的にアクセスキーを取得する必要は無い。
頻繁にローテートされる一時的な認証情報が生成される。SDKとCLIは一時的な認証情報を自動的に取得できる。
ECSでは?
同じようにタスク定義でTaskRoleを指定すればいい(と思う)。ただしECSはTaskRoleとTask Execution Roleがある点に注意。
DynamoDB 読み込み(書き込み)の強力な整合性と結果整合性のスループットの違い
1 つの読み込みリクエスト単位は、最大サイズ 4 KB の項目について、1 回の強力な整合性のある読み込みリクエスト、あるいは 2 回の結果整合性のある読み込みを表します。
強力な整合性の方が多くのスループット容量を必要とする。
Lambda関数の更新コマンド
update-function-codeコマンドを使う
SQS キューから次のアプリケーションの処理の待機時間を短くする
ロングポーリングを使う。
ロングポーリングを使うことで空のレスポンスを減らし、メッセージが利用可能になり次第処理をすることが可能になる。
20秒間(最大値)で設定しておけば、無駄な空レスポンス取得を回避して待ち受けてくれるからコスト効率も良いし待機時間も短くなる(という理解をしているが合ってれだろうか。。)
CloudWatch 高解像度メトリクス
1 秒、5 秒、10 秒、30 秒、または 60 秒間隔で細かく詳細にメトリクスを監視できる。
そのため1分未満の監視間隔が必要な要件の場合は高解像度メトリクスを使用する。
Elastic Beanstalk 環境へのアプリケーションのデプロイ
新しいインスタンスへのデプロイになるのは、以下のデプロイ方法
- 変更不可(イミュータブル)
- トラフィック分割
- Blue/Green
DynamoDB のグローバルセカンダリインデックス
必要なプロジェクト属性を最小限に抑えて別のテーブルを作成できるため取得するデータ量を少なくできる。
CodeBuild
ビルド対象のソースとして使用できるもの
S3、CodeCommit、GitHub、Bitbucket
CodeDeploy
デプロイ仕様の定義
appspec.ymlで定義する。
Elastic Beanstalk
IAMポリシーでのアクセス制御
作成したEC2からS3にアクセスしたい場合は、適切なIAMポリシーを作り、IAMロールをEC2に紐付ける。
Elastic BeanstalkのサービスロールにはIAMポリシーを付けない。
EC2に追加でモジュールをセットアップしたい
ebextensionsフォルダを作り、モジュール追加指示を記載する。
作成できる環境
- ウェブサーバー環境
- ワーカー環境
サーバーレスは選択できない。
SAMコマンド
以下のコマンドでデプロイまでできる。
sam init
sam build
sam deploy
Cognito IDプールとユーザープール
Cognitoユーザープール
認証を担当
Cognito IDプール
認可を担当
CognitoサインイントリガーでLambdaを実行するポリシー
Lambdaのリソースポリシーでlambda:InvokeFunctionを許可する。
EC2インスタンスにIAMロールを設定するIAMユーザーに必要なアクション
- iam:GetRole
- iam:PassRole
マネジメントコンソールからEC2用のIAMロールを作成した時に自動的に作成されるもの
- 信頼ポリシー
- インスタンスプロファイル
機密情報をSystems Managerのパラメータストアで管理する
パスワードなどの機密情報はSecureStringを使う。
Cognito
SAML または OpenID Connect、ソーシャル ID プロバイダー (Facebook、Twitter、Amazon など) をサポートする外部 ID プロバイダーと併用し、独自の ID プロバイダーを統合することもできます。
Cognito Streams
保存されているデータの分析に使える。
データ同期
Cognitoを使いデバイス間のデータの同期も実装できる。
DynamoDB
プロビジョニングモードのRCU計算方法
4kbまで2RCU
4kb〜8kbまで4RCU
5kbで毎秒100アイテムの場合
4RCU *100=400
一貫したパフォーマンスが得られるパーティションキーの設定
- ユニークなキーはクエリされない
- ランダムなテキストもクエリされない
- 範囲が限られているものは効果が薄い
上記以外のフィールドにフィールドにパーティションキーを設定すれば、効果が高い?
Lambda
Kinesisのデータ処理に失敗した場合のエラー処理
エラーを返した場合は処理が成功するか、データの有効期限が切れるまでLambdaはバッチを再試行する。
/tmpにキャッシュさせる
Lambda関数内でファイルのダウンロードなどを行う処理などをしていて、且つ1秒間に複数回実行されるようなものは/tmpディレクトリにキャッシュさせるとパフォーマンスが上がる。
CloudFormationにSAMを使用してモバイルアプリケーションを構築
テンプレートにはResourcesとTransformセクションが必須。
ネットワークのレイテンシーを保証するアプリケーションの構築
- 再試行
- エクスポネンシャルバックオフ
この考え方が重要?エクスポネンシャルバックオフってなんぞや。。
OpsWorksレシプのデバッグ
失敗したインスタンスにログインしてレシピが正しく構成されているか確認する。
Elastic Beanstalkのデプロイ要件
要件
デプロイの所要時間が問題ではなく、既存のインスタンスを使用する。
デプロイ方法
上記の場合はローリングが最適なデプロイ方法。
SQS 可視性タイムアウトの変更
EC2のワーカー環境での実行処理が可視性タイムアウトの設定時間よりも長い場合に、要件として回避する必要がある場合には、ChangeMessageVisibilityアクションを使用して可視性タイムアウトの期間を新たに設定する。
S3 CORS設定のトラブルシューティング
サードパーティーのツールなどを使い、リクエストとレスポンスやOriginヘッダーを確認する。
CloudWatchLogsではCORSに関するログは記録されないため、調査に使えない。
CloudTrailもAPI呼び出しのみしかわからないため同様。
DynamoDB一時的なバーストエラーの対処
エラーの再試行とエクスポネンシャルバックオフを利用する。
AWS SDKは自動的に再試行ロジックを実装している。
簡単な再試行に加えて、各 AWS SDK はエクスポネンシャルバックオフアルゴリズムを実装し、フロー制御を改善します。エクスポネンシャルバックオフは、再試行間の待機時間を累進的に長くして、連続的なエラー応答を受信するという概念に基づいています。
Lambda
コードデバック方法
プログラムのボトルネックを探るためにコードをデバッグする必要がある場合はX-Rayを使う。
依存ライブラリの扱い
zipファイルにソースコードと合わせて依存ライブラリも含めるのがベストプラクティス。
ECSでX-Rayを使う
- タスクにIAMロールを設定
- X-Rayアプリケーションコードにインストルメンテーションを追加
- X-Rayデーモンを実行するDockerイメージを作成する
Elastic Beanstalkのデプロイ
- 時間は問題にならない
- インスタンス数を一定にする
- コストを抑える
以上の要件の場合は、Rolling with additional batch (追加バッチによるローリング)が要件を満たすデプロイ方法になる。
新しいバージョンをデプロイするが、総容量を維持するためインスタンスの新しいバッチをまず起動するため。
CodeDeployでのデプロイ方法
- インプレースデプロイ
- ブルー/グリーンのデプロイ
以上の二つの方式がある。
Kinesis Streams
EC2インスタンスの最大数=シャードの最大数
アプリケーション内で暗号化する方法
KMS GenerateDataKeyを使用する。
Lambda関数を使うベストプラクティス
データベースの初期化処理などのLambdaハンドラーはコアロジックから切り離して、再利用可能にする。
API Gateway
EC2インスタンスへのデプロイをElastic Beanstalkで行なっているWEBアプリからAPI Gatewayにアクセスする
IAM認証の署名バージョン4を利用する。
APIコールの応答性とLambdaファンクションの応答性をモニタリングするCloudWatchメトリクス
- Latency
- IntegrationLatency
以上の2つでモニタリングできる。
メトリクス | 内容 |
---|---|
CacheHitCount | 指定された期間内に API キャッシュから配信されたリクエストの数。 |
CacheMissCount | API キャッシュが有効になっている特定の期間における、バックエンドから提供されたリクエストの数。 |
Count | 指定された期間内の API リクエストの合計数。 |
IntegrationLatency | API Gateway がバックエンドにリクエストを中継してから、レスポンスを受け取るまでの時間。 |
Latency | API Gateway がクライアントからリクエストを受け取ってから、クライアントにレスポンスを返すまでの時間。 |
不正なドメインからのアクセス制御方法
CORSの有効化をする。
CodePipeline
手動承認フローを組み込む
SNSと連携する。
CodeDeploy
設定ファイル
.appspecファイルで設定する。
デプロイの成功可否確認するイベントフック
ValidateServiceが最後のデプロイライフサイクルイベント。デプロイが正常に終了したことを確認できる。
その他
フック | 内容 |
---|---|
BeforeInstall | 置き換えタスクセットが作成される前にタスクを実行するために使用される。 |
AfterInstall | 置き換えタスクセットが作成されてターゲットグループの 1 つがそれに関連付けられた後に、タスクを実行するために使用される。 |
BeforeAllowTraffic | 2 番目のターゲットグループが置き換えタスクセットに関連付けられた後で、かつ、トラフィックが置き換えタスクセットに移行される前に、タスクを実行するために使用される。 |
AfterAllowTraffic | 2 番目のターゲットグループが置き換えタスクセットにトラフィックを提供した後で、タスクを実行するために使用される。 |
CodeBuild
ECRへの認証エラー時に可能性が高い原因
CodeBuildからECRへのIAMアクセス許可が間違っている。
Kinesis Data Streams
データ暗号化
- KMSの保存中データの暗号化
- HTTPSエンドポイントを使用した転送中データの暗号化
上記が必要。
データの複数回送信を適切に処理する方法
レコード内に主キーを仕込む。
データフローに応じた調整方法
- データフローの増加に応じてシャードを分割
- データフローの減少に応じてシャードをマージ
以上の対応が必要。
DynamoDB
特定の属性サブセットを取得するCLIコマンドオプション
--projection-expression
を使う。
Amazon DynamoDB は、デフォルトですべての項目属性を返します。すべての属性ではなく、一部の属性のみを取得するには、-projectionというプロジェクション式を使用します。
個々のアイテムを読み取って、データ内容を変更するアプリケーションで、プロセス完了時間を短縮するソリューション
DynamoDBはBatchGetItemを使い、まとめて取得することによってデータ処理リクエストの回数を減らすことができる。
プライマリーキーに設定できる最大数
2つまで。
DynamoDBにプライマリーキーとして複合キーを設定する場合は、最大で2つの属性を利用して複合キーを作成します。
非キー属性のクエリを高速化できるインデックスが必要な場合
グローバルセカンダリインデックスを使う。
1 つ以上のグローバルセカンダリインデックスを作成して、Amazon DynamoDB でそのインデックスに対して Query リクエストを発行することで、非キー属性のクエリを高速化することができます。
ローカルセカンダリインデックスはパーティションキーとソートキーで構成されるため要件に合致していない。
X-Ray
X-RayデーモンがECSで正しく起動されるようにする環境変数
AWS_XRAY_DAEMON_ADDRESS
を設定する。
サンプリングルールの設定方式
サンプリングリクエスト数 = リザーバーサイズ+((1秒あたりの着信リクエスト-リザーバーサイズ)*固定レート)
KMS
データキーの暗号化されたコピーのみを返すKMS APIコール
GenerateDataKeyWithoutPlaintextを使用する。
GenerateDataKeyは作成されるデータキーのプレーンテキストおよび暗号化されたコピーを返すので、暗号化されたコピーのみを返すことはできない。
S3へのアップロードされるに保存データを保護する設定方法
アップロードリクエストにaws:kmsの値を持つx-amz-server-side-encryptionヘッダーを含める。
Secrets Manager
要件として認証情報に対するスパイクが発生する場合を考慮しないといけない場合
Secrets Managerの使用を検討する。
データベースの認証情報の管理だけなら、Systems Managerでも可能だが、スパイクの発生を考慮する場合はSecrets Managerが適している。
sam
デプロイ自動化のコマンド
- sam package
- sam deploy
以上を使う。
samコマンド
コマンド | 内容 |
---|---|
build | Lambda 関数のデプロイメントパッケージをコンパイル |
deploy | デプロイ方式の設定 |
init | アプリケーションの雛形を作成 |
publish | アプリケーションの公開 |
validate | テンプレートファイルの検証 |
package | コードと依存関係に関する.zip ファイルを作成し、S3にアップロード |
CloudFormation
スタック削除時の依存関係
外部スタックから参照されている全てのインポートを削除する必要がある。
スタック2がスタック1のリソースを参照している場合はスタック2から削除する必要がある。
ECS
最小のインスタンス数に抑える戦略
Binpackタスク配置戦略を使う。
戦略 | 内容 |
---|---|
Binpack | CPU またはメモリの最小利用可能量基づいて、最小のインスタンス数に抑える |
Random | ランダムに配置する |
Spread | 指定された値に基づいてタスクを均等に配置 |
Organizations
アカウント間のリソース共有
クロスアカウントアクセスを使う。
Elasticache
読み取られないデータを自動的に削除することでクラスター内の無駄なスペースを最小限に抑える方法
書き込みスルー戦略を使い、TTLを設定する。
キャッシュ内のデータが常に最新であることを確認し、読み取られないデータを自動的に削除することができます。
キャッシュ戦略
戦略 | 内容 |
---|---|
書き込みスルー | データがデータベースに書き込まれると常にデータを追加するか、キャッシュのデータを更新します。 |
遅延読み込み戦略 | 必要なときにのみキャッシュにデータを読み込むキャッシュ戦略です。 |
TTL の追加 | 一定期間でデータ項目を失効させることができます。 |
SQS
メッセージサイズ制限を超えてしまった場合
SQS 拡張クライアントライブラリを使う。
CloudWatch
CLIでEC2の詳細モニタリングを有効かするコマンド
aws ec2 monitor-instances --instance-ids [インスタンスID]
Lambda
デッドレターキューが利用されるケース
非同期呼び出しが3回とも失敗した場合
Elastic Beanstalk環境からRDSを分離する方法
一度構成した環境からRDSは分離できない。そのためElastic Beanstalkを作り直し、RDSを別で起動する必要がある。
CodePipeline
S3バケットに暗号化してデータを保存する
- SSE-KMSでS3バケット暗号化に使用する
- S3バケットでサーバー側の暗号化を有効にする
デプロイで失敗した場合に考えられる原因
- CodeCommitで指定したブランチへの変更が行われていない
- パイプラインの初期ステージで失敗している
など。
DynamoDBのプロビジョニングされたスループットが不足して書き込みが抑制された場合のソリューション
パーティションキーに乱数サフィックスを追加する。
追加することによってホットパーティションだったのが、均等にロードが分散され全体的なスループットが向上する。
Lambda関数のベストプラクティス
- 再帰呼び出しは使わない
- Lambda ハンドラーをコアロジックから分離
- 実行環境の再利用を活用する
- 環境変数を使用して、ハードコーディングしない
- 関数のデプロイパッケージの依存関係を制御する
など。
DynamoDB
ローカルセカンダリインデックス
パーティーションキーは変更できない。
ソートキーは変更できる。
CodeDploy
デプロイするLambda関数のバージョン指定方法
最新バージョンをAppSpec ファイルで指定する。
DynamoDB
グローバルセカンダリインデックスに使える読み込み
結果整合性のみ。
同じプライマリキーを持つアイテムにPutItemした場合
既存のアイテムが上書きされる。
オプティミスティックロックを使用するには
ConditionExpressionを使う。
パーティションキーやソートキー以外で絞り込みたい
FilterExpressionを使う。
全項目を取得する場合
Scanを使う。
100MBを超えるテーブルのScan時に結果を分割する
LastEvaluatedKeyを新しいExclusiveStartKeyに指定してScanする。
BatchGetItemで読み込めなかった場合
UnprocessedItemsにレスポンスが返される。
複数テーブルのアイテムをタイミング合わせて書き込みたい
TransactWriteItemsを使う。
一部の書き込みで失敗した場合は、全ての書き込みが失敗する(ロールバックされる)。
Lambda
S3とAPI Gatewayのイベントトリガーで実行に必要な権限
リソースポリシーが必要。
CloudWatch Logsに出力する方法
実行ロールに
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:CreateLogStream"
をつける。
請求対象
実行時間と設定メモリ容量とリクエスト回数。
RDSにアクセスする方法
同じVPCにLambdaを起動して、サブネットとセキュリティグループを設定する。
SQS
プロデューサーからのメッセージが問題でエラーを繰り返すケース
最大受信数を設定して、デッドレターキューに回す。
他のアカウントからのメッセージ送信を許可する
sqs:SendMessageリクエストを許可する。
SQSキューに送信してから利用可能になるまでの遅延時間のパラメータ
DelaySecondsで設定する。
メッセージの受信待機時間のパラメータ
Receive Message Wait Timeで設定する。
メッセージを削除時に指定するもの
受信ハンドルが必要。
Kinesis Data Streams
シャードが不足している時の対策
- シャードを分割する
- EC2インスタンスタイプを増強する
スケールする設計にする方法
- シャードを追加する
- パーティションキーに多数の異なる値を設定する
CloudFront
ビューワーとCloudFrontの通信をHTTPSにする
- Redirect HTTP to HTTPSを使う
- HTTPS Onlyを使う
CloudFromation
AWS SAMでリソースセクション以外に設定する項目
- AWS::Serverless Transformを設定
- AWS::Serverless にバージョンを指定
AWS::SAMじゃないので注意。
エクスポート名
AWSアカウントごとにリージョン内で一意である必要がある。
Elastic Beanstalk
定期的に実行するジョブを自動追加する設定ファイル
cron.yamlファイルを使う。
CodePipelineのCodeBuildとの連携で失敗した時にデバックする方法
- CloudFormationで原因を調べる
- IAM Policy Simulatoを利用する
- CloudTrailで原因を調べる
環境ごとの設定を記述する設定ファイル
env.yamlを使う。環境の名前やソリューションスタックなどを記載する。
古い環境を自動的に削除する仕組み
ライフサイクルポリシーを使う。
DynamoDB
Kinesis Date Streamsのシャードイテレーターが期限切れになった場合の対策
DynamoDB側のシャーディングされたテーブルの書き込み容量を増強する
古いデータの上書きを防止する
バージョン番号によるオプティミスティックロックを設定する。
新しい更新内容のみを追跡・保存する処理
- DynamoDBストリームを有効化した上で、StreamViewTypeの値をNEW_IMAGEに設定する
- Amazon Kinesis アダプターを連携する
複数ユーザーの同時アップデートを防ぐ仕組み
条件付きの書き込みを使う。
条件付きの書き込みを使うと、項目の属性が 1 つ以上の想定条件を満たす場合のみに成功できるようできる。
Lambda
1MBデータを暗号化する要件
暗号化SDKを使用して暗号化されたファイルをLambda関数でエンベロープして保存する
AWS Lambda環境変数の最大サイズは512KBで、AWS KMSの「暗号化」APIには数KBの制限があるため、上記の標準的な暗号化手段だけでは1MBのデータ暗号化は実現不可能です。 したがって、1 MBを暗号化するには、暗号化SDKを使用して、暗号化されたファイルをLambda関数でエンベロープする必要があります。
定期実行処理を行う
一定間隔で実行されるCloudWatchイベントとLambda関数を統合する
DynamoDBと連携して非同期処理を行う
Invoke APIを使用してLambda関数を呼び出し、InvocationTypeをEventに設定する
Dead Letter Queueを設定する
DeadLetterConfigパラメーターを使う。
関数の同時実行数の計算
同時実行= 1秒あたりの呼び出し数 × 秒単位の平均実行時間
イベント数 | 平均実行時間 |
---|---|
10 | 5秒 |
この場合、
10 × 5 = 50
CodeBuild
ビルド実行エラーのデバック方法
- CloudTrailを有効にする
- S3とCloudWatchの統合を有効にする
CodeCommit
commitに反応するアクションを設定する
CloudWatchイベントと連携する。
ALB
クライアント固有のIPアドレスを取得する設定
X-Forwarded-Forヘッダーを確認する。
SQS
メッセージの重複排除する方法
メッセージ重複排除 IDを設定する。
指定した期間コンシューマーに見えなくする設定
遅延キューを使う。
X-Ray
使用時の考慮事項
- X-Rayではサブセグメントを作成して、AWS サービスと AWS SDK で作成するリソースへの呼び出しを記録できる
- セグメントとサブセグメントには、オブジェクトと配列を含む、任意の型の値を持つ 1 つ以上のフィールドが含まれたメタデータオブジェクトを含めることができる
ECSでX-Rayを使う設定方法
- X-Rayデーモンを実行するDockerイメージを作成して、ECSクラスターにデプロイする
- タスク定義でUDP2000のトラフィックを許可する
適切なセグメント検索の方法
- X-Rayコンソールでフィルター式を使う
- GetTraceSummaries APIを使い特定の情報に関連付けられたセグメントを検索する
IAM
一時的なセキュリティ認証情報を使用する
GetSessionToken APIを使う。
ECS
コンテナーをグループ化する
クラスタークエリ言語を使う。
Cognito
一時的な特権制限付きの認証情報を利用するため、ユーザーに渡される情報
Cognito IDが渡される。
AWS AppSync
モバイルアプリデータを同期する
AWS AppSyncを使用することで、1以上のデータソースから安全にアクセスでき同期も容易にできる。
KMS
S3に暗号化した大容量ファイルをアップロードする時にAccess Denied (アクセス拒否)エラーが発生する場合の対処方法
- ユーザーにkms:Encrypt権限を付与する
- ユーザーにkms:Decrypt権限を付与する
- AWS CLIによるマルチパートアップロードを実行する
暗号化プロセス
- 毎回キーをローテートできる
- CMKを使用して暗号化キーを生成する
- ログ管理はKMS上で実行するか、CloudTrailを利用する
エンベロープ暗号化
GenerateDataKeyを使う。
RDS
3ヶ月保持する必要があるバックアップ要件の対応
CloudWatchでcronイベントを作成し、スナップショット機能をトリガーするAWS Lambda関数を利用する。
RDSの自動バックアップだと最大保持期間が35日なので要件を達成できない。
S3
全てのトラフィックが暗号化されているのを確認する方法
aws:SecureTransportがfalseであるトラフィックを拒否するポリシーを付ける。
明示的に拒否するポリシーを設定するのがベストプラクティス。
Lambda
関数の同時実行数
関数ごとに同時実行数を設定することが可能。
アカウントの同時実行数に達してしまった場合に使う?
関数のスケール
呼び出しが増加すると関数はスケールアップする。
最初のイベントの処理中に関数を再度呼び出すと、Lambda は別のインスタンスを初期化し、関数は 2 つのイベントを同時に処理します。
JaveのLambda関数のベストプラクティス
Javaライブラリを/libディレクトリに配置してパッケージの解凍時間を短縮する。
Elastic Beanstalk
更新に失敗した場合にサイトを落とすことが許容されないデプロイ要件
変更不可(イミュータブル)を使う。
新しいインスタンスにデプロイし、更新が成功した場合にトラフィックを切り替えることが可能。
ローリングと比較してもデプロイの失敗の影響は最小限になる。
新しい環境を作る時
開発環境を作成済みで、本番環境を作る際にEC2のインスタンスタイプ等を変更する場合はコンソールから新しい環境を作るページの詳細でインスタンタイプを変更する。
Cognito
ユーザーに一斉通知する仕組み
プッシュ同期を使う。
CognitoはIDとデバイス間の関連付けを追跡するので、プッシュ同期を使うことで各デバイスにSNSメッセージを送ることが可能。
CloudWatch
フィルターを作成したのに結果が返ってこないケース
新しく作成したフィルターは、フィルター作成後に保存されたLogしか対象にならないため。
同時ユーザー数を監視したい
標準ではメトリクスは用意されていないため、カスタムメトリクスを使う。
SQS
各送信者のメッセージを順序付けする
メッセージグループIDを使用する。
重複処理を回避する仕組み
SWFと合わせて使うのが一つの方法。
選択肢にFIFOキューを使うものやStep Functionsでも同じように重複回避はできる?と思う。
STS
エンコードされたエラーメッセージをデコードする
DecodeAuthorizationMessageを使用する。
アプリケーションにロールを引き受けさせる
STS AssumeRole API オペレーションを呼び出して、使用するロールの ARN を渡します
CloudFormation
ローカルアーティファクトのアップロード
aws cloudformation packageを使用して、S3を参照するようにテンプレートを置き換えることが可能。
DynamoDB
DynamoDBストリーム
Lambda関数をトリガーする場合は、同期的になる。非同期ではないので注意。
ピーク時間以外でのScanを高速化するソリューション
制限パラメータを使用した並列スキャンを実行する。
並列スキャンはパフォーマンスの向上に役立つ。制限パラメータを合わせて使用することで消費されるプロビジョニング済みのスループットを制限できる。
テーブル全体のscan最適化
並列scanを使う。
デフォルトでは、Scan オペレーションは、データを順次処理する。
そのため、スキャンするテーブルまたはインデックスが大きいほど、Scan を完了するのに時間がかかる。
最適化するためにScan オペレーションでは、テーブルまたはセカンダリインデックスを論理的に複数のセグメントに分割し、複数のアプリケーションワーカーがセグメントを並行してスキャンすることができる。
IAM
ポリシーの検証
- IAM Policy Simulatorを使用する
- DryRun引数を使って事前に検証する
ウェブ ID フェデレーション
一時的な認証情報を作成できる。
Readshiftなどの認証情報をアプリケーションに埋め込むのは推奨されていないので、ウェブ ID フェデレーションを使う。
S3
バケットへのアクセスをIPアドレスで制限する
バケットポリシーを使う。
ACLやIAMポリシーではIPアドレスでの制限は対応していないため。
独自の暗号化キーによるSSE-Cを使用したデータ保護
以下のリクエストヘッダーを使用する。
- x-amz-server-side-encryption-customer-algorithm
- x-amz-server-side-encryption-customer-key
- x-amz-server-side-encryption-customer-key-MD5
x-amz-server-side-encryption-customer-key-AWS256は指定できない。
ElastiCache
キャッシュミスが発生した場合にRDSから取得する
遅延読み込みキャッシュ戦略を使う。
常に ElastiCache キャッシュに最初にリクエストを行います。データがキャッシュにあり最新である場合、ElastiCache はアプリケーションにデータを返します。データがキャッシュにないか期限切の場合、アプリケーションはデータストアに対してデータをリクエストします。
CodeBuild
ビルドの実行権限しか持っていない場合にビルドコマンドをオーバーライドする方法
AWS CLI の start-build コマンドを実行し、ビルド仕様をオーバーライドすることができる。
API Gateway
特定のユーザーのみにAPIの使用を許可する
使用量プランを利用することで承認済みリクエストレートとクォータによってAPIのアクセスを許可することができる。
WEBサーバーをカスタムデータマッピングを持つAPI Gatewayと統合する
HTTPプロキシ統合およびHTTP統合を実施することが必要。API Gatewayの統合タイプはHTTP_PROXYおよびHTTPを選択する。
504エラーが発生している原因
- Lamnda関数が29秒以上でAPI Gatewayのタイムアウトエラーが発生している
- INTEGRATION_TIMEOUTが発生している
INTEGRATION_TIMEOUTが発生するのはLambda関数ではなくてAPI Gatewayの方。
APIリクエストにはクエリ文字列パラメーターを含める
リソースのメソッドリクエストを設定する。
カナリアリリース方法
ステージ変数でAdditional versionを利用してカナリアリリースを実施する。
一定期間内にバックエンドから提供されたリクエスト数を調べる
CloudWatchのCacheMissCountメトリクスを使用する。
- CacheHitCountは指定された期間内に API キャッシュから配信されたリクエスト数
- CacheMissCount はAPI キャッシュが有効になっている特定の期間におけるバックエンドから提供されたリクエスト数
外部のREST APIをインポートする
AWSコンソールからSwaggerまたはOpenAPI定義からインポートする。
Lambda
OAuthまたはSAMLに類似した認証方式のLambdaオーソライザー
トークンベースのものを使う。
解凍されたパッケージが大きい場合の対処方法
展開パッケージのサイズ制限は250 MB。
なのでそれを超える場合は余分なファイルを/ tmpディレクトリにロードして、展開後のパッケージサイズを250MB以下にして対応する。
DynamoDB
GSIでのキャパシティユニットの消費
GSIはより多くのRCUとWCUをプロビジョニングする必要がある。
事前にプロビジョニングしていたテーブルで新たにGSIを追加した場合は想定よりも多くのキャパシティユニットを必要としてしまうことを考慮に入れる。
期間をソートするインデックスを追加することが必要な要件
LSIを追加する。
例えば主キーに設定されているユーザーID以外に投稿時間をソートキーとして追加して、1ヶ月や1週間など期間で絞り込むクエリ操作をする。
特定のデータを取得するにはQuery リクエストを指定する際にはグローバルセカンダリインデックスではなく、ローカルセカンダリーインデックスが最適です。
特定の期間での絞り込みなどの要件ではGSIよりLSIが適切?
StreamViewTypeの設定方法
項目 | 内容 |
---|---|
KEYS_ONLY | 変更されたアイテムのキー属性のみがストリームに書き込まれます。 |
NEW_IMAGE | アイテムが変更された後に表示されるように、アイテム全体がストリームに書き込まれます。 |
OLD_IMAGE | 変更される前のアイテム全体がストリームに書き込まれます。 |
NEW_AND_OLD_IMAGES | アイテムの新しいアイテムイメージと古いアイテムイメージの両方がストリームに書き込まれます。 |
テーブル更新前のデータをS3に保存するなどの要件だった場合は、OLD_IMAGEを使う。
個々の書き込み要求に対して、操作の影響を受けたテーブルとセカンダリインデックスの値を返す
ReturnConsumedCapacityパラメーターにINDEXESの値を追加する設定を行う。
SQS
CloudFormation
条件を評価する入力内容を定義するセクション
Parametersセクションを使う。
AWS :: Lambda :: Functionリソースのパラメーター設定
ZipFileパラメーターを設定する。
Parametersセクション:
条件において評価する入力を定義します。これらの入力パラメータの値に基づいて、条件は true または false と評価されます。条件で擬似パラメータを評価する場合は、このセクションで擬似パラメータを定義する必要はありません。擬似パラメータはCloudFormation によって事前に定義されています。
Conditionsセクション
組み込み関数を使用して条件を定義します。これらの条件はCloudFormation が関連するリソースをいつ作成するかを指定します。
Resources および Outputsセクション
条件付きで作成するリソースまたは出力と条件を関連付けます。CloudFormation は、true に関連付けられたエンティティを作成し、false に関連付けられたをエンティティを無視します。Condition キーと条件の論理 ID を使用して、リソースまたは入力と関連付けます。条件付きでプロパティを指定するには、Fn::If 関数を使用します。
ヘルパースクリプト
名前 | 内容 |
---|---|
cfn-init | リソースメタデータの取得と解釈、パッケージのインストール、ファイルの作成、およびサービスの開始で使用します。 |
cfn-signal | CreationPolicy または WaitCondition でシグナルを送信するために使用し、前提となるリソースやアプリケーションの準備ができたときに、スタックの他のリソースを同期できるようにします。 |
cfn-get-metadata | 特定のキーへのリソースまたはパスのメタデータを取得するために使用します。 |
cfn-hup | メタデータへの更新を確認し、変更が検出されたときにカスタムフックを実行するために使用します。 |
EC2インスタンスでパッケージを動的にインストールするなどの要件ではcfn-initを使う。
変更内容を事前確認する
変更セットを使用して、実行中のリソースにどのような影響がある確認できる。
RDS
Auroraで書き込み用大容量インスタンスと小規模の読み込み用インスタンスを使い分ける方法
それぞれの処理に対応したカスタムエンドポイントを作成して、トラフィックを処理できるようにする。
RDS DBインスタンスの拡張モニタリングで取得出来るメトリクス
- RDS Childプロセス
- RDS プロセス
- OSプロセス
KMS
最大データサイズ
4kb
オンプレミスのキー管理システムからデータの暗号化と複合化を実行するコードを維持せずに、AWS任せる要件
用意した暗号化キー(SSE-C)でサーバー側暗号化を実施する。
CodeCommit
開発者にCodeCommitへのアクセス許可を設定する
- 新しいSSHキーを生成して公開SSHキーを開発者の各IAMユーザーに関連付ける
- HTTPS Git認証情報を設定する
別のコードリポジトリからの移行
次の作業が必要
- CodeCommit に必要な初期セットアップを完了します。
- CodeCommit リポジトリを作成します。
- リポジトリをクローンし、CodeCommit にプッシュします。
- CodeCommit リポジトリのファイルを表示します。
- CodeCommit リポジトリをチームと共有します。
CodeDeploy
ロールバックが実行された時のデプロイIDの挙動
新しいデプロイIDが付与される。
以前にデプロイされたアプリケーションのリビジョンを新しいデプロイとして再デプロイするため。
インプレースデプロイのイベントフック実行順序
以下を参照
Kinesis Data Streams
ProvisionedThroughputExceededExceptionエラーが発生して場合
- エクスポネンシャルバックオフを実施
- バッチ処理(Lambda等)を並列処理をさせて、高速分散化させる
シャードの分割は本質的な解決にはならない。
ProvisionedThroughputExceededExceptionエラーはKinesis自体のパフォーマンス不足というよりは、呼び出す回数が上限を超過しないように調整することが必要なため。
Elastic Beanstalk
依存関係を解決してデプロイする方法
多数のEC2インスタンスの複雑な依存関係を設定した上で、Elastic Beanstalkを利用してデプロイを実施すると、デプロイ中に依存関係の検証が発生してしまうため、デプロイに時間を有することになります。これを解決するためには、CodeBuildの最後の段階でソースコードの依存関係をバンドルすることが必要です。
デプロイしたアプリケーションのCPU利用率の負荷が高い場合
CPUをモニタリングしたAuto Scaling グループを設定する。
バージョン更新する方法
zipファイルとしてパッケージ化してeb deploy
コマンドでデプロイすることで新しいバージョンを実行できる。
デプロイ時に利用するサービス
- CodePipeline
- CloudFormation
X-Ray
トレースデータにインデックスを付ける
Annotation(注釈)を使用する。
X-Rayトレースデータをデバックアプリケーション上に表示する方法
- GetTraceSummaries APIを使用してアプリケーションのトレースIDのリストを取得する。
- BatchGetTraces APIを使用してトレースのリストを取得する。
PutTraceSegments APIを使用して、カスタムセグメントを送信するカスタムコードを実装する
サブセグメントを含める必要がある。
S3
SAM上でS3バケットの読み取りアクセス権を付与する
S3ReadPolicyを設定する。
CLIでリストコマンドでページを分割して実行するオプション
- --max-items オプション
- --page-size オプション
を使う。
静的ウェブサイトをホストする際の前提条件
- ドメインネームとバケットネームが同じ
- 登録済みドメインであること
Cognito
認証を必要としないゲストユーザーに一時認証情報を提供する仕組み
Amazon Cognito ID プールを使う。
ユーザプールは Amazon Cognito のユーザディレクトリです。ユーザープールを使用すると、ユーザーは Amazon Cognito を通じてウェブまたはモバイルアプリにログインできます。また、ユーザーは Google、Facebook、Amazon などのソーシャル ID プロバイダー、および SAML ベースの ID プロバイダー経由でユーザープールにサインインすることもできます。これは通常のユーザー認証に利用するものですのでゲストユーザー用ではないため不正解です。
SAML 2.0 によるエンタープライズ ID プロバイダーを使用してサインインする要件
- IDフェデレーションとCognitoの統合を有効にする
- AWS Single Sign-On によりOrganizations のすべてのアカウントへの SSO アクセスとユーザーアクセス権限の一元管理を実行する
AutoScaling
手動スケーリングをする際に変更するパラメータ
希望する容量を変更する
API Gateway
APIリクエストを送信するときに、許可されたクライアントのみがAPI Gatewayキャッシュエントリを無効にする
- コンソールで [Require authorization (認証が必要)] を有効化する
- クライアントからCache-Control: max-age=0 ヘッダー設定する
- キャッシュのデフォルトTTLを0にに設定する
プロキシ統合とカスタム統合(非プロキシ統合)の違い
Lambda 非プロキシ統合はより複雑なマッピングを定義したい場合に利用。
プロキシ統合はより簡単なイメージ?
Lambda
グローバルな配信を行っていて、遅延を最小限にしつつプレミアムユーザーだけに限定的な処理をしたいケース
Lambda @ EdgeとCognitoを使用して要件を達成する。
CloudFrontの署名付きURLやCookieでも限定的なコンテンツの配信はできるが、Lambda @ Edgeと比べるとかなりの遅延がある。
VPC内にLambda関数にインターネットアクセスを設定する
- NATゲートウェイかNATインスタンスを設定する
- Lambda関数に関連付けられたセキュリティグループにアウトバウンド接続を許可する
CloudWatch Logsのデータを処理をする際のメモリ使用量の注意
ログ量が多いとメモリを圧迫する。
そのためCloudWatch Logsの有効期限ポリシーを設定する必要がある。
DynamoDB
Lambda関数と統合する方法
- DynamoDBストリームからLambda関数にレコードを送信するようLambdaに指示するイベントソースマッピングを作成する
- AWSLambdaDynamoDBExecutionRole管理ポリシーをLambda関数の実行ロールに指定する
SQS
メッセージ処理に失敗した際に他のコンシューマーがメッセージを処理するまでにタイムラグがある場合のリファクタリング
可視性タイムアウト時間を減少させる。
デフォルトの可視性タイムアウトは 30 秒で、最小値は 0 秒、最大スケールは 12 時間です。分散コンシューマの1つがメッセージを受信すると、その特定のメッセージの可視性タイムアウトが期限切れになるまで、メッセージを再度読み取ることはできません。したがって、可視性タイムアウトの設定時間を減少させることで、他のコンシューマーがメッセージを処理するための待ち時間を短縮することができます。
一度に受信できるメッセージ数の上限
10件まで。
他の消費コンポーネントがメッセージを受信および処理するのを防ぐ方法
可視性タイムアウトを使う。
処理の重複防ぐためにバージョン番号を埋め込む方法はKinesisではできるがSQSではできない。
Cognito
認証されていないIDでも特定のコンテンツは参照可能にする
IDプールで設定する。
Amazon Cognito IDプール(フェデレーションID)は、Amazon Cognitoユーザープール、Amazon、Facebook、Google、SAML IDプロバイダーを含むフェデレーションIDプロバイダー、および認証されていないIDを介したユーザー認証を実行可能です。これにより、独自のバックエンド認証プロセスを介してユーザーを登録および認証できます。したがって、Amazon CognitoでIDプールを作成し、認証されていないIDへのアクセスを有効にすることが、正しい実装方法となります。
X-Ray
X-Rayとの通信を容易にするためにAWS Lambdaで使用される環境設定
_X_AMZN_TRACE_ID
_X_AMZN_TRACE_IDにはサンプリングデシジョン、トレース ID および親セグメント ID が含まれるトレースヘッダーが含まれます。関数が呼び出されたときに Lambda がトレースヘッダーを受信すると、ヘッダーは _X_AMZN_TRACE_ID は環境変数の入力に使用されます。トレースヘッダーが受信されない場合、Lambda がそれを生成します。
AWS_XRAY_CONTEXT_MISSING
AWS_XRAY_CONTEXT_MISSINGはX-Ray SDK を使用して、関数が X-Ray データを記録する際にトレーシングヘッダーを使用できない場合の動作を決定します。Lambda はデフォルトでこの値を LOG_ERROR に設定します。
AWS_XRAY_DAEMON_ADDRESS
AWS_XRAY_DAEMON_ADDRESSはX-Ray デーモンのアドレスを IP_ADDRESS:PORT 形式で表示します。X-Ray デーモンのアドレスを使用して、X-Ray SDK を使用せず X-Ray デーモンにトレースデータを直接送信できます。
データをX-RayにアップロードするためにX-Rayデーモンに設定するIAMポリシー
X-RayデーモンにAWSXrayWriteOnlyAccess管理ポリシーのアクセス許可を設定する。
様々な外部アプリケーションからの呼び出しリクエスト処理をトレースする
- PutTraceSegments APIを使用して、セグメントドキュメントをX-Rayに直接送信する
- セグメントドキュメントをX-Ray APIに送信する代わりに、セグメントとサブセグメントをX-Rayデーモンに送信し、それらをバッファリングしてバッチでX-Ray APIにアップロードする
どちらかの方法で要件を実現する。
AWS SDK呼び出しの場合は名前空間サブセグメントフィールドに指定する値
AWSを指定する。
セグメントに保存する追加のカスタムデータを設定する場所
メタデータに設定する。
ElasticBeanStalk
外部HTTP Web APIに送信するすべてのコールと、SQLデータベースクエリをトレースする
.ebextensionsディレクトリにxray-daemon.config構成ファイルを含める。
CloudWatch
連続する直近の 3 つの期間内の既存の全てのデータポイントが上回った時にアラームを飛ばす設定
評価期間とデータポイントの両方で3を指定する。
CloudFormation
エクスポートされた値を別のスタックで使用する関数
Fn::ImportValue関数を使う。
FindInMap関数
MapName
Mappings セクションで宣言された、キーと値を含むマッピングの論理名。
TopLevelKey
最上位のキー名。この値は、キーと値のペアのリストです。
SecondLevelKey
2 番目のレベルのキー名で、TopLevelKey に割り当てられたリストのキーの 1 つに設定されます。
KMS
CloudWatch
AlexaスキルでS3のAlexaLogバケットに保存されたログデータを確認する
console.logコードをスキルコード内に設定して、CloudWatch統合機能をS3で使用する
ELB
X-Forwarded-Forヘッダーを使用せずにユーザーの元のソースIPアドレスとソースポートを取得する
NLBを使用する。
NLBは接続リクエストを受信すると、デフォルトルールのターゲットグループからターゲットを選択して、リスナー構成で指定されたポート上の選択したターゲットへの TCP 接続を開きます。 着信接続は変更されないため、アプリケーションソフトウェアはX-Forwarded-Forをサポートする必要はありません。
ECS
暗黙的または明示的に指定した制約に従うタスク配置戦略
randamが要件を満たせる。
randomは、インスタンスにタスクをランダムに配置しますが、暗黙的または明示的に指定した他の制約を引き続き尊重します。
CodeCommit
CodeBuild
ビルド時間が長くてタイムアウトするのを防ぐ
構成されたタイムアウトの期限が切れると、ビルドプロセスが自動的に終了します。 デフォルトは60分です。AWS CLIではqueuedTimeoutInMinutesOverride: を設定します。これは、ビルドをキューに入れてからタイムアウトするまでの時間 (分) を指定するオプションで、その最小値は 5 分、最大値は 480 分 (8 時間) でタイムアウト時間を設定することが可能です。
ビルド段階でのプロジェクトアーティファクトの構成
CodeBuildに対してS3へのアクセス許可を与える。
ビルド失敗のデバッグ方法
ローカル環境でビルドを実行する。
AWS CodeBuildのローカルビルドサポートでは、ソースコードの場所を指定し、ビルド設定を選択するだけで、CodeBuildはコードのコンパイル、テスト、パッケージ化のためのビルドスクリプトを実行します。これにより、BuildSpecファイルにおけるコマンドまたは設定上の問題を確認することができます。
CodeDploy
デプロイの種類
Canary
トラフィックは2つの増分でシフトされます。事前定義されたカナリアオプションから選択して、最初の増分で更新されたLambda関数バージョンにシフトされるトラフィックの割合と、残りのトラフィックが2番目の増分でシフトされるまでの間隔を分単位で指定できます。
Linear
トラフィックは、増分ごとに等しい分数で等間隔にシフトされます。各増分でシフトされるトラフィックの割合と各増分間の分数を指定する定義済みの線形オプションから選択できます。
All-at-once
すべてのトラフィックは、元のLambda関数から更新されたLambda関数バージョンに一度にシフトされます。 さらにAWS Lambdaデプロイで利用可能な事前定義された設定を利用することができます。
IAM
EC2インスタンスに設定していたアクセスキーとシークレットアクセスキーから、IAMロールに切り替えれる
インスタンスプロファイルにIAMロールを設定する。
SWF
解析結果の取得回数を記録管理する
SWFマーカーを使用する。
マーカーを使用して、アプリケーション固有の用途に合わせてワークフロー実行履歴においてイベントを記録できます。
CLI
リージョンを指定するオプション
--region
を使用する。
Route53
地理的近接性ルーティング
トラフィックフローを使用するのが必須。
Kinesis
リアルタイムに迅速に解析してレポートすることが要件の場合
Kinesis Data Streamsと分析用にEMRを使用する。
ホットシャードとコールドシャード
ホットシャードは分割
コールドシャードはマージ
RDS
オンプレのMicrosoft SQL Serverからの移行時に合わせて データを暗号化する
- インスタンス起動時に暗号化する設定を有効にする
- 透過的なデータ暗号化 (TDE) を使用する
セキュリティ
PFSに対応しているサービス
- CloudFront
- ELB
モニタリング
EC2のシステムメモリメトリクスをスケジュール通りに定期的に収集する設定
- CloudWatchエージェントを利用する
- システムメトリクスを収集するcronジョブを利用する
API Gateway
別のアプリケーションとの連携用にAPIを設定する
使用量プランを使うことで、ビジネス要件および予算の制約に合った承認済みのリクエストレートとクォータで顧客にAPIを提供できる。
Lambda
東京リージョンでの同時実行数
東京リージョンでは、1000の同時実行制限が課せられています。アカウントの同時実行制限が1000で、10の機能がある場合、1つの機能の制限を200に、別の機能の制限を100に指定できます。残りの700は他の8つの機能で共有されます。AWS Lambdaは、予約されていない同時実行プールを最低100の同時実行で保持する必要があり、アカウントの合計制限が1000である場合、900を個々の機能に割り当てることに制限されます。
予約されていない同時実行プールを最低100の同時実行で保持する必要がある。
つまり2つのLambda関数をデプロイしている場合に、両方を効率的に処理させるためには最大でも450ずつに同時実行数を制限しておかなければならない。
割り当てられているCPUを増やしてパフォーマンスを改善する設定
メモリを大きいものに変更する。
メモリを増やすことによって、Lambdaに割り当てられるCPUの比率が増える。
CPUを手動で設定することはできない。
関数のセットアップコードを実行したり、LambdaランタイムAPIから呼び出しイベントを読み取る方法
カスタムランタイムを使用する。
KinesisまたはDynamoDBストリームを処理するLambda関数の同時実行数
シャード数が同時実行の単位になる。
シャード数が50
Lambdaのデータ処理平均時間10秒
ストリーム1秒あたり50個受信
この場合シャード数の50が同時実行数になる。
同時実行数は2 桁のミリ秒で応答する要件
プロビジョニングされた同時実行数を設定する。
有効にすると、プロビジョニングされた同時実行は、2 桁のミリ秒で応答するように機能を初期化し、ハイパー対応状態になります。
ヘッダーおよびクエリ文字列パラメーターを受け入れるカスタム承認スキームを使用して実装する
リクエストパラメータベースの Lambda オーソライザーを使用する。
Lambda オーソライザーの種類
トークンベース
トークンベース の Lambda オーソライザー (TOKEN オーソライザーとも呼ばれる) は、JSON ウェブトークン (JWT) や OAuth トークンなどのベアラートークンで発信者 ID を受け取ります。
リクエストパラメータベース
リクエストパラメータベースの Lambda オーソライザー (REQUEST オーソライザーとも呼ばれる) は、ヘッダー、クエリ文字列パラメータ、stageVariables、および $context 変数の組み合わせで、発信者 ID を受け取ります。
InvalidParameterValueExceptionが返されるケース
AWS Lambdaが引き受けることができないCreateFunction APIでIAMロールを設定しているのが原因として考えられる。
DynamoDB
インデックスを利用しないで、できるだけ早くDynamoDBからコンテンツを取得する
並列スキャンを利用する。
並列スキャンは、その名の通り、1つのテーブルに対するスキャンリクエストを並列に行うための仕組みで、テーブルの操作領域を複数のセグメントに分割し、各セグメントに並行してスキャンリクエストを実施できます。
Auto Scalingグループが設定されたEC 2で変更が別のユーザーによって上書きされるトラブルを解決するソリューション
1つのプロパティを指定してテーブルのマッピングクラスにバージョン番号を格納することにより、アプリケーションのソースコードにオプティミスティックロックを実装する。
強い整合性で別のソートキーを使う要件
別のソートキーを使用したローカルセカンダリインデックスを設定して、新しいテーブルを作成する。
強い整合性読み込みではGSIは使えない点に注意する。
SQS
コンシューマの処理時間が予測できない場合に重複メッセージを除く方法
changeMessageVisibility APIをコンシューマごとに使用して、可視性時間を設定する。
可視性タイムアウトではコンシューマごとの設定ができないため、コンシューマの処理時間が予測できない場合は適していない。
最大メッセージサイズ
256kb
KMS
AWS KMS SDKでの復号化する設定
- 暗号化に使用したデータキーに基づいて復号アルゴリズムが復号を実施
- AWS 暗号化 SDKを利用してデータを復号する
Kinesis
X-Ray
Elastic Beanstalk
10TB相当のスキャンファイルを保存していて、そのファイルを検索する仕組みを構築する
検索にはAmazon CloudSearchかElasticSearchを使用する。
Elastic Beanstalkによりワーカー環境を展開する。
CloudFormation
テンプレート内のリソースから属性の値を返す組み込み関数
!GetAtt関数を使う。
Lambda関数をインラインに含める際のパラメータ
Code>ZipFileにインラインで記述する
最新のAMI IDを自動更新する設定
- Systems Managerのパブリックパラメータストアで最新のAMI IDを参照する
- AMIを更新する場合はCloudFormationスタックを更新する
CloudFormationからSystems ManagerのパブリックパラメータストアのAMI IDを参照することで、テンプレートやパラメータをいじらずにスタックを更新すれば最新AMIに更新することができます。CloudFormationテンプレートの既存のパラメーターセクションを使用して、Systems Managerパラメーターと他のパラメーターを定義できます。
サーバレスアプリでデプロイプロセスを自動化する際に利用するコマンド
sam deploy
を使用する。
sam package
は以前は必要だったがsamのアップデートにより不要になった?
アカウント番号をスタックのOutputとして出力する
AWS :: AccountIdを使用する。
CodeCommit
CodeBuild
依存関係を解消して処理を高速化する設定
ローカルキャッシュを有効にする。
ビルドでローカルキャッシュを有効にするには、キャッシュ方法に [Local] を選択して設定します。これにより、CodeBuild はあるビルドの終了後、新たなビルドのために一定期間キャッシュを維持することができます。
CodeDeploy
インプレースデプロイを利用できるもの
- EC2
- オンプレ環境
STS
認証情報の有効期間のデフォルト値
1時間
SAMLと互換性がないIDストアで、IAMを使用してオンプレミスのLDAPディレクトリサービスを統合する要件
オンプレミスのデータセンターでカスタムIDブローカーアプリケーションを作成し、STSを使用して短命のAWS認証情報を発行することで要件を満たせる
一時的なセキュリティ認証情報を取得する
GetSessionTokenを使う。
資格情報は、アクセスキーID、シークレットアクセスキー、およびセキュリティトークンで構成される。
S3
Glacierに保存されているデータを必要なデータだけを5時間以内に取得する
標準取り出しでAmazon S3 Glacier Selectを使う。
[標準] 取り出しの場合、アーカイブは通常、3~5 時間以内に使用可能になります。
SSE-S3を使用して暗号化する要件
x-amz-server-side-encryption ヘッダーにAES-256を設定する。
ECS
クラスターの各タスクは複数AZに均等に配置する要件のタスク定義
spreadを使用して、filed値にattribute:ecs.availability-zoneを設定する。
EFS
EFSマウントヘルパーをインストールし、データ転送を暗号化する要件
- マウントヘルパーユーティリティで暗号化オプション「-o tls」を使用する
- コンソールまたは実行コードによって、EFSファイルシステムIDをEFS APIから取得する
OpsWorks
二つの言語で作成されたアプリケーションを管理する要件
1つのスタック内に2つのレイヤーが必要。また、これを記述するレシピは1つとする。
例えばRubyで書かれたアプリケーションが存在していて、新たにNode.jsのアプリを追加する場合は、
1スタック、2レイヤー、1レシピとなる。