Lambda と AWS サービスの連携

AWS Lambda によるサーバーレスアプリケーション

Claudio Canales

Senior DevOps Engineer

連携ループ

  • イベントの受信。
  • ハンドラーのロジック実行。
  • SDK の呼び出し。

イベント -> ハンドラー -> SDK のループ

AWS Lambda によるサーバーレスアプリケーション

トリガーと SDK 呼び出しの違い

トリガー

  • Lambda の実行タイミングを決定します。

SDK 呼び出し(ハンドラー内)

  • DynamoDB や S3 などのサービスを読み書きします。

トリガーと SDK 呼び出しの比較

AWS Lambda によるサーバーレスアプリケーション

具体的な例

  • S3 にファイルが届く。
  • Lambda が実行される。
  • DynamoDB に小さなレコードを保存する。

S3 アップロード -> Lambda -> DynamoDB

AWS Lambda によるサーバーレスアプリケーション

イベントペイロード:必要な情報の見つけ方

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

S3 イベントペイロードの注釈

AWS Lambda によるサーバーレスアプリケーション

AWS SDK の役割

  • コードから SDK(boto3)を呼び出します。
  • SDK が AWS API を呼び出します。
  • IAM がアクセスを制御します。

ハンドラー -> SDK -> AWS API

AWS Lambda によるサーバーレスアプリケーション

実行ロール = 認証情報

  • 実行ロールから一時的な認証情報を取得します。
  • コードにアクセスキーを記述しません。
  • ロールが API を呼び出せない場合、SDK 呼び出しは失敗します。

実行ロールが認証情報を提供

AWS Lambda によるサーバーレスアプリケーション

最小権限:アクションとリソースを限定する

  • 影響範囲を最小限に抑えます。
  • 必要なアクションとリソースのみ許可します。
  • 本当に必要な場合を除き、ワイルドカードは使いません。

最小権限:アクションとリソース

AWS Lambda によるサーバーレスアプリケーション

DynamoDB:適切な操作を選ぶ

  • PutItem で書き込みます。
  • GetItem でキーを指定して読み込みます。
  • Query で関連アイテムを検索します。
  • スキャンより目的を絞った操作を優先します。

DynamoDB の操作

AWS Lambda によるサーバーレスアプリケーション

S3:バケット+キーの操作

  • オブジェクトはバケット+キーで管理されます。
  • GetObject でコンテンツを取得します。
  • PutObject で派生ファイルを書き込みます。

S3 バケットとキー

AWS Lambda によるサーバーレスアプリケーション

設定は環境変数に入れる

  • リソース名をハードコードするとコードが壊れやすくなります。
  • 環境変数を使いましょう。
  • 同じコードを dev と prod にデプロイできます。

環境変数による設定

AWS Lambda によるサーバーレスアプリケーション

SDK コード:小さくテストしやすく保つ

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • 入力を検証し、SDK を呼び出して返します。
  • 純粋なロジックはユニットテストします。

SDK 呼び出しを含む小さなハンドラー

AWS Lambda によるサーバーレスアプリケーション

SDK エラーを意図的に処理する

  • 権限エラーは最初によく発生します。
  • 呼び出しが失敗した場合、原因を明確にします。
  • 適切なログがデバッグを容易にします。

成功パスと失敗パス

AWS Lambda によるサーバーレスアプリケーション

When IAM is wrong, code looks fine

AccessDeniedException
required action denied
  • まず IAM を修正し、次にハンドラーのロジックを確認します。

アクセス拒否

AWS Lambda によるサーバーレスアプリケーション

冪等性:安全なリトライと重複処理

  • 同じイベントが2回届くことがあります。
  • 冪等性キーで二重処理を防ぎます。
  • 条件付き書き込みで重複を安全に処理します。

冪等性キーのパターン

AWS Lambda によるサーバーレスアプリケーション

全体の流れをまとめる

  • S3 イベントからバケットとキーを取得します。
  • ハンドラーがそれらを解析します。
  • PutItem でメタデータを DynamoDB に書き込みます。
  • CloudWatch Logs で処理内容を確認します。

エンドツーエンドの連携まとめ

AWS Lambda によるサーバーレスアプリケーション

重要なポイント

  • トリガーと SDK 呼び出しを分離します。
  • 実行ロールで権限を最小限に保ちます。
  • 環境変数で設定を可搬性のある形にします。

連携のまとめ

AWS Lambda によるサーバーレスアプリケーション

練習しましょう!

AWS Lambda によるサーバーレスアプリケーション

Preparing Video For Download...