Object Lambda アクセスポイントの作成 - Amazon Simple Storage Service

Object Lambda アクセスポイントの作成

Object Lambda アクセスポイントは、厳密に 1 つの標準アクセスポイントと 1 つの Amazon S3 バケットに関連付けられます。Object Lambda アクセスポイントを作成するには、次のリソースが必要です。

  • Amazon S3 バケット。バケットの作成については、「バケットの作成」を参照してください。

  • 標準 S3 アクセスポイント。Object Lambda アクセスポイントを使用する場合、この標準アクセスポイントはサポートアクセスポイントと呼ばれます。標準アクセスポイントの作成については、「アクセスポイントの作成」を参照してください。

  • AWS Lambda 関数。独自の Lambda 関数を作成することも、事前に構築された関数を使用することもできます。Lambda 関数の詳細については、「S3 Object Lambda アクセスポイントの Lambda 関数の記述」を参照してください。事前構築された関数の詳細については、「AWS で構築された Lambda 関数の使用」を参照してください。

  • (オプション) AWS Identity and Access Management (IAM) ポリシー。Amazon S3 アクセスポイントは IAM リソースポリシーをサポートしています。これにより、リソース、ユーザー、またはその他の条件別にアクセスポイントの使用を制御できます。これらのポリシーの作成の詳細については、「Object Lambda アクセスポイントの IAM ポリシーの設定」を参照してください。

以下のセクションでは、下記を使用して Object Lambda アクセスポイントを作成する方法について説明します。

  • AWS Management Console

  • AWS Command Line Interface (AWS CLI)

  • AWS CloudFormation テンプレート

  • AWS Cloud Development Kit (AWS CDK)

REST API を使用して Object Lambda アクセスポイントを作成する方法については、Amazon Simple Storage Service API リファレンスの「CreateAccessPointForObjectLambda」を参照してください。

Object Lambda アクセスポイントの作成

次のいずれかの手順に従って Object Lambda アクセスポイントを作成します。

コンソールを使用して Object Lambda のアクセスポイントを作成するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. ナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、切り替え先のリージョンを選択します。

  3. 左のナビゲーションペインで、[Object Lambda アクセスポイント] を選択します。

  4. [Object Lambda アクセスポイント] ページで、[Object Lambda アクセスポイントの作成] を選択します。

  5. [Object Lambda Access Point name] (Object Lambda アクセスポイント名) に、アクセスポイントに使用する名前を入力します。

    標準のアクセスポイントと同様に、Object Lambda には命名規則があります。詳細については、「Amazon S3 アクセスポイントの命名規則」を参照してください。

  6. [Supporting Access Point] (サポートアクセスポイント) で、使用する標準アクセスポイントを入力または参照します。アクセスポイントは、変換するオブジェクトと同じ AWS リージョン に存在する必要があります。標準アクセスポイントの作成については、「アクセスポイントの作成」を参照してください。

  7. [変換の設定] で、Object Lambda アクセスポイントのデータを変換する関数を追加できます。次のいずれかを行います。

    • アカウントに既に AWS Lambda 関数がある場合は、[Invoke Lambda function] (Lambda 関数の呼び出し) で選択できます。ここで、AWS アカウント で Lambda 関数の Amazon リソースネーム (ARN) を入力するか、ドロップダウンメニューから Lambda 関数を選択できます。

    • AWS で構築された関数を使用する場合は、[AWS で構築された関数] で関数名を選択し、[Lambda 関数を作成] を選択します。これにより Lambda コンソールが表示され、そこで構築した関数を AWS アカウント にデプロイできます。構築した関数の詳細については、「AWS で構築された Lambda 関数の使用」を参照してください。

    [S3 APIs] で、呼び出す API オペレーションを 1 つ以上選択します。選択した各 API に対して、呼び出す Lambda 関数を指定する必要があります。

  8. (オプション) [Payload] (ペイロード) に、入力として Lambda 関数に提供する JSON テキストを追加します。同じ Lambda 関数を呼び出す異なる Object Lambda アクセスポイントに対して、異なるパラメータを使用してペイロードを設定できます。これにより、Lambda 関数の柔軟性が向上します。

    重要

    Object Lambda アクセスポイントを使用する場合、ペイロードには機密情報を一切含めないでください。

  9. (オプション) [Range and part number] (範囲とパート番号) では、範囲とパート番号ヘッダーで GET および HEAD リクエストを処理するには、このオプションを有効にする必要があります。このオプションを有効にすると、Lambda 関数がこれらのリクエストを認識して処理できることが確認されます。範囲ヘッダーとパート番号の詳細については、Range および partNumber ヘッダーの操作 を参照してください。

  10. (オプション) [リクエストのメトリクス] で、[有効化] または [無効化] を選択して、Amazon S3 モニタリングを Object Lambda アクセスポイントに追加します。リクエストメトリクスには、Amazon CloudWatch の標準料金が課金されます。

  11. (オプション) [Object Lambda Access Point policy] (Object Lambda アクセスポイントポリシー) で、リソースポリシーを設定します。リソースポリシーは、指定された Object Lambda アクセスポイントにアクセス許可を付与し、リソース、ユーザー、その他の条件別にアクセスポイントの使用を制御します。Object Lambda アクセスポイントのリソースポリシーの詳細については、「Object Lambda アクセスポイントの IAM ポリシーの設定」を参照してください。

  12. [Block Public Access settings for this Object Lambda Access Point] (この Object Lambda アクセスポイントのパブリックアクセス設定をブロック) で、適用するパブリックアクセスブロック設定を選択します。新しい Object Lambda アクセスポイントでは、すべてのパブリックアクセスブロック設定がデフォルトで有効になります。デフォルトの設定のままにしておくことをお勧めします。Amazon S3 は、現在、Object Lambda アクセスポイントの作成後における Object Lambda アクセスポイントのパブリックアクセスブロック設定の変更をサポートしていません。

    Amazon S3 パブリックアクセスブロックの詳細については、「アクセスポイントへのパブリックアクセスの管理」を参照してください。

  13. [Create Object Lambda Access Point] (Object Lambda アクセスポイントの作成) を選択します。

