创建对象 Lambda 接入点 - Amazon Simple Storage Service

创建对象 Lambda 接入点

对象 Lambda 接入点恰好与一个标准接入点相关联,因此也与一个 Amazon S3 存储桶相关联。要创建对象 Lambda 接入点,您需要以下资源:

  • Amazon S3 存储桶。有关创建存储桶的更多信息,请参阅 创建存储桶

  • 标准 S3 接入点。当您使用对象 Lambda 接入点时,此标准接入点称为支持接入点。有关创建标准接入点的信息,请参阅创建接入点

  • AWS Lambda 函数。您可以创建自己的 Lambda 函数,也可以使用预构建的函数。有关创建 Lambda 函数的更多信息,请参阅为 S3 对象 Lambda 接入点编写 Lambda 函数。有关预构建的函数的更多信息,请参阅 使用 AWS 构建的 Lambda 函数

  • (可选)AWS Identity and Access Management(IAM)策略。Amazon S3 接入点支持 IAM 资源策略,您可以使用这些策略按资源、用户或其他条件控制接入点的使用。有关创建这些策略的更多信息,请参阅为对象 Lambda 接入点配置 IAM 策略

以下各节介绍如何使用以下方法创建对象 Lambda 接入点:

  • 这些区域有:AWS Management Console

  • AWS Command Line Interface (AWS CLI)

  • AWS CloudFormation 模板

  • 这些区域有:AWS Cloud Development Kit (AWS CDK)

有关如何使用 REST API 创建对象 Lambda 接入点的信息,请参阅《Amazon Simple Storage Service API 参考》中的 CreateAccessPointForObjectLambda

创建对象 Lambda 接入点

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

使用控制台创建对象 Lambda 接入点
  1. 登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

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

  3. 在左侧导航窗格中,选择 Object Lambda 接入点

  4. 对象 Lambda 接入点页面上,选择创建对象 Lambda 接入点

  5. 对于对象 Lambda 接入点名称,输入要用于接入点的名称。

    与标准接入点一样,对于对象 Lambda 接入点同样具有命名规则。有关更多信息,请参阅 命名 Amazon S3 接入点的规则

  6. 对于 Supporting Access Point(支持接入点),请输入或浏览到要使用的标准接入点。接入点必须与要变换的对象位于同一 AWS 区域 位置。有关创建标准接入点的信息,请参阅创建接入点

  7. 转换配置下,您可以添加一个函数来转换对象 Lambda 接入点的数据。请执行以下操作之一:

    • 如果您的账户中已经有一个 AWS Lambda 函数,则可以在 Invoke Lambda function(调用 Lambda 函数)下选择该函数。在这里,您可以在您的 AWS 账户中输入 Lambda 函数的 Amazon 资源名称(ARN),也可以从下拉菜单中选择 Lambda 函数。

    • 如果您想使用 AWS 构建的函数,请在 AWS 构建的函数下选择函数名称,然后选择创建 Lambda 函数。这将带您进入 Lambda 控制台,您可以在其中将构建的函数部署到您的 AWS 账户中。有关构建的函数的更多信息,请参阅使用 AWS 构建的 Lambda 函数

    S3 APIs(S3 API)下,选择一个或多个要调用的 API 操作。对于所选的每个 API,您必须指定要调用的 Lambda 函数。

  8. (可选)在 Payload(有效负载)下,添加要提供给 Lambda 函数作为输入的 JSON 文本。您可以为调用同一 Lambda 函数的不同对象 Lambda 接入点配置具有不同参数的负载,从而扩展 Lambda 函数的灵活性。

    重要

    使用对象 Lambda 接入点时,确保负载不包含任何机密信息。

  9. (可选)对于 Range and part number(范围和分段编号),如果您要处理带有范围和分段编号标头的 GETHEAD 请求,则必须启用此选项。启用此选项将确认您的 Lambda 函数可以识别和处理这些请求。有关范围标头和分段编号的更多信息,请参阅 使用 Range 和 partNumber 标头

  10. (可选)对于请求指标,请选择启用禁用,以将 Amazon S3 监控添加到对象 Lambda 接入点。请求指标按标准 Amazon CloudWatch 费率计费。

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

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

    有关使用 Amazon S3 屏蔽公共访问权限的更多信息,请参阅管理接入点的公有访问

  13. 请选择创建对象 Lambda 接入点

使用 AWS CloudFormation 模板创建对象 Lambda 接入点
注意

要使用以下命令,请将 user input placeholders 替换为您自己的信息。

  1. S3 对象 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 对象 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

您可以将此 AWS CloudFormation 模板配置为针对 GETHEADLIST API 操作调用 Lambda。有关修改模板的默认配置的更多信息,请参阅使用 CloudFormation 模板自动进行 S3 对象 Lambda 设置

