アフィリエイト広告を利用しています

アフィリエイト広告を利用しています

2025年6月4日水曜日

AWS認定デベロッパーアソシエイト 個人的メモ

Amazon API Gateway 

Amazon API Gateway の新しいバージョンのAPIを作成し、別のデベロッパーに対してAPIへのアクセスを提供する場合は既存のAPI Gateway APIで新しいステージを定義し、 エンドポイントが新しいステージをポイントするように変更する。

API GatewayにおいてHTTP 504エラーが発生するのはタイムアウトエラーの可能性が高い

API Gatewayでモック統合リクエストを設定して、統合レスポンス設定において任意のステータスコードのレスポンスを定義したレスポンスマッピングテンプレートを設定することで、特定のレスポンスに基づいたテストが実施できる

Lambda

Lambda関数の環境変数を利用することで、コードを変更することなく、関数コードやライブラリに設定値を動的に渡すことが可能

実行のたびにユニークなファイルを生成し、そのファイルをGitリポジトリにコミットする場合Lambda関数でgitとgitpythonライブラリをインストールする。Lambda関数からリポジトリにアクセスし、生成したファイルを保存するように関数コードを変更する。

Lambda関数の処理が失敗した場合には、未処理のイベントをAmazon SQSキューに送信する前に、Lambda関数を2回再試行する設定する場合、Lambda関数のDeadLetterConfigパラメーターでAmazon SQSのARNを指定する。

API GatewayとLambdaを連携させるためには、API Gatewayにステージを追加し、Lambda関数の環境設定を関連付ける場合、ステージ変数Lambda エイリアスを追加する。

Lambda関数をAWS CLIから実行するためにシェルスクリプトを追加したが、そのシェルスクリプトを実行した際にLambda関数がInvalidParameterValueExceptionエラーを引き起こした。考えられる理由は、AWS Lambdaが引き受けることができないCreateFunction APIでIAMロールを提供している。

DynamoDB

個々の書き込み要求に対して、対象テーブルおよびセカンダリインデックスの値を返す機能を実現するには書き込み要求に対して、ReturnConsumedCapacityパラメーターINDEXESの値を追加する設定を行う。


DynamoDBテーブルにデータが過剰に蓄積されないように、RecordDate属性を活用して古いデータの削除する場合、DynamoDBテーブルのRecordDate属性にタイムスタンプを利用してデータ取得日時を記録する。RecordDate属性に対してTTLを有効化する。

読み取り容量ユニット(RCU)の使用量が増加し、ProvisionedThroughputExceededExceptionエラーが発生しています。DynamoDBの読み取りモデルはデフォルトの設定が選ばれています。主キー値に基づいてアイテムを検索し、RCUの使用量を最小限に抑えるには結果整合性モデルのクエリ処理を実施する。

Kinesis Data Streamを用いてデータ処理を行い、その後DynamoDBテーブルにデータを転送しています。しかし、DynamoDBテーブルへの書き込み操作の際に、定期的にスパイクが発生し、次のようなエラーが生じている場合のコスト最適な対処として、エラーの再試行と指数バックオフ(Exponential Backoff)を実装する。I/O リクエストを均等に分散するリファクタリングを実施する。

Cloud Front

ビューアとCloudFrontの間でHTTPS通信を設定する必要があり、Application Load Balancer (ALB) にターゲットとして登録されたLambda関数に複数のヘッダー値を送信する場合、ALBで複数値ヘッダーを有効にする。CloudFrontのビューアプロトコルポリシーにRedirect HTTP to HTTPSまたはHTTPS Onlyを設定する。

Webディストリビューションのキャッシュヒット率を向上させるための対策は、オリジンが一意のオブジェクトを返すクエリ文字列パラメータのみを転送するように CloudFront ディストリビューションを設定する。Cache-Control max-age に対して最も長い実用的な値を指定するようにオリジンを設定する。

AWS SAM

CloudFormationテンプレートを準備して、Amazon S3バケットを利用したデプロイはテンプレートをAmazon S3 バケットにパッケージ化して保存する。このS3バケットを指定してテンプレートをデプロイする。テンプレート内のAWS::Serverless Transform設定において AWS SAMのバージョンを指定する。

ElastiCache

■遅延読み込み戦略 :必要な際にのみキャッシュにデータを読み込む方式

■書き込みスルー戦略 :データがデータベースに書き込まれる際、常にデータを追加するか、キャッシュ内のデータを更新する


ElastiCacheに格納されたユーザーセッションデータをデプロイごとに新たに作成するには「.ebextensions /」で定義する。

