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でステータスを追跡、
disconnectルートを作成するconnectと
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アドレスを知る方法
テストフェーズ
ビルド仕様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