AWS CloudFormation テンプレートを使用して Object Lambda アクセスポイントを作成するには
注記

次のコマンドを使用するには、user input placeholders をユーザー自身の情報に置き換えます。

  1. S3 Object Lambda のデフォルト設定で、AWS Lambda 関数デプロイパッケージ s3objectlambda_deployment_package.zip をダウンロードします。

  2. 次の put-object コマンドを実行して、Amazon S3 バケットにパッケージをアップロードします。

    aws s3api put-object --bucket Amazon S3 bucket name --key s3objectlambda_deployment_package.zip --body release/s3objectlambda_deployment_package.zip
  3. S3 Object Lambda のデフォルト設定で AWS CloudFormation テンプレート s3objectlambda_defaultconfig.yaml をダウンロードします。

  4. 次の deploy コマンドを実行して、テンプレートを AWS アカウント にデプロイします。

    aws cloudformation deploy --template-file s3objectlambda_defaultconfig.yaml \ --stack-name AWS CloudFormation stack name \ --parameter-overrides ObjectLambdaAccessPointName=Object Lambda Access Point name \ SupportingAccessPointName=Amazon S3 access point S3BucketName=Amazon S3 bucket \ LambdaFunctionS3BucketName=Amazon S3 bucket containing your Lambda package \ LambdaFunctionS3Key=Lambda object key LambdaFunctionS3ObjectVersion=Lambda object version \ LambdaFunctionRuntime=Lambda function runtime --capabilities capability_IAM

GETHEAD、および LIST API オペレーションで Lambda を呼び出すようにこの AWS CloudFormation テンプレートを設定できます。テンプレートのデフォルト設定の変更の詳細については、「CloudFormation テンプレートを使用して S3 Object Lambda のセットアップを自動化する」を参照してください。

AWS CLI を使用して Object Lambda アクセスポイントを作成するには
注記

次のコマンドを使用するには、user input placeholders をユーザー自身の情報に置き換えます。

以下の例では、アカウント 111122223333 のバケット amzn-s3-demo-bucket1 に「my-object-lambda-ap」という名前の Object Lambda アクセスポイントを作成します。この例では、「example-ap」という名前の標準アクセスポイントが既に作成されていることを前提としています。標準アクセスポイントの作成については、アクセスポイントの作成 を参照してください。

