首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动创建DynamoDB

自动创建DynamoDB
EN

Stack Overflow用户
提问于 2018-01-26 03:39:13
回答 1查看 531关注 0票数 3

在我的serverless.yml文件中,我指定了一个DynamoDB资源,类似于此(参见下面)。我想知道两件事:

  1. 为什么当这些表不存在时,我没有看到它们被创建,迫使我手动进入AWS控制台并亲自这样做?
  2. 在我的源代码(nodejs)中,我不确定如何引用yml文件中指定的表,而不是硬编码它。

上面的两个问题变成了一个单一的问题,即我希望能够在yml中指定表,然后在执行“部署”时,为每个环境创建一个不同的表集。

也就是说,如果我部署到“-MyTable_Prod”,那么表将是"MyTable_Prod“。如果我部署到“-stage”,那么表将是"MyTable_Dev",等等.

弄清楚这一点对于使部署更加顺畅将有很大帮助:)。

serverless.yml感兴趣的部分如下:

代码语言:javascript
复制
  resources:  
  Resources:
    DynamoDbTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: MyHappyFunTable
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 5
          WriteCapacityUnits: 5
    DynamoDBIamPolicy:
      Type: AWS::IAM::Policy
      DependsOn: DynamoDbTable
      Properties:
        PolicyName: lambda-dynamodb
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Action:
                - dynamodb:Query
                - dynamodb:Scan
                - dynamodb:GetItem
                - dynamodb:PutItem
                - dynamodb:UpdateItem
                - dynamodb:DeleteItem
              Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
        Roles:
          - Ref: IamRoleLambdaExecution

下面是我可怕的“硬编码”表名的示例:

代码语言:javascript
复制
dbParms = {
    TableName : "MyTable_Dev",
    FilterExpression: "#tid = :tid and #owner = :owner",
    ProjectionExpression: "#id, #name",
    ExpressionAttributeNames: {
        "#tid" : "tenantid",
        "#id" : "id",
        "#name" : "name",
        "#owner" : "owner"
    },
    ExpressionAttributeValues: {
        ":tid": tenantId,
        ":owner": owner
    }
};

注意"MyTable_Dev“。理想情况下,我希望它是"MyTable_“+ {$opt.stage} .或者其他类似的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 13:25:07

在我的源代码(nodejs)中,我不确定如何引用yml文件中指定的表,而不是硬编码它。

我会把你的阶段放在一个你的Lambda函数可以访问的环境变量中。

在你的serverless.yml

代码语言:javascript
复制
provider:
  ...
  environment:
    STAGE: {$opt:stage}

然后,在您的代码中您可以通过process.env.STAGE访问它。

代码语言:javascript
复制
const tableName = 'MyTable_' + process.env.STAGE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48455479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档