如何配置AWS SAM使用现有数据库?

时间:2018-10-04 18:01:30

标签: amazon-web-services aws-sam

在我可以找到的所有示例中,似乎SAM模板创建了一个新的DynamoDB表。如何配置它以指向现有表?

2 个答案:

答案 0 :(得分:2)

由于资源已经存在,因此您可以对表的ARN进行硬编码,通常在这些表中按其CloudFormation逻辑名(如果它们是由CloudFormation创建的)来引用这些表。

例如,如果您向名为Example的表授予扫描权限,则可以创建一个参数:

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}

答案 1 :(得分:0)

如果您使用 Policy template list 中的策略模板,则不需要设置表 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 以允许输入现有表名。在函数中,我使用了 DynamoDBCrudPolicy,它允许对现有表进行创建、检索、更新和删除。