この例では、AWS の事前構築された関数 decompress を使用しています。事前構築された関数の詳細については、「AWS で構築された Lambda 関数の使用」を参照してください。

  1. バケットを作成します。この例では、amzn-s3-demo-bucket1 を使用します。バケットの作成については、「バケットの作成」を参照してください。

  2. 標準アクセスポイントを作成し、バケットにアタッチします。この例では、example-ap を使用します。標準アクセスポイントの作成については、「アクセスポイントの作成」を参照してください。

  3. 次のいずれかを行います。

  4. my-olap-configuration.json という名前の JSON 設定ファイルを作成します。この設定では、前のステップで作成した Lambda 関数のサポートアクセスポイントと Amazon リソースネーム (ARN)、または使用している事前構築された関数の ARN を指定します。

    { "SupportingAccessPoint" : "arn:aws:s3:us-east-1:111122223333:accesspoint/example-ap", "TransformationConfigurations": [{ "Actions" : ["GetObject", "HeadObject", "ListObjects", "ListObjectsV2"], "ContentTransformation" : { "AwsLambda": { "FunctionPayload" : "{\"compressionType\":\"gzip\"}", "FunctionArn" : "arn:aws:lambda:us-east-1:111122223333:function/compress" } } }] }
  5. create-access-point-for-object-lambda コマンドを実行して Object Lambda アクセスポイントを作成します。

    aws s3control create-access-point-for-object-lambda --account-id 111122223333 --name my-object-lambda-ap --configuration file://my-olap-configuration.json
  6. (オプション) my-olap-policy.json という名前の JSON ポリシーファイルを作成します。

    Object Lambda アクセスポイントのリソースポリシーを追加することで、リソース、ユーザー、その他の条件別にアクセスポイントの使用を制御することができます。このリソースポリシーは、アカウント 444455556666 に指定された Object Lambda アクセスポイントへの GetObject 許可を付与します。

    { "Version": "2008-10-17", "Statement": [ { "Sid": "Grant account 444455556666 GetObject access", "Effect": "Allow", "Action": "s3-object-lambda:GetObject", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Resource": "your-object-lambda-access-point-arn" } ] }
  7. (オプション) put-access-point-policy-for-object-lambda コマンドを実行して、リソースポリシーを設定します。

    aws s3control put-access-point-policy-for-object-lambda --account-id 111122223333 --name my-object-lambda-ap --policy file://my-olap-policy.json
  8. (オプション) ペイロードを規定します。

    ペイロードは、AWS Lambda 関数に入力として提供できるオプションの JSON です。同じ Lambda 関数を呼び出す異なる Object Lambda アクセスポイントに対して、異なるパラメータを使用してペイロードを設定できます。これにより、Lambda 関数の柔軟性が向上します。

    次の Object Lambda アクセスポイントの設定は、2 つのパラメータを持つペイロードを示しています。

    { "SupportingAccessPoint": "AccessPointArn", "CloudWatchMetricsEnabled": false, "TransformationConfigurations": [{ "Actions": ["GetObject", "HeadObject", "ListObjects", "ListObjectsV2"], "ContentTransformation": { "AwsLambda": { "FunctionArn": "FunctionArn", "FunctionPayload": "{\"res-x\": \"100\",\"res-y\": \"100\"}" } } }] }

    次の Object Lambda アクセスポイント設定は、パラメータが 1 つあり、GetObject-RangeGetObject-PartNumberHeadObject-Range、および HeadObject-PartNumber が有効になっているペイロードを示しています。

    { "SupportingAccessPoint":"AccessPointArn", "CloudWatchMetricsEnabled": false, "AllowedFeatures": ["GetObject-Range", "GetObject-PartNumber", "HeadObject-Range", "HeadObject-PartNumber"], "TransformationConfigurations": [{ "Action": ["GetObject", "HeadObject", "ListObjects", "ListObjectsV2"], "ContentTransformation": { "AwsLambda": { "FunctionArn":"FunctionArn", "FunctionPayload": "{\"compression-amount\": \"5\"}" } } }] }
    重要

    Object Lambda アクセスポイントを使用する場合、ペイロードには機密情報を一切含めないでください。

Amazon S3 が提供するデフォルト設定を使用して、Object Lambda アクセスポイントを作成できます。GitHub リポジトリ から AWS CloudFormation テンプレートと Lambda 関数のソースコードのリソースをダウンロードして、これらのリソースをデプロイして、Object Lambda アクセスポイントを設定します。

AWS CloudFormation テンプレートのデフォルト設定の変更の詳細については、「CloudFormation テンプレートを使用して S3 Object Lambda のセットアップを自動化する」を参照してください。

テンプレートなしで AWS CloudFormation を使用する Object Lambda アクセスポイントの設定の詳細については、AWS CloudFormation ユーザーガイドの「AWS::S3ObjectLambda::AccessPoint」を参照してください。

Lambda 関数のデプロイパッケージをアップロードします
  1. S3 Object Lambda のデフォルト設定で、AWS Lambda 関数デプロイパッケージ s3objectlambda_deployment_package.zip をダウンロードします。

  2. Amazon S3 バケットにパッケージをアップロードします。

AWS CloudFormation コンソールを使用して Object Lambda のアクセスポイントを作成するには
  1. S3 Object Lambda のデフォルト設定で AWS CloudFormation テンプレート s3objectlambda_defaultconfig.yaml をダウンロードします。

  2. AWS マネジメントコンソール にサインインした後、https://console.aws.amazon.com/cloudformation/ で AWS CloudFormation コンソールを開きます。

  3. 次のいずれかを行います。

    • AWS CloudFormation を初めて使用する場合は、AWS CloudFormation ホームページで [Create stack] (スタックの作成) を選択します。

    • 以前に AWS CloudFormation を使用したことがある場合は、左側のナビゲーションペインで [Stacks] (スタック) を選択します。[Create stack] (スタックの作成) を選択し、[With new resources (standard)] (新しいリソースを使用 (標準)) を選択します。

  4. 前提条件 − テンプレートの準備で、テンプレートの準備完了を選択します。

  5. [Specify template] (テンプレートの指定) で、[Upload a template file] (テンプレートファイルのアップロード) を選択して s3objectlambda_defaultconfig.yaml をアップロードします。

  6. [Next] を選択します。

  7. スタックの詳細の指定ページで、スタックの名前を入力します。

  8. [Parameters] (パラメータ) セクションで、スタックテンプレートで定義されている次のパラメータを指定します。

    1. [CreateNewSupportingAccessPoint] では、次のいずれかを実行します。

      • テンプレートをアップロードした S3 バケット用のサポートアクセスポイントが既にある場合は、[false] を選択します。

      • このバケット用に新しいアクセスポイントを作成する場合は、[true] を選択します。

    2. [EnableCloudWatchMonitoring] では、Amazon CloudWatch リクエストメトリクスとアラームを有効にするかどうかに応じて、[true] または [false] を選択します。

    3. (オプション) [LambdaFunctionPayload] に、入力として Lambda 関数に提供する JSON テキストを追加します。同じ Lambda 関数を呼び出す異なる Object Lambda アクセスポイントに対して、異なるパラメータを使用してペイロードを設定できます。これにより、Lambda 関数の柔軟性が向上します。

      重要

      Object Lambda アクセスポイントを使用する場合、ペイロードには機密情報を一切含めないでください。

    4. [LambdaFunctionRuntime] で、Lambda 関数に希望するランタイムを入力します。使用可能な選択は次のとおりです。nodejs14.xpython3.9java11

    5. [LambdaFunctionS3BucketName] で、デプロイパッケージをアップロードした Amazon S3 バケット名を入力します。

    6. [LambdaFunctionS3Key] で、デプロイパッケージをアップロードした Amazon S3 オブジェクトキーを入力します。

    7. [LambdaFunctionS3ObjectVersion] で、デプロイパッケージをアップロードした Amazon S3 オブジェクトバージョンを入力します。

    8. [ObjectLambdaAccessPointName] で、Object Lambda アクセスポイント名を入力します。

    9. [S3BucketName] で、Object Lambda アクセスポイントと関連付けられる Amazon S3 のバケット名を入力します。

    10. [SupportingAccessPointName] で、サポートアクセスポイント名を入力します。

      注記

      これは前のステップで選択した Amazon S3 バケットに関連付けられたアクセスポイントです。Amazon S3 バケットに関連付けられているアクセスポイントがない場合は、[CreateNewSupportingAccessPoint][true] を選択すると、テンプレートを作成するようにテンプレートを構成できます。

  9. [Next] を選択します。

  10. [スタックオプションの設定] ページで[次へ] を選択します。

    このページのオプション設定の詳細については、「AWS CloudFormation ユーザーガイド」の「AWS CloudFormation スタックオプションの設定」を参照してください。

  11. Review ページで、スタックの作成を選択します。

AWS CDK を使用した Object Lambda アクセスポイントの設定の詳細については、AWS Cloud Development Kit (AWS CDK) API リファレンスの「AWS::S3ObjectLambda Construct Library」を参照してください。