😊

AWS Developer Associate

に公開

VPCフローログ

  • VPC内のトラブルシュート# Secret Manager
  • APIキーを保存

Dynamo DB

BatchGetItem

1回のリクエストで複数のテーブルからアイテムを取得(読取リクエスト)

GetItem

1回のリクエストで1つのアイテムを取得

Lambdaスロットリングを解消する

Amazon SQSキューとLambdaで緩和する

特定のパーティションに大量の読み書きトラフィック

  • エラーの再試行とし指数バックオフをじっす
  • I/Oリクエストを均等に分散

特定の属性サブセットだけを取得するAWS CLIオプション

-projection-expression (projectionは投影の意味。カラムを選ぶ。)

グローバルセカンダリインデックス(GSI)

  • テーブルとはパーティションキーまたはパーティション/ソートキーが異なるインデックス
  • 特定の属性に基づいて検索が多い場合に、その属性のGSIを作成することでパフォーマンス改善
  • 強整合性保証オプションをサポートしない

ローカルセカンダリインデックス(LSI)

  • テーブルとパーティションキーは同じだが、ソートキーが異なるインデックス
  • テーブル作成時のみ作成可能なため、ソートキーを追加するような場合な、新規テーブルを作成しコピーする
  • 強整合性保証オプションをサポートする

スループットの効率化

カーディナリティ(一意性)が高いパーティションキーを使用する
=フィールドが多様性を持つこと
=各レコードがユニークな値を持つ可能性が高い

セッション情報管理

TTLを設定して有効期限を設定する

読み込み消費量

  • クエリオペレーション
     - 結果整合性 :小
     - 強力な整合性:中
  • スキャンオペレーション
     - 結果整合性 :中
     - 強力な整合性:高

キャパシティユニット

  • RCU:強力な整合のある読み込みでは1RCUで1回、結果整合のある読み込みでは1RCUで2回
    1つあたりの読み込み単位は4KB(超える場合は切り上げられる(5KBなら8KB(2RCU必要)として考える))
  • WCU:1秒当たりの書き込み

Dynamo DBストリーム

テーブルに対する変更(項目の追加、更新、削除)をリアルタイムでキャプチャしてストリームとして提供する。これにより、DynamoDBのテーブルで発生した変更を他のサービスやアプリケーションでリアルタイムに処理することができる。

  • リアルタイムに変更を読み込む
  • 変更をトリガーにLambdaを呼び出すことも可能

UnprocessedKeysエラー対応

  • 指数バックオフとランダム化された遅延
  • 読み取り容量を増やす

パーティション

パーティションキーの値に乱数を追加して分散することでスループットを改善する

Amazon Macie

SensitiveData:S3Object/Financialで口座情報やクレジットカード情報を検出

Lambda

VPCリソースにアクセスさせる

AWSLambdaVPCAccessExcecutionRoleをLambda実行ロールに付与

外部ライブラリを使う

Lambdaレイヤーを使う

容量の小さい(10MB未満)一時ファイルを使う

/tmpディレクトリを使う

DBの接続先の情報

環境変数を使う

条件付き書き込み機能

条件により書き込みを許可、拒否する

RDSアクセスが遅い

データベース初期化ロジックをコアロジックから分離し、再利用可能とする

定期的に実行する

Amazon EventBridgeルールを作成する

開発環境のLambdaが本番環境にアクセスしてしまう障害が起きないようにする

開発環境と本番環境でAWSアカウントを分ける

ログの解析

  • console.logメソッドを追加し、CloudWatch logs APIのPutLogEventメソッドで転送し、- CloudWatch logs Insightで解析

前回の処理結果を利用する

Amazon ElastiCacheに保存して、関数初期化時に利用する

lambda:InvokeFunction

AWS LambdaのIAMポリシーアクションの一つで、あるIAMユーザーまたはロールがAWS Lambda関数を実行(呼び出し)できる権限を与える

C言語の利用

デフォルトでランタイムが用意されていないためカスタムランタイムを含むレイヤーを用意する

