创建对象 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 接入点
登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在导航栏中,选择当前所显示 AWS 区域的名称。接下来,选择要切换到的区域。
-
在左侧导航窗格中,选择 Object Lambda 接入点。
-
在对象 Lambda 接入点页面上,选择创建对象 Lambda 接入点。
-
对于对象 Lambda 接入点名称,输入要用于接入点的名称。
与标准接入点一样,对于对象 Lambda 接入点同样具有命名规则。有关更多信息,请参阅 命名 Amazon S3 接入点的规则。
-
对于 Supporting Access Point(支持接入点),请输入或浏览到要使用的标准接入点。接入点必须与要变换的对象位于同一 AWS 区域 位置。有关创建标准接入点的信息,请参阅创建接入点。
-
在转换配置下,您可以添加一个函数来转换对象 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 函数。
-
-
(可选)在 Payload(有效负载)下,添加要提供给 Lambda 函数作为输入的 JSON 文本。您可以为调用同一 Lambda 函数的不同对象 Lambda 接入点配置具有不同参数的负载,从而扩展 Lambda 函数的灵活性。
重要
使用对象 Lambda 接入点时,确保负载不包含任何机密信息。
-
(可选)对于 Range and part number(范围和分段编号),如果您要处理带有范围和分段编号标头的
GET
和HEAD
请求,则必须启用此选项。启用此选项将确认您的 Lambda 函数可以识别和处理这些请求。有关范围标头和分段编号的更多信息,请参阅 使用 Range 和 partNumber 标头。 -
(可选)对于请求指标,请选择启用或禁用,以将 Amazon S3 监控添加到对象 Lambda 接入点。请求指标按标准 Amazon CloudWatch 费率计费。
-
(可选)在对象 Lambda 接入点策略下,设置资源策略。资源策略授予针对指定对象 Lambda 接入点的权限,并可以按资源、用户或其他条件控制接入点的使用。有关对象 Lambda 接入点资源策略的更多信息,请参阅为对象 Lambda 接入点配置 IAM 策略。
在屏蔽此对象 Lambda 接入点的公共访问权限设置下,选择要应用的屏蔽公共访问权限设置。默认情况下,为新的对象 Lambda 接入点启用所有屏蔽公共访问权限设置,建议您将默认设置保留为启用状态。Amazon S3 当前不支持在创建对象 Lambda 接入点之后更改对象 Lambda 接入点的屏蔽公共访问权限设置。
有关使用 Amazon S3 屏蔽公共访问权限的更多信息,请参阅管理接入点的公有访问。
-
请选择创建对象 Lambda 接入点。
使用 AWS CloudFormation 模板创建对象 Lambda 接入点
注意
要使用以下命令,请将
替换为您自己的信息。user input
placeholders
-
在 S3 对象 Lambda 默认配置
中下载 AWS Lambda 函数部署包 s3objectlambda_deployment_package.zip
。 -
运行以下
put-object
命令以将文件包上传到 Amazon S3 存储桶。aws s3api put-object --bucket
Amazon S3 bucket name
--key s3objectlambda_deployment_package.zip --body release/s3objectlambda_deployment_package.zip -
在 S3 对象 Lambda 默认配置
中下载 AWS CloudFormation 模板 s3objectlambda_defaultconfig.yaml
。 -
运行以下
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
--capabilitiescapability_IAM
您可以将此 AWS CloudFormation 模板配置为针对 GET
、HEAD
和 LIST
API 操作调用 Lambda。有关修改模板的默认配置的更多信息,请参阅使用 CloudFormation 模板自动进行 S3 对象 Lambda 设置。
使用 AWS CLI 创建对象 Lambda 接入点
注意
要使用以下命令,请将
替换为您自己的信息。user input
placeholders
以下示例为账户
中的存储桶 111122223333
创建了一个名为 amzn-s3-demo-bucket1
的对象 Lambda 接入点。此示例假定已创建了名为 my-object-lambda-ap
的标准接入点。有关创建标准接入点的信息,请参阅 创建接入点。example-ap
此示例使用 AWS 预构建的函数 decompress
。有关预构建的函数的更多信息,请参阅 使用 AWS 构建的 Lambda 函数。
-
创建存储桶。在此示例中,我们将使用
。有关创建存储桶的更多信息,请参阅 创建存储桶。amzn-s3-demo-bucket1
-
创建标准接入点并将其附加到存储桶。在此示例中,我们将使用
。有关创建标准接入点的信息,请参阅创建接入点。example-ap
-
请执行以下操作之一:
-
在您的账户中创建一个 Lambda 函数,用于转换 Amazon S3 对象。有关创建 Lambda 函数的更多信息,请参阅为 S3 对象 Lambda 接入点编写 Lambda 函数。要将您的自定义函数与 AWS CLI 结合使用,请参阅《AWS Lambda 开发人员指南》中的将 Lambda 与 AWS CLI 结合使用。
-
使用 AWS 预构建的 Lambda 函数。有关预构建的函数的更多信息,请参阅 使用 AWS 构建的 Lambda 函数。
-
-
创建一个名为
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" } } }] } -
运行
create-access-point-for-object-lambda
命令以创建对象 Lambda 接入点。aws s3control create-access-point-for-object-lambda --account-id
111122223333
--namemy-object-lambda-ap
--configuration file://my-olap-configuration.json
-
(可选)创建名为的
my-olap-policy.json
JSON 策略文件。添加对象 Lambda 接入点资源策略可以按资源、用户或其他条件控制接入点的使用。此资源策略为账户
授予针对指定对象 Lambda 接入点的444455556666
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
" } ] } -
(可选)运行
put-access-point-policy-for-object-lambda
命令以设置资源策略。aws s3control put-access-point-policy-for-object-lambda --account-id
111122223333
--namemy-object-lambda-ap
--policy file://my-olap-policy.json
-
(可选)指定负载。
有效负载是可选 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 接入点时,确保负载不包含任何机密信息。
您可以使用 Amazon S3 提供的默认配置创建对象 Lambda 接入点。您可以从 GitHub 存储库
有关修改 AWS CloudFormation 模板的默认配置的信息,请参阅使用 CloudFormation 模板自动进行 S3 对象 Lambda 设置。
有关在没有模板的情况下使用 AWS CloudFormation 配置对象 Lambda 接入点的信息,请参阅《AWS CloudFormation 用户指南》中的 AWS::S3ObjectLambda::AccessPoint
。
要上传 Lambda 函数部署软件包
-
在 S3 对象 Lambda 默认配置
中下载 AWS Lambda 函数部署包 s3objectlambda_deployment_package.zip
。 -
将文件包上传到 Amazon S3 存储桶。
使用 AWS CloudFormation 控制台创建对象 Lambda 接入点
-
在 S3 对象 Lambda 默认配置
中下载 AWS CloudFormation 模板 s3objectlambda_defaultconfig.yaml
。 -
登录 AWS 管理控制台并通过以下网址打开 AWS CloudFormation 控制台:https://console.aws.amazon.com/cloudformation
。 -
请执行以下操作之一:
-
如果您以前从未用过 AWS CloudFormation,请在 AWS CloudFormation 主页上选择 Create stack(创建堆栈)。
-
如果之前用过 AWS CloudFormation,请在左侧导航窗格中选择 Stacks(堆栈)。选择 Create stack(创建堆栈),然后选择 With new resources (standard) [使用新资源(标准)]。
-
-
对于 Prerequisite - Prepare template(先决条件 - 准备模板),请选择 Template is ready(模板已就绪)。
-
对于 Specify template(指定模板),选择 Upload a template file(上传模板文件)并上传
s3objectlambda_defaultconfig.yaml
。 -
请选择 Next(下一步)。
-
在 Specify stack details(指定堆栈详细信息)页面上,输入堆栈名称。
-
在 Parameters(参数)部分中,指定在堆栈模板中定义的以下参数:
-
对于 CreateNewSupportingAccessPoint,请执行以下操作之一:
-
如果对于您上传了模板的 S3 存储桶已经有支持接入点,请选择 false。
-
如果要为该存储桶创建新的接入点,请选择 true。
-
-
对于 EnableCloudWatchMonitoring,根据您是否要启用 Amazon CloudWatch 请求指标和告警,选择 true 或 false。
-
(可选)对于 LambdaFunctionPayload,添加要提供给 Lambda 函数作为输入的 JSON 文本。您可以为调用同一 Lambda 函数的不同对象 Lambda 接入点配置具有不同参数的负载,从而扩展 Lambda 函数的灵活性。
重要
使用对象 Lambda 接入点时,确保负载不包含任何机密信息。
-
对于 LambdaFunctionRuntime,输入适用于 Lambda 函数的首选运行时。可用的选项为
nodejs14.x
、python3.9
、java11
。 -
对于 LambdaFunctionS3BucketName,输入您在其中上传了部署文件包的 Amazon S3 存储桶名称。
-
对于 LambdaFunctionS3Key,输入您在上传部署文件包时使用的 Amazon S3 对象密钥。
-
对于 LambdaFunctionS3ObjectVersion,输入您在其中上传了部署文件包的 Amazon S3 对象版本。
-
对于 ObjectLambdaAccessPointName,输入对象 Lambda 接入点的名称。
-
对于 S3BucketName,输入将与对象 Lambda 接入点相关联的 Amazon S3 存储桶名称。
-
对于 SupportingAccessPointName,输入支持接入点的名称。
注意
这是与您在上一步中选择的 Amazon S3 存储桶相关联的接入点。如果您没有任何与 Amazon S3 存储桶相关联的接入点,则可以配置模板,以通过为 CreateNewSupportingAccessPoint 选择 true 来为您创建一个此类接入点。
-
-
请选择 Next(下一步)。
-
在 配置堆栈选项 页面上,请选择 下一步。
有关此页面上的可选设置的更多信息,请参阅《AWS CloudFormation 用户指南》中的设置 AWS CloudFormation 堆栈选项。
-
在 Review(查看)页面中,请选择 Create stack(创建堆栈)。
有关使用 AWS CDK 配置对象 Lambda 接入点的更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) API 参考》中的 AWS::S3ObjectLambda
构造库。