AWS::Serverless::Connector - AWS Serverless Application Model

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS::Serverless::Connector

配置两种资源之间的权限。有关连接器的简介,请参阅使用 AWS SAM 连接器管理资源权限

有关生成的 AWS CloudFormation 资源的更多信息,请参阅在指定了 AWS::Serverless::Connector 的情况下生成的 AWS CloudFormation 资源

要提供有关连接器的反馈,请在serverless-application-model AWS GitHub 存储库中提交新问题

注意

部署到时 AWS CloudFormation, AWS SAM 会将您的 AWS SAM 资源转换为 AWS CloudFormation 资源。有关更多信息,请参阅 生成的 AWS CloudFormation 资源用于 AWS SAM

语法

要在 AWS Serverless Application Model (AWS SAM) 模板中声明此实体,请使用以下任一语法。

注意

对于大多数用例,我们建议使用嵌入式连接器语法。随着时间的推移,嵌入在源资源中使其更易于读取和维护。当您需要引用不在同一 AWS SAM 模板中的源资源(例如嵌套堆栈中的资源或共享资源)时,请使用AWS::Serverless::Connector语法。

嵌入式连接器

<source-resource-logical-id>: Connectors: <connector-logical-id: Properties: Destination: ResourceReference | List of ResourceReference Permissions: List SourceReference: SourceReference

AWS::Serverless::Connector

Type: AWS::Serverless::Connector Properties: Destination: ResourceReference | List of ResourceReference Permissions: List Source: ResourceReference

属性

Destination

目标资源。

类型:ResourceReference| 清单 ResourceReference

必需:是

AWS CloudFormation 兼容性:此属性是独有的 AWS SAM ,没有 AWS CloudFormation 等效属性。

Permissions

允许源资源对目标资源执行的权限类型。

Read包括允许从资源中读取数据的 AWS Identity and Access Management (IAM) 操作。

Write 包括允许初始化和向资源写入数据的 IAM 操作。

有效值ReadWrite

类型:列表

必需:是

AWS CloudFormation 兼容性:此属性是独有的 AWS SAM ,没有 AWS CloudFormation 等效属性。

Source

源资源。使用 AWS::Serverless::Connector 语法时为必需。

类型:ResourceReference

必需:条件

AWS CloudFormation 兼容性:此属性是独有的 AWS SAM ,没有 AWS CloudFormation 等效属性。

SourceReference

源资源。

注意

为源资源定义其他属性时,使用嵌入式连接器语法。

类型:SourceReference

必需:否

AWS CloudFormation 兼容性:此属性是独有的 AWS SAM ,没有 AWS CloudFormation 等效属性。

示例

嵌入式连接器

以下示例使用嵌入式连接器定义 AWS Lambda 函数和 Amazon DynamoDB 表之间的 Write 数据连接:

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 ...

以下示例使用嵌入式连接器定义 ReadWrite 权限:

Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: MyConn: Properties: Destination: Id: MyTable Permissions: - Read - Write MyTable: Type: AWS::DynamoDB::Table ...

以下示例使用嵌入式连接器定义具有 Id 以外属性的源资源:

Transform: AWS::Serverless-2016-10-31 Transform: AWS::Serverless-2016-10-31 ... Resources: MyApi: Type: AWS::Serverless::Api Connectors: ApitoLambdaConn: Properties: SourceReference: Qualifier: Prod/GET/foobar Destination: Id: MyTable Permissions: - Read - Write MyTable: Type: AWS::DynamoDB::Table ...

AWS::Serverless::Connector

以下示例使用该AWS::Serverless::Connector资源对一个 AWS Lambda 函数 Amazon DynamoDB 表进行读取和写入:

MyConnector: Type: AWS::Serverless::Connector Properties: Source: Id: MyFunction Destination: Id: MyTable Permissions: - Read - Write

以下示例使用 AWS::Serverless::Connector 资源让 Lambda 函数写入 Amazon SNS 主题,两个资源位于同一个模板中:

MyConnector: Type: AWS::Serverless::Connector Properties: Source: Id: MyLambda Destination: Id: MySNSTopic Permissions: - Write

以下示例使用 AWS::Serverless::Connector 资源让 Amazon SNS 主题写入 Lambda 函数,然后该函数写入 Amazon DynamoDB 表,所有资源都位于同一个模板中:

Transform: AWS::Serverless-2016-10-31 Resources: Topic: Type: AWS::SNS::Topic Properties: Subscription: - Endpoint: !GetAtt Function.Arn Protocol: lambda Function: Type: AWS::Serverless::Function Properties: Runtime: nodejs16.x Handler: index.handler InlineCode: | const AWS = require('aws-sdk'); exports.handler = async (event, context) => { const docClient = new AWS.DynamoDB.DocumentClient(); await docClient.put({ TableName: process.env.TABLE_NAME, Item: { id: context.awsRequestId, event: JSON.stringify(event) } }).promise(); }; Environment: Variables: TABLE_NAME: !Ref Table Table: Type: AWS::Serverless::SimpleTable TopicToFunctionConnector: Type: AWS::Serverless::Connector Properties: Source: Id: Topic Destination: Id: Function Permissions: - Write FunctionToTableConnector: Type: AWS::Serverless::Connector Properties: Source: Id: Function Destination: Id: Table Permissions: - Write

以下是上面示例中转换后的 AWS CloudFormation 模板:

"FunctionToTableConnectorPolicy": { "Type": "AWS::IAM::ManagedPolicy", "Metadata": { "aws:sam:connectors": { "FunctionToTableConnector": { "Source": { "Type": "AWS::Lambda::Function" }, "Destination": { "Type": "AWS::DynamoDB::Table" } } } }, "Properties": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:PartiQLDelete", "dynamodb:PartiQLInsert", "dynamodb:PartiQLUpdate" ], "Resource": [ { "Fn::GetAtt": [ "MyTable", "Arn" ] }, { "Fn::Sub": [ "${DestinationArn}/index/*", { "DestinationArn": { "Fn::GetAtt": [ "MyTable", "Arn" ] } } ] } ] } ] }, "Roles": [ { "Ref": "MyFunctionRole" } ] } }