Lambdaオーソライザー

  • API Gatewayで使用可能な認証機能
  • APIリクエストに対する認証と承認を行う(OAuthやSAML等を実装するのに適している)

ベストプラクティス

  • ハンドラー処理を分離(可読性向上、単体テストしやすくなる)
  • 再帰的な処理をしない(意図しない呼び出しにより高額となる場合がある)

フォールバック制御

Lambdaの失敗時、失敗イベントからフォールバック用のLambdaを呼び出す

格納場所まとめ

  • Lambdaレイヤーは、共通のライブラリやコードを複数のLambda関数で共有するために使用します。
  • /tmpディレクトリは、Lambda関数の実行中に一時的なデータやファイルを保存するために使用します。
  • ZIPファイルは、関数コードや依存ライブラリをまとめてデプロイするために使用します。
  • 環境変数は、アプリケーションの設定や秘密情報をコード内に埋め込まずに管理するために使用します。

Cloud Formation

複数のリージョンにリソースを配置する

AWA CLI create-set-stack-setコマンドで目的のリージョンにスタックセットを作成する

AWS X-Ray

  • AWS X-Rayデーモンをオンプレミスサーバにインストールし、X-Rayにリレーする
  • X-Ray SDKでアプリケーションを手動制御できる(PIIをEC2外に送信されるのを防ぐなど)

トレースの取得

  • GetTraceSummaries API:トレースIDのリストを取得
  • BatchGetTraces API :トレースデータを取得

ECR

  • イメージスキャン機能で脆弱性を検査できる
  • CodePiplineで本機能を使うようにする

Amazon Machine Images(AMI)

暗号化するには一度削除して再作成する

Amazon S3

S3 Object Lambda

S3のデータ取得コードを作れる

EC2からS3にアクセスするための条件

  • S3にアクセス許可とするIAMロールを作成し、EC2に付与
  • S3バケットポリシーでアクセス許可

S3ReadPolicy

AWS SAMでS3バケットのRead権限

暗号化通信(HTTPS)のみを許可する

S3バケットポリシーで"aws:SecureTransport"が"false"を拒否する

ユーザ自身の領域のみアクセス可能とする

Amazon Cognito IDプレフィックス内のIAMポリシーを利用

大量データの検索

Amazon OpenSearch Serviceを利用

クロスオリジンリソース共有(CORS)

クロスオリジンアカウントからの通信を許可

SSE-S3

  • Amazon S3が暗号化と鍵管理しオブジェクトレベルで暗号化
  • HTTPヘッダーにx-amz-server-side-encryption:AES256を指定してアップロード

S3 Object Lambda

AWS Lambda 関数を使用して、標準 S3 GET、HEAD および LIST リクエストの出力を処理

S3イベント通知

PUT、POST、COPY、DELTE、マルチパートアップロードイベントのみで発動可能
(GETリクエストでは発動しない)

CloudWatch

  • CloudWatch Metrics AWSリソースやアプリケーションのパフォーマンスデータを収集、可視化。
  • CloudWatch Alarms メトリクスに基づいて閾値を設定し、アラームを発火させて通知。
  • CloudWatch Logs アプリケーションやシステムのログを収集、保管、分析。
  • CloudWatch Logs Insights ログデータをインタラクティブに分析、クエリで迅速に問題特定。
  • CloudWatch Dashboards メトリクス、ログ、アラームを視覚的に表示するカスタマイズ可能なダッシュボード。
  • CloudWatch Events システムイベントに基づいたアクション(Lambda起動、SNS通知)をトリガー。
  • CloudWatch ServiceLens 分散トレーシングと統合監視でアプリケーションのパフォーマンスをトラッキング。
  • CloudWatch Contributor Insights リソース使用状況やトラフィックパターンを分析、ボトルネックを特定。
  • CloudWatch Synthetics ウェブアプリやAPIの可用性とパフォーマンスを合成リクエストで監視。
  • CloudWatch Evidently サーバーレスアプリのA/Bテストや機能フラグを管理、効果測定。

VPC

VPC間の通信ができない場合は、セキュリティグループの許可を行う

