AWS認定デベロッパーアソシエイト取得に向けた学習記録です。
個人的なメモとして試験勉強で気になったところをまとめています。
追記:AWS認定デベロッパーアソシエイトに合格しました。勉強方法など以下の記事で紹介しているので参考にしてください。
スポンサーリンク
目次
- 1 学習期間
- 2 学習記録
- 2.1 CloudFormationテンプレートの主なセクションについて
- 2.2 Elastic BeanstalkでRDSを再利用してElastiCacheにユーザセッションをデプロイ時に作成するための構成
- 2.3 WEBサーバーとの統合リクエスト・レスポンスのカスタムデータマッピングが可能なAPI Gatewayの統合タイプ
- 2.4 オンプレ環境からAWS SDK for JAVAを使用してAWS環境に接続するための認証方法
- 2.5 API Gateway+Lambda+DynamoDBのサーバレスアプリケーションで504エラーが発生した際の最も可能性がある原因
- 2.6 Auroraの書き込み・読み込み処理で使用するインスタンスを分ける方法
- 2.7 CloudFormationスタックのデプロイ時にEC2でパッケージを動的にインストールするためのヘルパースクリプト
- 2.8 CloudFormationテンプレートでLambdaを作成する際のソースコードを指定するパラメタ
- 2.9 API Gatewayと連携しているLambdaを既存バージョンと並行して新APIバージョンのテストを行う方式
- 2.10 CodeDeployでロールバックした時のデプロイIDについて
- 2.11 EC2インスタンスの作成・削除のアクションの実行権限を確認するオプション
- 2.12 Kinesis Data StreamsでProvisionedThroughputExceededExceptionが発生した時の対応
- 2.13 X-Rayのアクセス権限が付与されたLambdaからのデータが取得できない時の対応
- 2.14 Elastic Beanstalkで大規模なEC2インスタンスの依存関係の検証でデプロイ時間が長くなる時の対応
- 2.15 AWS上の複数アプリケーションの中央ロギング環境を展開できるAWSサービス
- 2.16 X-Rayトレースのデータにフィルター式で利用するインデックスを付与する
- 2.17 SAM上でS3バケットの読み取りアクセスを付与するポリシーについて
- 2.18 DynamoDBのグローバルセカンダリインデックスに対するプロビジョニング済みスループットに関する考慮事項
- 2.19 CodeDeployでLambdaをデプロイする際のライフサイクルイベントとフックについて
- 2.20 DynamoDBでProvisionedThroughputExceededExceptionが発生した際の対応
- 2.21 EC2インスタンスで実行するシェルでEC2のIPアドレスを取得する方法
- 2.22 クライアント暗号化キー(SSE-C)によるサーバーサイド暗号化が設定されたS3バケットへアップロードする際のリクエストヘッダー
- 2.23 マイクロサービスアーキテクチャのアプリケーションのX-RayトレースデータからトレースIDとトレースのリストを取得する方法
- 2.24 PutTraceSegments APIを使用してセグメントドキュメントをX-Rayに直接送信する方法
- 2.25 モバイルゲームアプリケーションを利用するゲストユーザーに一時認証情報を提供するための設定
- 2.26 既存のGitリポジトリをCodeCommitリポジトリに移行する方法
- 2.27 新しいバージョンのアプリケーションをCLIでElastic Beanstalkにデプロイする方法
- 2.28 API GatewayでAPIキャッシュを有効にしたアプリケーションで指定期間内にバックエンドから提供されたリクエスト数をモニタリングする
- 2.29 CodeCommitへのアクセスするための認証情報の設定
- 2.30 DynamoDBの書き込み要求で消費する書き込みキャパシティーを返答するパラメタ
- 2.31 Lambda + API Gateway + DynamoDBで504エラーが発生した際の可能性の高い原因
- 2.32 CloudFormationで複数AWSアカウントやリージョンを横断したリソース展開する方法
- 2.33 EC2インスタンスの平均RAM使用量をCloudWatchメトリクスとして利用する方法
- 2.34 API Gatewayでエンドポイントへの呼び出し回数を減らしパフォーマンスの改善する方法
- 2.35 RDSの拡張モニタリングで取得可能になるメトリクス
- 3 まとめ
学習期間
- 2021/09/15 – 2021/09/20
学習記録
CloudFormationテンプレートの主なセクションについて
Resources
(必須)- スタックに含めるEC2やS3などのAWSリソースとそのプロパティを定義する。
Outputs
- 他のスタックにインポートする際の値を定義する。
Conditions
- 特定のリソースを作成するか条件を定義する。
Parameters
- 条件を評価する際の値を定義する。
Elastic BeanstalkでRDSを再利用してElastiCacheにユーザセッションをデプロイ時に作成するための構成
- ElastiCacheを設定ファイル
.ebextensions
で定義する。.ebextensions
で作成されたリソースはCloudFormationテンプレートの一部となり、環境が終了すると削除される。
- RDSを別途構築し、
.ebextensions
でRDSを参照するように定義する。
WEBサーバーとの統合リクエスト・レスポンスのカスタムデータマッピングが可能なAPI Gatewayの統合タイプ
HTTP
(HTTPカスタム統合)- APIをバックエンドのHTTPエンドポイントに統合する。
- 統合リクエストと統合レスポンスの両方を設定してデータのマッピングを行うことができる。
- 学習記録②の復習
オンプレ環境からAWS SDK for JAVAを使用してAWS環境に接続するための認証方法
- AWSサービスへのアクセス権限を付与したIAMユーザを作成する。
- IAMユーザに紐づいたアクセスキーをオンプレ環境に配備する。
- Linux:
~/.aws/credentials
- Windows:
C:\Users\USER_NAME\.aws\credentials
- Linux:
API Gateway+Lambda+DynamoDBのサーバレスアプリケーションで504エラーが発生した際の最も可能性がある原因
- 統合タイムアウト範囲の最長29秒を超過した。
- 実行中のLambdaの処理が29秒以上となったため、API Gatewayのタイムアウトとなり
INTEGRATION_TIMEOUT
エラーが発生した。
- 実行中のLambdaの処理が29秒以上となったため、API Gatewayのタイムアウトとなり
Auroraの書き込み・読み込み処理で使用するインスタンスを分ける方法
- Auroraのカスタムエンドポイントを利用する。
- 書き込み・読み込み処理に応じたカスタムエンドポイントを作成して、両方のトラフィックを処理できるように構成する。
CloudFormationスタックのデプロイ時にEC2でパッケージを動的にインストールするためのヘルパースクリプト
cfn-init
を利用することでテンプレートからスクリプトを直接呼び出してインスタンスを設定することができる。- 各ヘルパースクリプトの概要は以下。
cfn-init
:リソースメタデータの取得と解釈、パッケージのインストール、ファイルの作成、およびサービスの開始で使用する。cfn-signal
: CreationPolicyまたはWaitConditionでシグナルを送信するために使用し、前提となるリソースやアプリケーションの準備ができたときに、スタックの他のリソースを同期できるようにする。cfn-get-metadata
: 特定のキーへのリソースまたはパスのメタデータを取得するために使用する。cfn-hup
: メタデータへの更新を確認し、変更が検出されたときにカスタムフックを実行するために使用する。
CloudFormationテンプレートでLambdaを作成する際のソースコードを指定するパラメタ
- リソースタイプに
AWS::Lambda::Function
を使用して以下をいずれかを指定する。ZipFile
- Lambdaに配備するソースをテンプレートファイルに直接コーディングする。
- Node.jsまたはPythonで依存関係がない場合のみ利用可。
S3Bucket
とS3Key
- Zip形式に圧縮してS3に格納したソースを利用して展開する。
API Gatewayと連携しているLambdaを既存バージョンと並行して新APIバージョンのテストを行う方式
- Canaryリリースを行うことで既存バージョンと並行して新バージョンを稼働することができる。Blue-Greenデプロイメントとの違いは以下。
- Canaryリリース:一部の利用者に新しいバージョンを公開してテスト行い、OKだった場合に全利用者に公開する。
- Blue-Greenデプロイメント:初めから全利用者に公開する。
- Canaryリリースするには大きく分けてLambdaで実施するか、API Gatewayで実施するかの2パターンある。
- Lambdaパターン:Additional versionオプションを利用して新旧のバージョンの呼び出し割合を指定する。
- API Gatewayパターン:ステージエディタの「Canary」タブで設定を行う。
CodeDeployでロールバックした時のデプロイIDについて
- CodeDeployでは前のリビジョンを再デプロイすることでロールバックを行うため、デプロイIDは新しいものが付与される。
EC2インスタンスの作成・削除のアクションの実行権限を確認するオプション
-dry-run
オプションを使用してアクションに必要な権限があるかどうかを確認する。
Kinesis Data StreamsでProvisionedThroughputExceededExceptionが発生した時の対応
- ProvisionedThroughputExceededExceptionが発生する原因として考えられるのは以下。
- データリクエストに関与するシャードのプロビジョニングされたスループットが不十分であるため、PutRecord要求を処理できない。
- GetRecord処理に対応するパフォーマンスがない。
- 対応は以下。
- エクスポネンシャルバックオフを実施し、再試行をする際の待機時間を徐々に長くすることでリクエストの成功率を高める。
- Lambdaを使用してGetRecord処理でのデータ取得(バッチ処理)を並行化する。
X-Rayのアクセス権限が付与されたLambdaからのデータが取得できない時の対応
- AWS X-Rayトレースが有効化されていない可能性が高いため有効化にする。
Elastic Beanstalkで大規模なEC2インスタンスの依存関係の検証でデプロイ時間が長くなる時の対応
- CodeBuildの最後の段階でソースコードの依存関係をバンドルする。
AWS上の複数アプリケーションの中央ロギング環境を展開できるAWSサービス
- CloudFormationを使用して中央ロギングソリューションをデプロイする。
- テンプレートが用意されている。
X-Rayトレースのデータにフィルター式で利用するインデックスを付与する
- key-value形式で追加情報の設定が可能な
Annotation
を利用する。
SAM上でS3バケットの読み取りアクセスを付与するポリシーについて
- SAMには多くのポリシーテンプレートが用意されており、その中から適切なテンプレートを選択する。
- S3バケットのオブジェクトをアクセス許可するには
S3ReadPolicy
を利用する。
- S3バケットのオブジェクトをアクセス許可するには
DynamoDBのグローバルセカンダリインデックスに対するプロビジョニング済みスループットに関する考慮事項
- グローバルセカンダリインデックスの書き込み・読み取り処理はベーステーブルの書き込み・読み取り処理よりも多くのキャパシティを消費するため、多くのRCUとWCUをプロビジョニングしないとスロットルが発生して障害となる可能性がある。
CodeDeployでLambdaをデプロイする際のライフサイクルイベントとフックについて
- CodeDeployでLambdaをデプロイする際のイベントの実行順序
Start
→BeforeAllowTraffic
→AllowTraffic
→AfterAllowTraffic
→End
- フック可能なイベント
BeforeAllowTraffic
- トラフィックがデプロイされたLambda関数のバージョンに移行する前にタスクを実行する。
AfterAllowTraffic
- トラフィックがデプロイされたLambda関数のバージョンに移行した後でタスクを実行する。
DynamoDBでProvisionedThroughputExceededExceptionが発生した際の対応
- DynamoDBテーブルに対してリクエストスループットがプロビジョニングされた容量を超えた場合にProvisionedThroughputExceededExceptionエラーが発生する。
- ProvisionedThroughputExceededExceptionの対応として以下が考えられる。
- 再試行とエクスポネンシャルバックオフを使用して、リクエストの頻度を少なくする。
- I/Oリクエストを均等に分散するリファクタリングを実施する。
- 読み込みキャパシティモードを結果整合性も出るのクエリ処理を実施することでスループット容量を少なくする。
EC2インスタンスで実行するシェルでEC2のIPアドレスを取得する方法
http://169.254.169.254/latest/meta-data/
に対してcurlやGetコマンドを使用してメタデータを取得することが可能。
クライアント暗号化キー(SSE-C)によるサーバーサイド暗号化が設定されたS3バケットへアップロードする際のリクエストヘッダー
x-amz-server-side-encryption-customer-algorithm
- 暗号化アルゴリズムとして
AES256
を指定する。
- 暗号化アルゴリズムとして
x-amz-server-side-encryption-customer-key
- データを暗号化・復号化するために暗号化キーのbase64を指定する。
x-amz-server-side-encryption-customer-key-MD5
- メッセージの整合性を確認するため暗号化キーのMD5を指定する。
マイクロサービスアーキテクチャのアプリケーションのX-RayトレースデータからトレースIDとトレースのリストを取得する方法
- GetTraceSummaries API
- アプリケーションのトレースIDのリストを取得する。
- BatchGetTraces API
- トレースのリストを取得する。
PutTraceSegments APIを使用してセグメントドキュメントをX-Rayに直接送信する方法
- セグメントドキュメントをX-Rayに直接送信するカスタムコードを開発するためには、サブセグメントを利用する必要がある。
- サブセグメントにメタデータオブジェクトを含めることで追加のカスタムデータを設定することが可能。
モバイルゲームアプリケーションを利用するゲストユーザーに一時認証情報を提供するための設定
- Amazon Cognito IDプールで一時クレデンシャルキーの発行することができる。
- Cognitoで認証されていないIDに対してアクセスを有効にする設定をする。
既存のGitリポジトリをCodeCommitリポジトリに移行する方法
- 以下の手順を実施する。
- CodeCommitに必要な初期セットアップ。
- CodeCommitリポジトリを作成。
- リポジトリをクローンし、CodeCommit にプッシュ。
- CodeCommitリポジトリのファイルを表示。
- CodeCommitリポジトリをチームと共有。
新しいバージョンのアプリケーションをCLIでElastic Beanstalkにデプロイする方法
eb deploy
コマンドを利用してzipファイル化されたソースをデプロイする。
API GatewayでAPIキャッシュを有効にしたアプリケーションで指定期間内にバックエンドから提供されたリクエスト数をモニタリングする
- CloudWatchで
CacheMissCount
メトリックスを使用する。- APIキャッシュが有効になっている指定された期間内にバックエンドから提供されたリクエストの数。
- 主なAPI Gatewayのメトリクスは以下。
IntegrationLatency
:API Gatewayからバックエンドのレスポンスを受け取るまでの時間。Latency
:API Gatewayがクライアントにレスポンスを返すまでのAPIの全体の時間。CacheHitCount
:指定期間内にAPIキャッシュから配信されたリクエストの数。
CodeCommitへのアクセスするための認証情報の設定
- CodeCommitへのアクセス許可の方法として以下がある。
- HTTPS Git認証情報を生成する。
- 新しいSSHキーを生成して公開SSHキーを開発者の各IAMユーザー割り当てる。
DynamoDBの書き込み要求で消費する書き込みキャパシティーを返答するパラメタ
- 消費される書き込みキャパシティーユニット(WCU)の数を返却するには
ReturnConsumedCapacity
パラメタを使用して以下を設定する。TOTAL
:消費された書き込み容量単位の総数を返却。INDEXES
:消費された書き込み容量単位の総数と、テーブルおよびオペレーションに影響を受けたセカンダリインデックスの小計を返却。NONE
:書き込み容量の詳細は返却されない。(デフォルト)
Lambda + API Gateway + DynamoDBで504エラーが発生した際の可能性の高い原因
- Lambdaの処理時間がタイムアウト値を超過したため
INTEGRATION_TIMEOUT
エラーが発生した。- タイムアウト値は50ミリ秒〜29秒で設定可能。
- ゲートウェイレスポンスのタイプでデフォルトで504エラーとなるのは以下。
INTEGRATION_TIMEOUT
:統合がタイムアウトした場合のゲートウェイレスポンス。INTEGRATION_FAILURE
:統合が失敗した場合のゲートウェイレスポンス。
CloudFormationで複数AWSアカウントやリージョンを横断したリソース展開する方法
- CloudFormationスタックセットを利用することで複数アカウントや複数リージョンにまたがってスタックを作成することが可能。
EC2インスタンスの平均RAM使用量をCloudWatchメトリクスとして利用する方法
- カスタムメトリクスを作成し、PutMetricData APIを使用してCloudWatchにカスタムメトリクスを登録する。
- 設定できるカスタムメトリクスは以下。
- メモリ使用率
- ディスクスワップ使用率
- ディスクスペース使用率
- ページファイルの利用
- ログ収集
API Gatewayでエンドポイントへの呼び出し回数を減らしパフォーマンスの改善する方法
- APIキャッシュを有効にして、エンドポイントのレスポンスをキャッシュする。
- APIキャッシュの設定項目は以下。
- 有効期限 (TTL) :0~3600秒(デフォルト300秒)
- キャッシュ最大サイズ:1048576バイト
RDSの拡張モニタリングで取得可能になるメトリクス
- DBインスタンスが実行されているオペレーティングシステム(OS)のリアルタイムのメトリクス情報が取得可能。
まとめ
AWS認定デベロッパーアソシエイトの学習記録でした。
今月末に受験する予定でしたが模試とスコアが合格ラインに達していないのでもうしばらく学習を続けます。
DVAは出題範囲がSAAと被っているサービスが多いということで軽めの気持ちで挑戦してみましたがなかなか思うようにいかないですね。
とは言えコツコツと勉強していきます。
スポンサーリンク
スポンサーリンク