View a markdown version of this page

セルフマネージド S3 コードストレージ - AWS Lambda

セルフマネージド S3 コードストレージ

デフォルトでは、.zip ファイルアーカイブから Lambda 関数またはレイヤーを作成または更新すると、Lambda はコードのコピーを Lambda マネージドストレージに保存します。各 AWS アカウントには、リージョンごとに Lambda マネージドストレージの 300 GB のクォータがあります。

セルフマネージド S3 コードストレージを使用すると、アカウントの S3 バケットから直接コードを参照するように Lambda を設定できます。Lambda はコードのコピーを保存しないため、コードは Lambda マネージドストレージクォータに対してカウントされません。Lambda は、S3 バケットから直接コードにアクセスします。

セルフマネージド S3 コードストレージは、.zip ファイルアーカイブを使用して作成および更新されたすべての関数とレイヤーで使用できます。Glacier ストレージクラスを除くすべての S3 ストレージクラスと互換性があります。

注記

セルフマネージド S3 コードストレージは、.zip デプロイパッケージの最大サイズを変更しません。最大サイズは 250 MB (解凍状態) のままです。

セルフマネージド S3 コードストレージをセットアップする

セルフマネージド S3 コードストレージを使用するには、次の手順を実行します。

  1. アカウントで新しい S3 バケットを作成するか、既存のバケットを使用します。

  2. バケットの S3 バージョニングを有効にします。Lambda では、使用するソースオブジェクトのバージョンを追跡するために S3 バージョニングが必要です。新しい .zip パッケージをアップロードするたびに、S3 は Lambda が個々の更新を区別できるように新しいバージョンを作成します。

  3. .zip デプロイパッケージを S3 バケットにアップロードします。

  4. ソースオブジェクトに対する Lambda サービスプリンシパル s3:GetObject アクセス許可と s3:GetObjectVersion アクセス許可を付与します。「許可を設定する」を参照してください。

  5. 関数またはレイヤーを作成または更新し、S3 オブジェクト、S3 キー、S3 オブジェクトバージョンを指定して S3ObjectStorageModeREFERENCE に設定します。

許可を設定する

セルフマネージド S3 コードストレージを使用するには、Lambda サービスプリンシパル (lambda.amazonaws.com) にソースオブジェクトへのアクセス許可を付与します。次の S3 バケットポリシーを追加します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "LambdaSelfManagedCodeAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::my-bucket/my-function.zip" ], "Principal": { "Service": "lambda.amazonaws.com" }, "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:function:my-function" } } } ] }

セルフマネージド S3 ストレージで関数を作成する

AWS CLI または AWS CloudFormation を使用して、セルフマネージド S3 コードストレージで関数を作成できます。

AWS CLI を使用する場合

S3ObjectStorageMode=REFERENCE パラメータがある create-function コマンドを使用します。

aws lambda create-function \ --function-name my-function \ --runtime python3.12 \ --role arn:aws:iam::111122223333:role/lambda-execution-role \ --handler lambda_function.lambda_handler \ --code S3Bucket=my-bucket,\ S3Key=my-function.zip,\ S3ObjectVersion=abc123def456,\ S3ObjectStorageMode=REFERENCE

セルフマネージド S3 ストレージを使用するように既存の関数を更新するには:

aws lambda update-function-code \ --function-name my-function \ --s3-bucket my-bucket \ --s3-key my-function.zip \ --s3-object-version abc123def456 \ --s3-object-storage-mode REFERENCE
重要

update-function-code へのすべての呼び出しで S3ObjectStorageMode=REFERENCE を指定する必要があります。S3ObjectStorageMode を省略するとデフォルトで COPY になるので、Lambda はコードを Lambda マネージドストレージに保存します。

AWS CloudFormationの使用

CloudFormation テンプレートで、AWS::Lambda::Function リソースの Code プロパティで S3ObjectStorageModeREFERENCE に設定します。

Resources: MyFunction: Type: AWS::Lambda::Function Properties: FunctionName: my-function Runtime: python3.12 Handler: lambda_function.lambda_handler Role: !GetAtt LambdaExecutionRole.Arn Code: S3Bucket: my-bucket S3Key: my-function.zip S3ObjectVersion: abc123def456 S3ObjectStorageMode: REFERENCE

レイヤーでセルフマネージド S3 ストレージを使用する

レイヤーバージョンにセルフマネージド S3 コードストレージを使用することもできます。S3ObjectStorageMode=REFERENCE を指定して publish-layer-version コマンドを使用します。

aws lambda publish-layer-version \ --layer-name my-layer \ --content S3Bucket=my-bucket,S3Key=my-layer.zip,S3ObjectStorageMode=REFERENCE \ --compatible-runtimes python3.12

関数コードとレイヤーコードには、Lambda マネージドストレージとセルフマネージドストレージの任意の組み合わせを使用できます。

ストレージモードを切り替える

関数コードを更新するとき、または新しいレイヤーバージョンを発行するときに、Lambda マネージド S3 コードストレージとセルフマネージド S3 コードストレージを切り替えることができます。S3ObjectStorageModeCOPY または REFERENCE に設定します。

  • COPY (デフォルト) – Lambda はソースコードを Lambda マネージドストレージにコピーします。

  • REFERENCE – Lambda はコピーを保存せずに S3 バケットから直接ソースコードを参照します。

COPY から REFERENCE に切り替えると、Lambda はソースコードの Lambda マネージドコピーを削除します。REFERENCE から COPY に切り替えると、Lambda はソースコードに Lambda マネージドコピーを作成します。Lambda マネージドコードストレージの制限を超えると COPY への切り替えは失敗します。

セルフマネージドストレージの関数ライフサイクル

Lambda は、S3 バケットからソースオブジェクトに定期的にアクセスして関数コードを最適化します。関数をアクティブに保つには、ソースオブジェクトへのアクセスを維持する必要があります。

  • Lambda が関数のソースオブジェクトにアクセスできなくなった場合、関数は Inactive 状態に遷移します。関数を復元するには、ソースオブジェクトへのアクセスを復元して関数を更新します。

  • Lambda がレイヤーのソースオブジェクトへのアクセスを失った場合、関数は Active のままになります。関数設定の更新 (レイヤーの更新なし)、関数コードの更新、または新しいレイヤーでの関数設定の更新を行うことができます。ただし、アクセスできないレイヤーでの関数設定の更新は失敗します。

クロスアカウントおよびクロスリージョンでの使用

関数とレイヤーは、複数の異なるアカウントと複数の異なるリージョンの S3 バケットのソースコードから作成できます。クロスリージョンオブジェクトの取得には、追加の S3 データ転送コストが発生します。詳細については、S3 の料金表を参照してください。

考慮事項

  • セルフマネージド S3 コードストレージは、.zip ファイルアーカイブの関数とレイヤーでのみ使用できます。コンテナイメージ関数は引き続き Amazon ECR を使用します。

  • .zip デプロイパッケージの最大サイズ (解凍状態で 250 MB) は変わりません。

  • セルフマネージドバケットに保存されているコードに対して、標準の Amazon S3 ストレージ料金が発生します。Lambda では、同じリージョン内の S3 オブジェクトの取得に対する請求は発生しません。

  • セルフマネージド S3 コードストレージには Glacier ストレージクラスを除くすべての S3 ストレージクラスと互換性があります。

  • S3 クロスリージョンレプリケーションなどの S3 機能を使用して、リージョン間でアーティファクトと S3 ライフサイクルポリシーを共有してオブジェクトを管理できます。