めっちゃ歩く
フリーランスITエンジニアの
山旅系雑記ブログ
学習記録 PR

【学習記録】AWS認定デベロッパーアソシエイト学習記録⑤

AWS認定デベロッパーアソシエイトの学習記録5
<商品表示法に基づく表記>記事内にアフィリエイト広告が含まれている場合があります。

AWS認定デベロッパーアソシエイト取得に向けた学習記録です。
個人的なメモとして試験勉強で気になったところをまとめています。

目次

学習期間

  • 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

API Gateway+Lambda+DynamoDBのサーバレスアプリケーションで504エラーが発生した際の最も可能性がある原因

  • 統合タイムアウト範囲の最長29秒を超過した。
    • 実行中のLambdaの処理が29秒以上となったため、API GatewayのタイムアウトとなりINTEGRATION_TIMEOUTエラーが発生した。

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で依存関係がない場合のみ利用可。
    • S3BucketS3Key
      • 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を利用する。

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と被っているサービスが多いということで軽めの気持ちで挑戦してみましたがなかなか思うようにいかないですね。
とは言えコツコツと勉強していきます。