Amazon Secrets Manager

  • APIの認証情報などを保存
  • 認証情報をローテーションできる

Amazon Systems Manager

  • パラメータやパスを保存
  • パラメータストアには無料枠がある
  • 1回きりのライセンスキーの保存に適している

Elastic Beanstalk

.ebexentionsファイル

アプリケーションを機能させるのに必要なオプションを記載

ワーカー環境

時間のかかる処理をワーカー環境に任せる

ローリングデプロイのバッチ

バッチサイズずつ新しいバージョンをデプロイする

デプロイ

CloudFormationのスタックで環境を管理し、CodeDeployでデプロイ

オートスケーリング

CPU負荷状況などのアプリケーションの負荷をモニタリングし、スケーリングする機能がある

Amazon EMR

Apache HadoopやApache Sparkなどのオープンソースツールを利用した、ビッグデータの分析

Amazon SQS

  • ロングポーリングを使うとキューにメッセージが無いと待機する
    (問い合わせ頻度が低下し、コスト削減効果がある)
  • FIFOキューで重複排除IDを用いて重複しないようにする
  • FIFOキューでメッセージグループIDを用いて順序制御する
  • メッセージ処理後、SQSキューを削除することでタイムアウトによる再処理の誤動作を防止する

API Gateway

API Gateway Websocket API

  • クライアントとバックエンドの双方向通信が可能
  • 接続と切断を繰り返す場合、ElastiCacheでステータスを追跡、connectとdisconnectルートを作成する

Lambdaカスタム統合

  • APIメソッドをLambdaに連携
  • Lambdaの処理が長期化(29秒以上)している場合INTEGRATION_TIMEOUTエラーが発生する
  • 統合リクエスト、統合レスポンスを構成する

API Gatewayプロキシ統合

  • Lambdaからのレスポンスは特定の形式に従う必要がある(正しくないと502 Bad Gatewayエラー)
  • 統合リクエストは構成するが、統合レスポンスは構成しない

キャッシング機能

バックエンドから指定したTTLの期間キャッシュして、応答時間を改善

バックエンドを呼び出すことなく、バックエンド応答をシミュレート

  • リクエストマッピングテンプレートを用いてモックインテグレーションレスポンスを選択する
  • /mockにリクエストすることで、マッピングテンプレートをレスポンスする

メソッド確立後にクライアントとバックエンドが直接対話

HTTP_PROXYを利用

AWS Route 53

加重ルーティングポリシー

手動で分配

レーティングベースのルーティングポリシー

レイテンシを考慮してリクエストを処理

タイムアウト時に確認すべきCloud Watchのメトリクス

  • integrationLatency:API Gatewayを通過しバックエンドに到達し、応答が処理されるまでの時間
  • Latency:クライアントからリクエストが発行されクライアントに返るまでの時間

Amazon Kinesis

スパイクがありPutRecords APIコールが失敗するときの対応

  • 指数バックオフで再実行
  • リクエストの頻度やサイズを減らす

Amazon RDS

バックアップ

自動バックアップは最長35日間。それ以上はAmazon EventBridgeスケジュールとLambdaで定期バックアップを取得する。

実行時間の長いSQLを探す

スロークエリログを有効化

暗号化

  • DBインスタンス作成時に暗号化
  • 透過的データ暗号化(TDE)を利用
    (透過的: ユーザーやアプリケーションはデータが暗号化されていることを意識しない)

too many connectionsの対応

RDS Proxyを使いコネクションプールを作り、確立したコネクションを再利用することでDBが効率化する

Amazon Kinesis Data Streams

同一データを重複して送ってしまうときの対応

レコードに主キーを設定(一意制約違反)

データの処理順

FIFOであるが、シャード間の順序は考慮されない

Lambdaでレコードを処理する場合、IteratorAgeメトリックが増加し、Lambda実行時間が長くなる

  • Kinesisデータストリームのシャード数を増やす
  • Lambdaのメモリを増やす

データ保存期間

デフォルトは24時間で最長は7日間。24時間以内に処理が完了しないと、一部のデータは削除されるため保存期間を延長する必要がある。

