

# 创建对象 Lambda 接入点
<a name="olap-create"></a>

**注意**  
自 2025 年 11 月 7 日起，S3 对象 Lambda 仅可供当前在使用该服务的现有客户以及部分 AWS 合作伙伴网络（APN）合作伙伴使用。要了解与 S3 对象 Lambda 类似的功能，请在此处了解更多信息：[Amazon S3 Object Lambda availability change](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazons3-ol-change.html)。

一个对象 Lambda 接入点恰好与一个标准接入点相关联，后者是在创建过程中指定的。要创建对象 Lambda 接入点，您需要以下资源：
+ **标准 S3 接入点。**当您使用对象 Lambda 接入点时，此标准接入点称为*支持接入点*，它附加到 S3 存储桶或适用于 OpenZFS 的 Amazon FSx 卷。有关创建标准接入点的信息，请参阅[创建接入点](creating-access-points.md)。
+ **AWS Lambda 函数。**您可以创建自己的 Lambda 函数，也可以使用预构建的函数。有关创建 Lambda 函数的更多信息，请参阅[为 S3 对象 Lambda 接入点编写 Lambda 函数](olap-writing-lambda.md)。有关预构建的函数的更多信息，请参阅 [使用 AWS 构建的 Lambda 函数](olap-examples.md)。
+ **（可选）AWS Identity and Access Management（IAM）策略。**Amazon S3 接入点支持 IAM 资源策略，您可以使用这些策略按资源、用户或其他条件控制接入点的使用。有关创建这些策略的更多信息，请参阅[为对象 Lambda 接入点配置 IAM 策略](olap-policies.md)。

以下各节介绍如何使用以下方法创建对象 Lambda 接入点：
+ 这些区域有：AWS 管理控制台
+ AWS Command Line Interface（AWS CLI）
+ AWS CloudFormation 模板
+ 这些区域有：AWS Cloud Development Kit (AWS CDK)

有关如何使用 REST API 创建对象 Lambda 接入点的信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html)。

## 创建对象 Lambda 接入点
<a name="create-olap"></a>

使用以下过程之一创建对象 Lambda 接入点。

### 使用 S3 控制台
<a name="olap-create-console"></a>

**使用控制台创建对象 Lambda 接入点**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航栏中，选择当前所显示 AWS 区域的名称。接下来，选择要切换到的区域。

1. 在左侧导航窗格中，选择 **Object Lambda 接入点**。

1. 在**对象 Lambda 接入点**页面上，选择**创建对象 Lambda 接入点**。

