本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon SAM 连接器管理资源权限
什么是 Amazon SAM 连接器?
连接器是一种 Amazon Serverless Application Model (Amazon SAM) 抽象资源类型,标识为 AWS::Serverless::Connector
,在无服务器应用程序资源之间提供简单且范围明确的权限。通过将 Connectors
资源属性嵌入到源资源中来使用它。然后,定义您的目标资源并描述数据或事件应如何在这些资源之间流动。然后 Amazon SAM 编写必要的访问策略,以促进所需的交互。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources:
<source-resource-logical-id>
: Type:<resource-type>
... Connectors:<connector-name>
: Properties: Destination:<properties-that-identify-destination-resource>
Permissions:<permission-types-to-provision>
...
连接器示例
在此示例中,我们使用连接器将数据从 Amazon Lambda 函数写入到 Amazon DynamoDB 表。
Transform: AWS::Serverless-2016-10-31 Resources: MyTable: Type: AWS::Serverless::SimpleTable MyFunction: Type: AWS::Serverless::Function Connectors: MyConn: Properties: Destination: Id: MyTable Permissions: - Write Properties: Runtime: nodejs16.x Handler: index.handler InlineCode: | const AWS = require("aws-sdk"); const docClient = new AWS.DynamoDB.DocumentClient(); exports.handler = async (event, context) => { await docClient.put({ TableName: process.env.TABLE_NAME, Item: { id: context.awsRequestId, event: JSON.stringify(event) } }).promise(); } Environment: Variables: TABLE_NAME: !Ref MyTable
Connectors
资源属性嵌入在 Lambda 函数源资源中。使用 Id
属性将 DynamoDB 表定义为目标资源。连接器将在这两个资源之间提供 Write
权限。
当您将 Amazon SAM 模板部署到 Amazon CloudFormation 时,Amazon SAM 将自动编写此连接正常运行所需的必要访问策略。
源资源和目标资源之间支持的连接
连接器支持源和目标资源连接的精选组合之间的 Read
和 Write
数据和事件权限类型。例如,连接器支持 AWS::ApiGateway::RestApi
源资源和 AWS::Lambda::Function
目标资源之间的 Write
连接。
可以使用支持的属性的组合来定义源资源和目标资源。属性要求将取决于您正在建立的连接以及资源定义的位置。
注意
连接器可以在支持的无服务器和非无服务器资源类型之间配置权限。
有关支持的资源连接及其属性要求的列表,请参阅 连接器支持的源资源和目的地资源类型。
使用连接器
定义读取和写入权限
可以在单个连接器中配置 Read
和 Write
权限:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Lambda::Function Connectors: MyTableConn: Properties: Destination: Id: MyTable Permissions: - Read - Write MyTable: Type: AWS::DynamoDB::Table
使用其他支持的属性定义资源
对于源资源和目标资源,如果在同一个模板中定义,则使用 Id
属性。或者,可以添加 Qualifier
以缩小您定义的资源范围。当资源不在同一个模板中时,请使用受支持属性的组合。
-
有关源资源和目标资源支持的属性组合列表,请参阅 连接器支持的源资源和目的地资源类型。
-
有关可用于连接器的属性的说明,请参见 AWS::Serverless::Connector。
在定义具有 Id
之外属性的源资源时,请使用 SourceReference
属性。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources:
<source-resource-logical-id>
: Type:<resource-type>
... Connectors:<connector-name>
: Properties: SourceReference: Qualifier:<optional-qualifier>
<other-supported-properties>
Destination:<properties-that-identify-destination-resource>
Permissions:<permission-types-to-provision>
以下示例使用 Qualifier
缩小 Amazon API Gateway 资源的范围:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyApi: Type: AWS::Serverless::Api Connectors: ApiToLambdaConn: Properties: SourceReference: Qualifier: Prod/GET/foobar Destination: Id: MyFunction Permissions: - Write ...
以下示例使用支持的 Arn
和 Type
组合定义来自另一个模板的目标资源:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: TableConn: Properties: Destination: Type: AWS::DynamoDB::Table Arn: !GetAtt MyTable.Arn ...
从单一来源创建多个连接器
在一个源资源中,您可以定义多个连接器,且每个都有不同的目标资源。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: BucketConn: Properties: Destination: Id: MyBucket Permissions: - Read - Write SQSConn: Properties: Destination: Id: MyQueue Permissions: - Read - Write TableConn: Properties: Destination: Id: MyTable Permissions: - Read - Write TableConnWithTableArn: Properties: Destination: Type: AWS::DynamoDB::Table Arn: !GetAtt MyTable.Arn Permissions: - Read - Write ...
创建多目标连接器
在一个源资源中,您可以定义具有多个目标资源的单个连接器。以下是 Lambda 函数源资源的示例,其连接到 Amazon Simple Storage Service(Amazon S3)存储桶和 DynamoDB 表:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: WriteAccessConn: Properties: Destination: - Id: OutputBucket - Id: CredentialTable Permissions: - Write ... OutputBucket: Type: AWS::S3::Bucket CredentialTable: Type: AWS::DynamoDB::Table
使用连接器定义资源属性
可以为资源定义资源属性,以指定其他行为和关系。要了解有关资源属性的更多信息,请参阅《Amazon CloudFormation 用户指南》中的资源属性参考。
您可以将资源属性添加到嵌入式连接器,方法是在与连接器属性相同的级别上对其进行定义。在部署中转换 Amazon SAM 模板时,属性将传递给生成的资源。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: MyConn: DeletionPolicy: Retain DependsOn: AnotherFunction Properties: ...
连接器的工作原理
注意
本节介绍连接器如何在幕后提供必要的资源。使用连接器时,这种情况会自动发生。
首先,嵌入的 Connectors
资源属性转换为 AWS::Serverless::Connector
资源类型。它的逻辑 ID 会自动创建为 < source-resource-logical-id >< embedded-connector-logical-id >
。
例如,这是嵌入式连接器:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Lambda::Function Connectors: MyConn: Properties: Destination: Id: MyTable Permissions: - Read - Write MyTable: Type: AWS::DynamoDB::Table
这将生成以下 AWS::Serverless::Connector
资源:
Transform: AWS::Serverless-2016-10-31 Resources: ... MyFunctionMyConn: Type: AWS::Serverless::Connector Properties: Source: Id: MyFunction Destination: Id: MyTable Permissions: - Read - Write
注意
您也可以使用此语法在 Amazon SAM 模板中定义连接器。如果源资源定义于与连接器不同的模板上,则建议使用此方法。
接下来,将自动编写该连接必要的访问策略。有关连接器生成的资源的更多信息,请参阅 在指定了 AWS::Serverless::Connector 的情况下生成的 Amazon CloudFormation 资源。
Amazon SAM 连接器的优势
通过在资源之间自动编写适当的访问策略,连接器使您能够编写无服务器应用程序并专注于应用程序架构,而无需在 Amazon 授权功能、策略语言和特定于服务的安全设置方面的专业知识。因此,对于可能不熟悉无服务器开发的开发人员或希望提高开发速度的经验丰富的开发人员来说,连接器十分有用。
了解更多信息
有关使用 Amazon SAM 连接器的更多信息,请参阅 AWS::Serverless::Connector。
提供反馈
要提供有关连接器的反馈,请在serverless-application-model Amazon GitHub存储库中提交新问题