Amazon DVA-C02: サーバーレスと AWS Lambda — 学習ガイド

こちらの一部です: AWS Developer Associate DVA-C02 — 学習ガイド. 検証済みの解答で練習: Amazon試験ハブ, または時間制限付き模擬試験に挑戦: ExamRoll.io.

バージョン、エイリアス、レイヤー、パッケージング

Lambdaのバージョンは、PublishVersion API(例: boto3.client('lambda').publish_version(FunctionName='MyFunc'))で作成される、コードと設定の不変なスナップショットです。バージョンを使用して再現可能なリリースを提供し、その後、安定したポインタとしてエイリアス(boto3.client('lambda').create_alias または update_alias)を作成します。エイリアスは、段階的なロールアウトのためにバージョン間でトラフィックを分割するルーティング設定を持つこともできます。レイヤーは、共通のネイティブライブラリやランタイムパッケージを共有する方法を提供します。publish_layer_version を使用すると、依存関係(例:コンパイル済みバイナリ)を関数パッケージとは別に添付できるため、ビルドが小さくなり、コールドスタートが高速になります。パッケージングには、迅速なデプロイのために小さなzipアーカイブ(または大きなアーティファクトの場合はS3経由のアップロード)を優先し、大規模なバイナリやカスタムランタイムが必要な場合はコンテナイメージを採用します。docker build + aws lambda create-function --package-type Image を使用すると、ECRに保存されたイメージが登録されます(コンテナイメージははるかに大きなサイズをサポートします)。よくある落とし穴には、環境変数に認証情報を埋め込むこと、デプロイパッケージのサイズ制限を超えること、レイヤーがバージョニングされ不変であることを忘れることなどがあります。依存関係を更新するには、新しいレイヤーバージョンを公開し、関数の設定を更新します。プログラムによるロールバックを行うには、エイリアスを更新して以前のバージョンを指すようにし(boto3.client('lambda').update_alias(FunctionName='MyFunc', Name='prod', FunctionVersion='3'))、運用への影響を最小限に抑えます。

実行環境、パフォーマンスチューニング、コールドスタートの緩和

LambdaのCPUはメモリに応じてスケールするため、CPUバウンドなワークロードの改善は、通常、別のCPUノブを変更するのではなく、MemorySize設定を増やすこと(UpdateFunctionConfiguration経由)で行われます。AWS X-RayとCloudWatchメトリクスで測定し、実行時間とコストの間のスイートスポットを見つけます。コールドスタートは、パッケージサイズ、初期化コード、VPCネットワーキングの使用(ENIアタッチのレイテンシー)、および言語ランタイムに影響されます。緩和策としては、初期化処理の削減、重いライブラリのレイヤーへの移動、Provisioned Concurrency(put_provisioned_concurrency_config)の使用、または最適化されたエントリポイントを持つコンテナイメージの使用があります。VPCにアタッチされた関数では、S3/DynamoDB用のVPCエンドポイントやRDS Proxyを使用して接続のチャーンとNAT Gatewayのコストを制限し、コールドスタートのスパイクを回避します。Lambda実行ロールにAWSLambdaVPCAccessExecutionRoleマネージドポリシーが含まれていること、およびサブネットにENI用の十分なIPアドレス空間があることを確認してください。同期タイムアウトなどの落とし穴に注意してください。関数のタイムアウトをダウンストリームの依存関係よりも低く設定して、アウトバウンドの呼び出し元が一貫した障害モデルを認識できるようにし、SQS、SNS、Kinesisなどのサービスはat-least-onceセマンティクスで配信するため、リトライにはべき等性トークンを使用します。

VPCアクセス、エフェメラルストレージ、セキュリティ制御

LambdaをVPC内に配置する場合、関数の設定でサブネットIDとセキュリティグループを構成する必要があります。その後、関数はそれらのサブネット内のENIを使用し、外部サービスへのネットワークパスが必要になります。NATなしでS3やDynamoDBにアクセスするには、VPCエンドポイント(S3用はゲートウェイ、多くのサービス用はインターフェイスエンドポイント)を作成します。データベースには、接続をプールして突発的な接続作成を減らすためにRDS Proxyを優先して使用します。/tmpディレクトリは実行環境にエフェメラルストレージを提供し、呼び出し中に書き込み可能です。必要に応じてより大きなエフェメラルストレージを設定(EphemeralStorage設定)しますが、可能な限りステートレスな関数として設計してください。シークレットはAWS Secrets ManagerまたはParameter Store (SSM)に保存し、Lambdaロールに最小権限を付与することで保護します。コールドスタート時にboto3.client('secretsmanager').get_secret_value(SecretId=arn)を使用してシークレットを取得するか、関数のKMSKeyArnで指定されたKMSキーで暗号化された環境変数を使用します。開発者によくある落とし穴には、VPCエンドポイントの欠落によるタイムアウト、コードへの平文キーの埋め込み、Secrets ManagerのAPIコールスロットリングを避けるためのシークレットの効率的なローテーションやキャッシュの忘れなどがあります。

イベント統合、エラーハンドリング、ローカルテスト、デプロイ戦略