1. 对于**对象 Lambda 接入点名称**，输入要用于接入点的名称。

   与标准接入点一样，对于对象 Lambda 接入点同样具有命名规则。有关更多信息，请参阅 [接入点的命名规则](access-points-restrictions-limitations-naming-rules.md#access-points-names)。

1. 对于 **Supporting Access Point**（支持接入点），请输入或浏览到要使用的标准接入点。接入点必须与要变换的对象位于同一 AWS 区域 位置。有关创建标准接入点的信息，请参阅[创建接入点](creating-access-points.md)。

1. 在**转换配置**下，您可以添加一个函数来转换对象 Lambda 接入点的数据。请执行以下操作之一：
   + 如果您的账户中已经有一个 AWS Lambda 函数，则可以在 **Invoke Lambda function**（调用 Lambda 函数）下选择该函数。在这里，您可以在您的 AWS 账户中输入 Lambda 函数的 Amazon 资源名称（ARN），也可以从下拉菜单中选择 Lambda 函数。
   + 如果您想使用 AWS 构建的函数，请在 **AWS 构建的函数**下选择函数名称，然后选择**创建 Lambda 函数**。这将带您进入 Lambda 控制台，您可以在其中将构建的函数部署到您的 AWS 账户中。有关构建的函数的更多信息，请参阅[使用 AWS 构建的 Lambda 函数](olap-examples.md)。

   在 **S3 APIs**（S3 API）下，选择一个或多个要调用的 API 操作。对于所选的每个 API，您必须指定要调用的 Lambda 函数。

1. （可选）在 **Payload**（有效负载）下，添加要提供给 Lambda 函数作为输入的 JSON 文本。您可以为调用同一 Lambda 函数的不同对象 Lambda 接入点配置具有不同参数的负载，从而扩展 Lambda 函数的灵活性。
**重要**  
使用对象 Lambda 接入点时，确保负载不包含任何机密信息。

1. （可选）对于 **Range and part number**（范围和分段编号），如果您要处理带有范围和分段编号标头的 `GET` 和 `HEAD` 请求，则必须启用此选项。启用此选项将确认您的 Lambda 函数可以识别和处理这些请求。有关范围标头和分段编号的更多信息，请参阅 [使用 Range 和 partNumber 标头](range-get-olap.md)。

1. （可选）对于**请求指标**，请选择**启用**或**禁用**，以将 Amazon S3 监控添加到对象 Lambda 接入点。请求指标按标准 Amazon CloudWatch 费率计费。

1. （可选）在**对象 Lambda 接入点策略**下，设置资源策略。资源策略授予针对指定对象 Lambda 接入点的权限，并可以按资源、用户或其他条件控制接入点的使用。有关对象 Lambda 接入点资源策略的更多信息，请参阅[为对象 Lambda 接入点配置 IAM 策略](olap-policies.md)。

1. 在**屏蔽此对象 Lambda 接入点的公共访问权限设置**下，选择要应用的屏蔽公共访问权限设置。默认情况下，为新的对象 Lambda 接入点启用所有屏蔽公共访问权限设置，建议您将默认设置保留为启用状态。Amazon S3 当前不支持在创建对象 Lambda 接入点之后更改对象 Lambda 接入点的屏蔽公共访问权限设置。

   有关使用 Amazon S3 屏蔽公共访问权限的更多信息，请参阅[管理对通用存储桶的接入点的公共访问权限](access-points-bpa-settings.md)。

1. 请选择**创建对象 Lambda 接入点**。

### 使用 AWS CLI
<a name="olap-create-cli"></a>

**使用 AWS CloudFormation 模板创建对象 Lambda 接入点**
**注意**  
要使用以下命令，请将 `user input placeholders` 替换为您自己的信息。

1. 在 [S3 对象 Lambda 默认配置](https://github.com/aws-samples/amazon-s3-object-lambda-default-configuration)中下载 AWS Lambda 函数部署包 `s3objectlambda_deployment_package.zip`。

1. 运行以下 `put-object` 命令以将文件包上传到 Amazon S3 存储桶。

   ```
   aws s3api put-object --bucket Amazon S3 bucket name --key s3objectlambda_deployment_package.zip --body release/s3objectlambda_deployment_package.zip
   ```

1. 在 [S3 对象 Lambda 默认配置](https://github.com/aws-samples/amazon-s3-object-lambda-default-configuration)中下载 AWS CloudFormation 模板 `s3objectlambda_defaultconfig.yaml`。

1. 运行以下 `deploy` 命令以将模板部署到您的 AWS 账户。

   ```
   aws cloudformation deploy --template-file s3objectlambda_defaultconfig.yaml \
    --stack-name 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
   ```

您可以将此 AWS CloudFormation 模板配置为针对 `GET`、`HEAD` 和 `LIST` API 操作调用 Lambda。有关修改模板的默认配置的更多信息，请参阅[使用 CloudFormation 模板自动进行 S3 对象 Lambda 设置](olap-using-cfn-template.md)。<a name="olap-create-cli-specific"></a>

**使用 AWS CLI 创建对象 Lambda 接入点**
**注意**  
要使用以下命令，请将 `user input placeholders` 替换为您自己的信息。

以下示例为账户 *`111122223333`* 中的存储桶 *`amzn-s3-demo-bucket1`* 创建了一个名为 *`my-object-lambda-ap`* 的对象 Lambda 接入点。此示例假定已创建了名为 *`example-ap`* 的标准接入点。有关创建标准接入点的信息，请参阅 [创建接入点](creating-access-points.md)。

此示例使用 AWS 预构建的函数 `decompress`。有关预构建的函数的更多信息，请参阅 [使用 AWS 构建的 Lambda 函数](olap-examples.md)。

1. 创建存储桶。在此示例中，我们将使用 *`amzn-s3-demo-bucket1`*。有关创建存储桶的更多信息，请参阅 [创建通用存储桶](create-bucket-overview.md)。

1. 创建标准接入点并将其附加到存储桶。在此示例中，我们将使用 *`example-ap`*。有关创建标准接入点的信息，请参阅[创建接入点](creating-access-points.md)。

1. 请执行以下操作之一：
   + 在您的账户中创建一个 Lambda 函数，用于转换 Amazon S3 对象。有关创建 Lambda 函数的更多信息，请参阅[为 S3 对象 Lambda 接入点编写 Lambda 函数](olap-writing-lambda.md)。要将您的自定义函数与 AWS CLI 结合使用，请参阅《AWS Lambda 开发人员指南》**中的[将 Lambda 与 AWS CLI 结合使用](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html)。
   + 使用 AWS 预构建的 Lambda 函数。有关预构建的函数的更多信息，请参阅 [使用 AWS 构建的 Lambda 函数](olap-examples.md)。

1. 创建一个名为 `my-olap-configuration.json` 的 JSON 配置文件。在此配置中，为您在前面的步骤中创建的 Lambda 函数提供支持接入点和 Amazon 资源名称（ARN），或者为正在使用的预构建函数提供 ARN。  
**Example**  

   

   ```
   {
       "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"
               }
           }
       }]
   }
   ```

1. 运行 `create-access-point-for-object-lambda` 命令以创建对象 Lambda 接入点。

   ```
   aws s3control create-access-point-for-object-lambda --account-id 111122223333 --name my-object-lambda-ap --configuration file://my-olap-configuration.json
   ```

1. （可选）创建名为的 `my-olap-policy.json` JSON 策略文件。

   添加对象 Lambda 接入点资源策略可以按资源、用户或其他条件控制接入点的使用。此资源策略为账户 *`444455556666`* 授予针对指定对象 Lambda 接入点的 `GetObject` 权限。  
**Example**  

   

   ```
   {
       "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"
           }
       ]
   }
   ```

1. （可选）运行 `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
   ```

1. （可选）指定负载。

   有效负载是可选 JSON，您可以将其作为输入提供给 AWS Lambda 函数。您可以为调用同一 Lambda 函数的不同对象 Lambda 接入点配置具有不同参数的负载，从而扩展 Lambda 函数的灵活性。

   以下对象 Lambda 接入点配置显示了带有两个参数的负载。

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

   以下对象 Lambda 接入点配置显示具有一个参数以及启用了 `GetObject-Range`、`GetObject-PartNumber`、`HeadObject-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\"}"
               }
           }
       }]
   }
   ```
**重要**  
使用对象 Lambda 接入点时，确保负载不包含任何机密信息。

### 使用 AWS CloudFormation 控制台和模板
<a name="olap-create-cfn-console"></a>

您可以使用 Amazon S3 提供的默认配置创建对象 Lambda 接入点。您可以从 [GitHub 存储库](https://github.com/aws-samples/amazon-s3-object-lambda-default-configuration)下载 AWS CloudFormation 模板和 Lambda 函数源代码，并部署这些资源以设置函数对象 Lambda 接入点。

有关修改 AWS CloudFormation 模板的默认配置的信息，请参阅[使用 CloudFormation 模板自动进行 S3 对象 Lambda 设置](olap-using-cfn-template.md)。

有关在没有模板的情况下使用 CloudFormation 配置对象 Lambda 接入点的信息，请参阅《AWS CloudFormation 用户指南》**中的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3objectlambda-accesspoint.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3objectlambda-accesspoint.html)。

**要上传 Lambda 函数部署软件包**

1. 在 [S3 对象 Lambda 默认配置](https://github.com/aws-samples/amazon-s3-object-lambda-default-configuration)中下载 AWS Lambda 函数部署包 `s3objectlambda_deployment_package.zip`。

1. 将文件包上传到 Amazon S3 存储桶。

**使用 AWS CloudFormation 控制台创建对象 Lambda 接入点**

1. 在 [S3 对象 Lambda 默认配置](https://github.com/aws-samples/amazon-s3-object-lambda-default-configuration)中下载 AWS CloudFormation 模板 `s3objectlambda_defaultconfig.yaml`。

1. 登录 AWS 管理控制台并通过以下网址打开 AWS CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 请执行以下操作之一：
   + 如果您以前从未用过 AWS CloudFormation，请在 AWS CloudFormation 主页上选择 **Create stack**（创建堆栈）。
   + 如果之前用过 AWS CloudFormation，请在左侧导航窗格中选择 **Stacks**（堆栈）。选择 **Create stack**（创建堆栈），然后选择 **With new resources (standard)** [使用新资源（标准）]。

1. 对于 **Prerequisite - Prepare template**（先决条件 - 准备模板），请选择 **Template is ready**（模板已就绪）。

1. 对于 **Specify template**（指定模板），选择 **Upload a template file**（上传模板文件）并上传 `s3objectlambda_defaultconfig.yaml`。

1. 选择**下一步**。

1. 在 **Specify stack details**（指定堆栈详细信息）页面上，输入堆栈名称。

1. 在 **Parameters**（参数）部分中，指定在堆栈模板中定义的以下参数：

   1. 对于 **CreateNewSupportingAccessPoint**，请执行以下操作之一：
      + 如果对于您上传了模板的 S3 存储桶已经有支持接入点，请选择 **false**。
      + 如果要为该存储桶创建新的接入点，请选择 **true**。

   1. 对于 **EnableCloudWatchMonitoring**，根据您是否要启用 Amazon CloudWatch 请求指标和告警，选择 **true** 或 **false**。

   1. （可选）对于 **LambdaFunctionPayload**，添加要提供给 Lambda 函数作为输入的 JSON 文本。您可以为调用同一 Lambda 函数的不同对象 Lambda 接入点配置具有不同参数的负载，从而扩展 Lambda 函数的灵活性。
**重要**  
使用对象 Lambda 接入点时，确保负载不包含任何机密信息。

   1. 对于 **LambdaFunctionRuntime**，输入适用于 Lambda 函数的首选运行时。可用的选项为 `nodejs14.x`、`python3.9`、`java11`。

   1. 对于 **LambdaFunctionS3BucketName**，输入您在其中上传了部署文件包的 Amazon S3 存储桶名称。

   1. 对于 **LambdaFunctionS3Key**，输入您在上传部署文件包时使用的 Amazon S3 对象密钥。

   1. 对于 **LambdaFunctionS3ObjectVersion**，输入您在其中上传了部署文件包的 Amazon S3 对象版本。

   1. 对于 **ObjectLambdaAccessPointName**，输入对象 Lambda 接入点的名称。

   1. 对于 **S3BucketName**，输入将与对象 Lambda 接入点相关联的 Amazon S3 存储桶名称。

   1. 对于 **SupportingAccessPointName**，输入支持接入点的名称。
**注意**  
这是与您在上一步中选择的 Amazon S3 存储桶相关联的接入点。如果您没有任何与 Amazon S3 存储桶相关联的接入点，则可以配置模板，以通过为 **CreateNewSupportingAccessPoint** 选择 **true** 来为您创建一个此类接入点。

1. 选择 **Next**(下一步)。

1. 在**配置堆栈选项**页面上，请选择**下一步**。

   有关此页面上的可选设置的更多信息，请参阅《AWS CloudFormation 用户指南》**中的[设置 AWS CloudFormation 堆栈选项](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html)。

1. 在 **Review**（查看）页面中，请选择 **Create stack**（创建堆栈）。

### 使用 AWS Cloud Development Kit (AWS CDK)
<a name="olap-create-cdk"></a>

有关使用 AWS CDK 配置对象 Lambda 接入点的更多信息，请参阅《AWS Cloud Development Kit (AWS CDK) API 参考》**中的 [`AWS::S3ObjectLambda` 构造库](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-s3objectlambda-readme.html)。