如何配置 AWS SAM 以使用现有数据库?
How can I configure AWS SAM to use existing database?
在我能找到的所有示例中,SAM 模板似乎创建了一个新的 DynamoDB table。我如何配置它以指向现有的 tables?
由于资源已经存在,您可以对 table 的 ARN 进行硬编码,您通常会通过它们的 CloudFormation 逻辑名称引用 table(如果它们是由CloudFormation).
例如,如果您向名为 Example 的 table 授予扫描权限,您可以创建一个参数:
Parameters:
ExampleTableArn:
Description: Example DynamoDB table ARN
Type: String
Default: arn:aws:dynamodb:us-west-2:xxxxxxxxxxxx:table/Example
然后在您的 Lambda 策略中:
Policies:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 'dynamodb:Scan'
Resource: {Ref: ExampleTableArn}
如果您使用 Policy template list 中的策略模板,则无需设置 table ARN。
template.yaml
# ====================================
# TODO: SETUP PARAMETERS
# ====================================
Parameters:
ExistingTable:
Type: String
Default: example-table
Description: (Required) The name of existing DynamoDB
MinLength: 3
MaxLength: 50
AllowedPattern: ^[A-Za-z_-]+$
ConstraintDescription: "Required. Can be characters, hyphen, and underscore only. No numbers or special characters allowed."
# ====================================
# TODO: SETUP FUNCTIONS
# ====================================
OnConnectFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/lambdas/connect.handler
MemorySize: 256
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref ExistingTable
说明:
在这个 template.yaml
中,我设置了参数 ExistingTable 以允许输入现有的 table 名称。在功能上,我使用 DynamoDBCrudPolicy
允许在现有 table.
上创建、检索、更新和删除
在我能找到的所有示例中,SAM 模板似乎创建了一个新的 DynamoDB table。我如何配置它以指向现有的 tables?
由于资源已经存在,您可以对 table 的 ARN 进行硬编码,您通常会通过它们的 CloudFormation 逻辑名称引用 table(如果它们是由CloudFormation).
例如,如果您向名为 Example 的 table 授予扫描权限,您可以创建一个参数:
Parameters:
ExampleTableArn:
Description: Example DynamoDB table ARN
Type: String
Default: arn:aws:dynamodb:us-west-2:xxxxxxxxxxxx:table/Example
然后在您的 Lambda 策略中:
Policies:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 'dynamodb:Scan'
Resource: {Ref: ExampleTableArn}
如果您使用 Policy template list 中的策略模板,则无需设置 table ARN。
template.yaml
# ====================================
# TODO: SETUP PARAMETERS
# ====================================
Parameters:
ExistingTable:
Type: String
Default: example-table
Description: (Required) The name of existing DynamoDB
MinLength: 3
MaxLength: 50
AllowedPattern: ^[A-Za-z_-]+$
ConstraintDescription: "Required. Can be characters, hyphen, and underscore only. No numbers or special characters allowed."
# ====================================
# TODO: SETUP FUNCTIONS
# ====================================
OnConnectFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/lambdas/connect.handler
MemorySize: 256
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref ExistingTable
说明:
在这个 template.yaml
中,我设置了参数 ExistingTable 以允许输入现有的 table 名称。在功能上,我使用 DynamoDBCrudPolicy
允许在现有 table.