AWS Elastic Beanstalk

AWS Elastic Beanstalk上でホストされているアプリケーションに対して、X-Rayコンソールを使用してリクエストのトレース設定する

AWS Elastic Beanstalkにおけるアプリケーション環境の環境名、ソリューションスタック、および環境リンクの設定はenv.yamlファイルに設定する

Beanstalk コンソールにおいてオプションを選択して、X-Rayデーモンを有効にする。

ソースコードの.ebextensionsディレクトリにxray-daemon.config構成ファイルを含めることにより、X-Rayデーモンを有効にする。

アプリケーションの複数のバージョンがAWS Elastic Beanstalk上で稼働できるように、デプロイプロセスを設定するには本番環境の設定と同じ構成をした環境設定を追加する。

デプロイのパフォーマンスを向上させるためには、CodeBuildの最後の段階でソースコードの依存関係をバンドルする。

繰り返しタスクやスケジュールされたタスクセットを非同期で実行することが求められます。Elastic Beanstalkを活用した効果的なデプロイ手法はワーカー環境cron.yamlファイルを設定する。

Elastic Beanstalk環境においてHTTPSエンドポイントを公開する場合、ebextensionsディレクトリにalb-secure-listener.configファイルを設定してHTTPS通信を構成する。Elastic Beanstalk コンソールにおいて、ALBのHTTPSリスナー設定を実施する。

X-Ray

X-Rayを使用する際の考慮事項は、サブセグメントを作成して、AWS サービスと AWS SDK で作成するリソースへの呼び出しを記録することができる。メタデータオブジェクトに、セグメントに保存する追加のカスタムデータを設定する。

適切なセグメント検索やトレースを実施するために、AWS X-Rayの適切な設定方法の組み合わせはX-Rayコンソールにおいてフィルタ式を選択する。GetTraceSummaries APIを使用して、特定の情報に関連付けられたセグメントを検索する。

X-Rayを利用してアプリケーションの応答時間を計測する設定を行う場合、X-Rayトレースを有効にして、十分な使用データを蓄積した後、X-Rayトレースマップを使用してアプリケーションの応答時間を確認する。

CloudWatch

CloudWatchでCPU使用率を取得するにはカスタムメトリクスを定義する。

CPU使用率を10秒ごとに把握するにはCloudWatchの高解像度メトリクスを設定する。1分のデータであれば標準の解像度とする。

実行中の例外的なエラーがログメッセージが記録されている。これらのログメッセージをほぼリアルタイムで監視するためには、Lambda関数を呼び出すサービスでX-Ray のトレースを有効にする。例外発生前と例外発生中のコード内の特定位置への呼び出しの頻度を表示する。

APIコールの応答性とLambdaファンクションの応答性をモニタリングする設定は、Latencyメトリクスを監視して、API呼び出しの全体的な応答性を測定し、IntegrationLatencyメトリクスを監視して、バックエンドの応答性を測定する。

Amazon SQS

Amazon SQSの、FIFOキューの順序を確保するための設定は、メッセージグループIDの値をClient_idに設定する

イベントが発生した場合にトリガーとなるメッセージを送信し、それを自動的に処理するコンピューティングの設定する場合、Amazon SNSトピックとイベント処理用のAWS Lambda 関数を作成する。 Lambda 関数をSNSトピックにサブスクライブし、イベントをSNSトピックに送信する。

SQSキューメッセージの暗号化は、SQS マネージド暗号化キー (SSE-SQS) または AWS Key Management Service (SSE-KMS) を利用して、SQSキュー内のメッセージの保管時の暗号化を有効にする。Secure Sockets Layer (SSL) またはクライアント側の暗号化を使用して、転送中のデータを保護する。

AWS CodeBuild

アプリケーションのソースコードはGitHubリポジトリに格納されており、担当デベロッパーは、このリポジトリ内のパッケージに対してCodeBuildで単体テストを実施する場合、CodeBuildの接続設定で「Githubに接続する」を選択する。ビルドプロジェクトを作成し、リポジトリのパッケージのビルドとテストを buildspecに追加する。

開発環境をAWS CodeBuildに移行し、プログラムによってビルド仕様を定義する実装は、.buildspecファイルルートディレクトリに定義する。

AWS CodeDeploy

AWS CodeDeployによるデプロイ手法を定義するYAML形式のファイルは「.appspecファイル

CodeDeployのデプロイグループを利用することで、アプリケーションのバージョン更新などのデプロイ作業を自動化することが可能