暗号化

サーバ側の暗号化を用いて暗号化できる

AWS KMS

AWS KMSキーを使用したS3の暗号化

アップロードリクエストにaws:kmsの値を持つx-amz-server-side-encryptionヘッダーを含める

暗号化できる最大データサイズ

4kバイト

CloudFormation

  • AWS SAMを利用する場合は、Transformセクションでバージョンを指定する(ドキュメントルートに含める)
  • スタックのエクスポート名はAWSアカウント単位のリージョン内で一意である
  • Lambdaのコード配置はZipFileで指定する
  • 他リージョンのAMI IDの参照、スタック作成不可
  • リソースにパスワードを設定する場合は、Secrets Managerのシークレットとしてパスワードを生成する
  • AllowedValuesに承認対象のインスタンスタイプを指定できる
  • DeletionPolicy:Reain(Retainポリシー)でリソースの削除を防止
  • スタックポリシー: スタック更新や削除時に特定のリソースを保護するためのポリシー。
  • Retainポリシー: スタック削除時に特定のリソースを残すためのポリシー。
  • S3のLambda関数(ZIP)を指定する際は、S3Bucket、S3Key、S3ObjectVersionを指定する

セクション

  • Parametersセクション:入力された値に基づいてプロビジョニング
  • Outputsセクション:他のスタックからの値を参照

ECSのクラスタ名

クラスタ名を/etc/ecs/ecs.configに記述する

共通パターン

ネストされたスタックを利用する

複数リージョンへのデプロイ

Fn::FindInMap:[MapName,TopLevelKey,SecondLevelKey]で設定

ローカルでLambdaをテスト

cdk syncコマンドAWS CDKをCloudFormationと合成、sam local invokeコマンドで関数構成識別子とCloudFormationパスを指定。

疑似パラメータ(Pseudo parameters)

テンプレート内で動的に取得できる特殊なパラメータで、ユーザーが明示的に指定することなく、CloudFormationによって自動的に設定される。これらは、スタックの作成や更新時にCloudFormationが自動的に解決し、リソースの設定やプロビジョニングに役立てることができる。

RDS Rroxy

Amazon RDSの接続数が多い場合に接続処理を効率化

Amazon Aurora

カスタムエンドポイント

トラフィックを振り分けることができる(例:顧客操作、スタッフ操作)

ElastiCache

ElastiCache for Memcached

  • セッションデータを管理
  • マルチスレッド
  • write-throughキャッシュはDB書き込みと同時にキャッシュ

ElastiCache for Redis

  • シングルスレッド
  • 静止時と転送時の暗号化をサポート

#Amazon SQS

可視性タイムアウト

SQS のキューに入ったメッセージが処理開始直後に重複して処理されないように処理中の場合、一時的に他のプロセスからは、メッセージが存在していることを見えないようにする設定

AWS IAM

MFA認証で一時的な認証情報を使用

GetSessionToken APIを利用する

Amazon CloudFront

ビヘイビア

URLのパスで振り分けを行う。(認証の要否設定などを行うことができる)

Elastic Load Balancing

Application Load Balancer

  • Cookieフィールドによるルーティングが可能(βバージョンのテストなどに利用)
  • X-Forwarded-ForヘッダーでバックエンドサーバにクライアントのIPアドレスを渡す

Amazon Cognito

Cognito Syncでユーザプロファイルを同期

ユーザプールとIDプール

  • ユーザプール:認証
  • IDプール :認可、一時的な認証情報を発行

Amazon OpenSearch Service

AWS StepFunctions

  • データフローのオーケストレーションを管理
  • ワークフローを作成し順番に処理、エラー時の再処理等

AWS KMS

KMS GenerateDataKey API

データキーを取得し、暗号化できる

AutoScaling

EC2のメモリ使用率に基づいてオートスケーリングする方法

CloudWatchのカスタムメトリクスを作成し、PutMetricDataを使用してアラームを作成する

AWS SAM

サーバーレスアプリケーションを簡単に定義、構築、デプロイするためのフレームワーク
ロールバック機能もある