Lambdaは、S3イベント通知、DynamoDB Streams、Kinesis、SQS、API Gatewayなど、多くのイベントソースとネイティブに統合します。ストリームソースの場合、バッチサイズとparallelizationFactorを調整し、IteratorAgeを監視し、部分的な失敗を処理する必要があります。Lambdaは失敗したバッチをリトライし、エラーが持続するとダウンストリームの処理をブロックする可能性があるためです。非同期呼び出しの場合は、DLQまたは送信先を使用して失敗をキャプチャします(非同期呼び出しをonFailure/onSuccess送信先で設定します)。S3トリガーの関数では、同じバケットに書き戻す際に、オブジェクトキーをチェックするかオブジェクトタグを使用することで、再帰的な呼び出しを防ぐ必要があります。ローカルテストは、AWS SAM CLI(sam buildsam local invokesam local start-api)またはコンテナ化されたLambdaランタイムを使用するのが最適です。単体テストではmotoやローカルモックを使用できますが、統合テストは一時的なテストアカウントで実際のAWSリソースに対して実行する必要があります。デプロイでは、バージョン管理された関数とエイリアスを使用し、CodeDeployまたはRoutingConfigを指定したUpdateAliasを介してトラフィックをシフトすることで、カナリアデプロイまたはリニアデプロイを実行する必要があります。検証のためにPreTrafficおよびPostTrafficフックを実装します。典型的な落とし穴は、リトライのためのべき等性を無視すること、BatchGetItemの部分的なレスポンスを処理しないこと(UnprocessedKeysをチェック)、そして実行に過度に広範なIAMロールを使用することです。

実践的な問題:ユースケースシナリオ

シナリオ:PhotoSpot社は、S3にアップロードされた画像を処理し、メタデータをDynamoDBに書き込み、サードパーティの画像最適化APIを呼び出すPython Lambdaを実行しています。この関数には、高速なコールドスタート性能、安全なAPI認証情報、安全なロールバック、そしてメタデータエンリッチメントのためのVPCでホストされたRDSプロキシへのアクセスが必要です。

課題:ユーザーに影響のあるアップロード処理のコールドスタートレイテンシーを削減し、サードパーティのAPIキーを保護・ローテーションし、ゼロダウンタイムでの安全なロールバックと制御されたトラフィックシフトを可能にすること。

推奨アプローチ:

  1. イミュータブルなリリースをビルドして発行する:AWS CLIまたはboto3を使用してコードを更新し、次にboto3.client('lambda').publish_version(FunctionName='PhotoProcessor')を実行してバージョンを発行し、boto3.client('lambda').update_alias(FunctionName='PhotoProcessor', Name='prod', FunctionVersion='7', RoutingConfig={'AdditionalVersionWeights': {'8': 0.1}})でエイリアスを作成/更新します。
  2. コールドスタートを緩和する:エイリアスに対してboto3.client('lambda').put_provisioned_concurrency_config(FunctionName='PhotoProcessor', Qualifier='prod', ProvisionedConcurrentExecutions=10)でProvisioned Concurrencyを設定し、重いネイティブライブラリをboto3.client('lambda').publish_layer_versionで発行したレイヤーに移動します。
  3. 認証情報を保護する:サードパーティのAPIキーをAWS Secrets Managerに保存し、Lambdaロールに最小権限を付与し、コードや平文の環境変数にシークレットを埋め込むのではなく、コールドスタート時にboto3.client('secretsmanager').get_secret_value(SecretId=secret_arn)で取得します。
  4. VPCと接続処理:関数をセキュリティグループと共にプライベートサブネットに配置し、接続の枯渇を避けるためにDBアクセスにはRDS Proxyを使用し、画像読み取りでNATが不要になるようにS3用のVPCエンドポイントを作成します。

論理的根拠:バージョンとエイリアスをトラフィックシフトと組み合わせて使用することで、エイリアスの向き先を変更するだけで安全なロールアウトと即時ロールバックが可能になります。Provisioned Concurrencyとレイヤーは初期化レイテンシーを削減し、Secrets Managerは認証情報のローテーションを一元管理し、シークレットの漏洩を最小限に抑えます。RDS ProxyとVPCエンドポイントは、接続のチャーン(頻繁な切断・再接続)とNATへの依存を減らすことで、レイテンシーと運用コストを削減します。


すべてのドメイン · Amazon API Gateway とアプリケーション統合

これらの問題を練習する → · ExamRoll.ioで時間制限付き練習 →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

試験に合格する →

Amazonを閲覧 →

Related guides

オールインワンアクセス

1つのサブスクリプション。すべての試験。

すべてのプランで、無制限の回答検索、模擬試験、AI解説、および完全なリソースライブラリが利用可能 — 20以上の言語に対応。

月額
24.87
Just €0.83/day
すべて含まれています:
  • 無制限の回答検索
  • 無制限の模擬試験
  • AIを活用した解説
  • 完全なリソースライブラリ
  • 20以上の言語
  • 毎週のコンテンツ更新
  • 特典 & 紹介
  • 優先サポート
無料トライアルを開始

クレジットカード不要*

ベストバリュー
12ヶ月
179.87
Just €0.49/daySave 40%
すべて含まれています:
  • 無制限の回答検索
  • 無制限の模擬試験
  • AIを活用した解説
  • 完全なリソースライブラリ
  • 20以上の言語
  • 毎週のコンテンツ更新
  • 特典 & 紹介
  • 優先サポート
無料トライアルを開始

クレジットカード不要*

✓ 無料プランが含まれています · ✓ いつでもキャンセル可能 · ✓ すべてのプランで製品の全機能が利用可能