CodeDeployは、デプロイの各ライフサイクルイベントに対して以下のような処理をフックすることが可能です。 

ApplicationStop→DownloadBundle→BeforeInstall→Install→AfterInstall→ApplicationStart→ValidateService」という順序でライフサイクルイベントを設定する


AWS Code Commit

CodeCommitへのGit接続に必要なアクセス権限の設定が求められ、ローカルコンピュータ上のコードリポジトリに対するアクセス制御をする場合、新しいSSHキーを生成し、公開SSHキーを開発者の各IAMユーザーに関連付けるHTTPS Git 認証情報を設定する。


Code Pipeline

新しいバージョンの依存関係ファイルが利用可能になると同時に、パイプラインが自動的に構築されるような設定をするには、AWS CodeArtifactリポジトリを作成する。依存関係ファイルをこのリポジトリに保存して共有する。Amazon EventBridgeルールを使用して、新しいバージョンの依存関係ファイルが利用可能になり次第、CodePipelineパイプラインの構築を開始する。

CloudFormation

CloudFormationを使用せずにIAMロールが作成された場合に、管理者に自動的に通知するためにCloudTrailとAmazon EventBridgeルールを活用します。

AWS Lambda関数の展開用にYAML形式で作成したCloudFormationテンプレートをアップロードするための、AWS CLIコマンド

aws cloudformation deployコマンド

aws cloudformation packageコマンド

AWS CloudFormationテンプレートをデプロイする際に、AWSリージョンの変数が自動的に入力されるようにAWS::Region 擬似パラメータを使用する

S3バケットに対して個人用スペースをセットアップする場合は、 動的変数を使用してIAMポリシーを1つ作成し、全てのユーザーが属するIAMグループにアタッチする。

AWS Configルールに一致した場合に通知を実施するにはAmazon EventBriedgeルールを作成する。

別のCloudFormationテンプレートを展開しようとしています。 別のテンプレートからAmazon S3 バケットを参照する設定の組み合わせは、ImportValue組み込み関数を使用して、対象のS3バケットを参照する。最初のテンプレートの Outputsセクションに Export 宣言を追加して、Amazon S3バケットを参照できるようにする。

AWS CloudFormationスタックを作成し、リソースをプロビジョニングする。デベロッパーは、このLambda関数をローカル環境でテストする場合、cdk synthコマンドを実行して、 AWS CloudFormation テンプレートを生成する。関数のコンストラクト識別子と組み合わせたCloudFormation テンプレートへのパスを指定して、am local invokeコマンドを実行する。

テンプレート内に承認されたインスタンスタイプのリストを設定し、その中からEC2インスタンスを選択できるようにする場合は、CloudFormationテンプレートのAllowedValuesにEC2インスタンスタイプのリストを設定する。EC2インスタンス設定のProperties:内の!Ref 関数でリストを選択する。

Amazon Cognito

AWS上で画像共有サービスで、アップロード可能な画像のサイズは100KBから3MBの範囲です。画像に関連するメタデータはAmazon DynamoDBに保存される。ユーザーはこのアプリケーションを利用するために、個別のアカウントを作成する必要がある。Amazon Cognito ユーザープールを使用して、ユーザーアカウントを管理する。 API GatewayでAmazon Cognito ユーザープールオーソライザーを作成し、 API へのアクセスを制御する。写真をAmazon S3 に保存するLambda関数を作成して、Amazon API Gatewayと統合する。S3バケットに画像が保存された際のイベント通知により、別のLambda関数を実行して、 オブジェクトのS3キーを 写真のメタデータとしてDynamoDB テーブルに保存する。

ユーザーが自身のAmazon S3上のファイルにのみアクセスできるようにするには、Amazon Cognito IDプールからAmazon Cognito ID をプレフィックスとして設定した認証用のIAM ポリシーを発行して、S3バケット内の自分のフォルダのみを使用できるように制限する

ユーザーがログインした際に、企業専用のランディングページが表示されるように設定する。ソーシャルメディアを通じて認証されたユーザーに加え、認証を必要としないゲストユーザーにも一時的な認証情報を提供する

Amazon Cognito ID プールを使用して、認証されていないIDへのアクセスを有効にする。Amazon Cognitoにホストしたサインインページを作成して、 Amazon Cognito ユーザープールを設定して、認証を実施する。

AndroidとiOSの両プラットフォームで使用でき、主要なウェブブラウザでも動作します。アプリケーションには、多要素認証の実装が求められている場合、Amazon Cognitoを使用してユーザープールを作成し、そこにユーザーを作成する。そのCognitoIDプールに対して多要素認証を有効にする。