使用 AWS CLI 创建对象 Lambda 接入点
注意

要使用以下命令,请将 user input placeholders 替换为您自己的信息。

以下示例为账户 111122223333 中的存储桶 amzn-s3-demo-bucket1 创建了一个名为 my-object-lambda-ap 的对象 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 命令以创建对象 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 策略文件。

    添加对象 Lambda 接入点资源策略可以按资源、用户或其他条件控制接入点的使用。此资源策略为账户 444455556666 授予针对指定对象 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. (可选)指定负载。

    有效负载是可选 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-RangeGetObject-PartNumberHeadObject-RangeHeadObject-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 接入点时,确保负载不包含任何机密信息。

您可以使用 Amazon S3 提供的默认配置创建对象 Lambda 接入点。您可以从 GitHub 存储库下载 AWS CloudFormation 模板和 Lambda 函数源代码,并部署这些资源以设置函数对象 Lambda 接入点。

有关修改 AWS CloudFormation 模板的默认配置的信息,请参阅使用 CloudFormation 模板自动进行 S3 对象 Lambda 设置

有关在没有模板的情况下使用 AWS CloudFormation 配置对象 Lambda 接入点的信息,请参阅《AWS CloudFormation 用户指南》中的 AWS::S3ObjectLambda::AccessPoint

要上传 Lambda 函数部署软件包
  1. S3 对象 Lambda 默认配置中下载 AWS Lambda 函数部署包 s3objectlambda_deployment_package.zip

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

使用 AWS CloudFormation 控制台创建对象 Lambda 接入点
  1. S3 对象 Lambda 默认配置中下载 AWS CloudFormation 模板 s3objectlambda_defaultconfig.yaml

  2. 登录 AWS 管理控制台并通过以下网址打开 AWS CloudFormation 控制台:https://console.aws.amazon.com/cloudformation

  3. 请执行以下操作之一:

    • 如果您以前从未用过 AWS CloudFormation,请在 AWS CloudFormation 主页上选择 Create stack(创建堆栈)。

    • 如果之前用过 AWS CloudFormation,请在左侧导航窗格中选择 Stacks(堆栈)。选择 Create stack(创建堆栈),然后选择 With new resources (standard) [使用新资源(标准)]。

  4. 对于 Prerequisite - Prepare template(先决条件 - 准备模板),请选择 Template is ready(模板已就绪)。

  5. 对于 Specify template(指定模板),选择 Upload a template file(上传模板文件)并上传 s3objectlambda_defaultconfig.yaml

  6. 请选择 Next(下一步)。

  7. Specify stack details(指定堆栈详细信息)页面上,输入堆栈名称。

  8. Parameters(参数)部分中,指定在堆栈模板中定义的以下参数:

    1. 对于 CreateNewSupportingAccessPoint,请执行以下操作之一:

      • 如果对于您上传了模板的 S3 存储桶已经有支持接入点,请选择 false

      • 如果要为该存储桶创建新的接入点,请选择 true

    2. 对于 EnableCloudWatchMonitoring,根据您是否要启用 Amazon CloudWatch 请求指标和告警,选择 truefalse

    3. (可选)对于 LambdaFunctionPayload,添加要提供给 Lambda 函数作为输入的 JSON 文本。您可以为调用同一 Lambda 函数的不同对象 Lambda 接入点配置具有不同参数的负载,从而扩展 Lambda 函数的灵活性。

      重要

      使用对象 Lambda 接入点时,确保负载不包含任何机密信息。

    4. 对于 LambdaFunctionRuntime,输入适用于 Lambda 函数的首选运行时。可用的选项为 nodejs14.xpython3.9java11

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

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

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

    8. 对于 ObjectLambdaAccessPointName,输入对象 Lambda 接入点的名称。

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

    10. 对于 SupportingAccessPointName,输入支持接入点的名称。

      注意

      这是与您在上一步中选择的 Amazon S3 存储桶相关联的接入点。如果您没有任何与 Amazon S3 存储桶相关联的接入点,则可以配置模板,以通过为 CreateNewSupportingAccessPoint 选择 true 来为您创建一个此类接入点。

  9. 请选择 Next(下一步)。

  10. 配置堆栈选项 页面上,请选择 下一步

    有关此页面上的可选设置的更多信息,请参阅《AWS CloudFormation 用户指南》中的设置 AWS CloudFormation 堆栈选项

  11. Review(查看)页面中,请选择 Create stack(创建堆栈)。

有关使用 AWS CDK 配置对象 Lambda 接入点的更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) API 参考》中的 AWS::S3ObjectLambda 构造库