AWS SAMテンプレート

  • AWS::Serverless::Function
  • AWS::Serverless::Api
  • AWS::Serverless::SimpleTable

SAMのデプロイ

$ sam package
リソースをZip化してS3にアップロード

$ sam deploy
パッケージ化されたリソースをデプロイ

AWS CLI

リージョンの指定

-regionオプションを利用する

出力項目の最大値設定

-max-itemsオプションを利用する

出力項目の項目数制限

-page-sizeオプションを利用する

IAMアクセス権限を設定する

aws configure CLIコマンドでIAMアクセスキーIDとシークレットキーを指定する(~/.aws/credentials)

ecs create-serviceコマンド

--service-nameオプション :サービス名
--task-definitionオプション:タスク定義名
--desired-countオプション :稼働するコンテナ数

ロールの切り替え

-profileパラメータ

AWS X-Ray

サンプリングリクエスト数
= リザーバーサイズ+(1秒当たりの着信リクエスト - リザーバーサイズ)×固定レート

  • リザーバーサイズ: 1秒間で記録する数
  • 固定レート: リザーバサイズを超えた分の記録する割合

Amazon ECS

IAMロールを許可するための設定

ECS_ENABLE_TASK_IAM_ROLE=True

binpack戦略

CPUやメモリのリソースに基づき最小となるように配置

Spread戦略

インスタンスまたはAZに対して均等になるように配置

AWS CodeBuild

  • ビルド出力アーティファクトを暗号化する場合はカスタマーマネージドキーを指定する(-encryption-key)
  • Build Spec fileにビルドの設定を記述する。ローカル環境で施行する。

AWS CodeDeploy

  • オンプレミスサーバにもアプリケーションをデプロイできる
  • AppSpec fileでインスタンスで実行されるスクリプトを指定できる
  • CodeDeployDefault.ECSCanary10Percent15Minutes
    .appspecでデプロイ設定を定義

AWS Amplifyホスティング

  • 継続的なデプロイでフルスタックのサーバーレスウェブアプリケーションをホストするための Git ベースのワークフローを提供
  • ブランチへのマージを検出して自動デプロイ-
  • amplify.yamlでビルド設定する(ビルド時にテストフェーズを使いする等)

AWS認証プロバイダ

環境変数>IAMロールの優先度する(IAMロールで拒否していても環境変数で許可していたら許可となる)

Amazon EventBridge

S3イベントよりも高度な処理設定が可能

中央アカウントで集中イベント管理

  • レシーバアカウントへのアクセス権限
  • EventBridegeルールのターゲットにレーシーバーアカウントのイベントバスを指定

その他

パブリックIPv4アドレスを知る方法

http://xxx.xxx.xxx.xxx/latest/meta-data/からインスタンスメタデータを確認(CurlやGetコマンドを利用)

テストフェーズ

ビルド仕様amplify.ymlで設定できる

デプロイメント

All at onece

新旧の一括切り替え

Rolling Deployment(ローリングデプロイメント)

  • 新旧並行稼働し、1つずつデプロイメント
  • デプロイ中は新旧が混在

Immutable Depoyment(イミュータブルデプロイメント)

  • バランサ配下に新を段階的にデプロイ
  • ローリングデプロイは、段階的にアップデートする方法であり、イミュータブルデプロイは新しいインスタンスを完全に使ってアップデートする方法です。

Blue Green Deployment(ブルーグリーンデプロイメント)

新をデプロイメント後に、DNS切り替え

カナリアリリース

API Gateway配下(ステージ変数で制御)で新旧Lambdaを用意(エイリアスで制御)

インプレースデプロイメント

稼働環境にデプロイ
CodeDeployの実行順(AppSpec.yamlに設定)
ApplicationStop→(DownloadBundle)→BeforeInstall→AfterInsatall→ApplicationStart→(ValidateService)

署名付きAWS APIリクエスト

・Authorization HTTPヘッダーに署名を追加する
・X-Amz-Signatureクエリ文字列に署名を追加する

Discussion