プロバイダーのSDKとAmazon Cognitoを活用して、認証を行います。この仕組みにより、アプリケーションの権限を用いてS3バケットへのアクセスが求められる場合、Amazon Cognito ユーザープールでウェブIDフェデレーションを使用して、S3バケットへのアクセスをSTSによって認証する。

AWS Step Functions

AWS Step Functionsのステートマシンをローカル環境でテストする場合、Step Functionsをエミュレートするサードパーティ製のソリューションを使用して、ローカルでのテストを行う


EC2インスタンスにEFSマウントヘルパーをインストールし、データ転送を暗号化する際のEFSのマウントに向けた適切なマウントヘルパーの設定方法

コンソールまたは実行コードによって、EFSファイルシステムIDをEFS APIから取得

マウントヘルパーユーティリティを利用した際に、暗号化オプション「-o tls」を追加

Amazon ECS

アプリケーションは最大接続数などのパラメータを設定する必要がありますが、その設定データを外部変数として変更できるように調整する必要があります。また、新機能をリリースする際は、不具合があった場合になど機能をオフにすることも必要です。Amazon ECSにAppConfigエージェントをインストールして、AWS AppConfigを使用してデプロイを管理する。デプロイ時にCanaryデプロイを設定してデプロイする。機能フラグを利用して不具合があった場合に新機能をオフにする

セキュリティ

ライセンスキーを用いてサードパーティ製ソフトウェアをAmazon EC2インスタンス上で運用する。ライセンスキーの有効期限を設定して、有効期限が切れる前に通知を受け取りたいと考えている。最もコスト効率の良いソリューションは、AWS Systems Manager Parameter Store の SecureString パラメータを利用して、ライセンスキーを管理する。パラメータポリシーを使用して、ExpirationとExpirationNotificationのポリシータイプを設定する。


AWS Private Certificate Authorityは管理されたパブリックキーインフラストラクチャ(PKI)を構築するためのAWSのサービスであり、IAMとの統合、AWS CloudTrailによる監査機能、プライベート証明書の発行、さらには下位認証局(CA)のサポートを提供

AWS Key Management Serviceは、暗号化キーの生成と管理を行うサービス

AWS Secrets Managerは、機密情報の保護、管理、及びキーローテーションを容易にするサービス

AWS Certificate Managerは、パブリックSSL/TLS証明書の取得、管理、及び展開を行うサービス

特定のマイクロサービスからVersion 4の署名付きリクエストを利用して、他のAWSサービスを呼び出し、連携させる場合、正規リクエストを作成し、署名文字列を作成して署名情報を計算する。Authorizationという名前のHTTP ヘッダーに署名を追加する。X-Amz-Signatureという名前のクエリ文字列パラメータに署名を追加する。

デベロッパーがプレーンテキストで環境変数を参照できないように設定して、セキュリティを確保する場合、Lambda関数はAWS KMSのAWS マネージドキーを利用した暗号化をデフォルトで実施する。転送中の暗号化のヘルパーを有効にして、環境変数をクライアント側で暗号化する。

AWS Amplify

AWS Amplifyを用いてウェブアプリケーションを構築しています。このアプリケーションのテストを行った結果、多くのバグが見つかりました。デベロッパーは、アプリケーションに対してエンドツーエンドテストを実施し、可能な限り多くのバグを事前に修正する場合、アプリケーションのamplify.yml のビルド設定に test フェーズを追加する。

その他

AWS環境外で動作するアプリケーションがAWSリソースにアクセスするためには、IAMユーザーの関連づいたアクセスキーが必要

AWS CLIを用いてコマンドを実行する際に、エンコードされた認証失敗メッセージが表示される問題が発生、認証が正しくデコードされるように設定を変更する場合は、AWS STS decode-authorization-messageを使用して、デコード処理を実装する。

S3バケットおよび他のAWSリソースにファイルをアップロードする度に、IAMを利用した一時認証によるアクセス許可を実施していますが、AWS STSを呼び出す際に、継続的な遅延エラーが発生した場合、APIコールの実装としてはAssumeRole APIオペレーションを使用するようにアプリケーションを更新する。



0 件のコメント:

コメントを投稿

AWS認定デベロッパーアソシエイト 個人的メモ

Amazon  API Gateway  Amazon API Gateway の新しいバージョンのAPIを作成し、別のデベロッパーに対してAPIへのアクセスを提供する場合は 既存のAPI Gateway APIで新しいステージを定義し、 エンドポイントが新しいステージをポイン...