在我的serverless.yml文件中,我指定了一个DynamoDB资源,类似于此(参见下面)。我想知道两件事:
上面的两个问题变成了一个单一的问题,即我希望能够在yml中指定表,然后在执行“部署”时,为每个环境创建一个不同的表集。
也就是说,如果我部署到“-MyTable_Prod”,那么表将是"MyTable_Prod“。如果我部署到“-stage”,那么表将是"MyTable_Dev",等等.
弄清楚这一点对于使部署更加顺畅将有很大帮助:)。
serverless.yml感兴趣的部分如下:
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下面是我可怕的“硬编码”表名的示例:
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} .或者其他类似的东西。
发布于 2018-01-26 13:25:07
在我的源代码(nodejs)中,我不确定如何引用yml文件中指定的表,而不是硬编码它。
我会把你的阶段放在一个你的Lambda函数可以访问的环境变量中。
在你的serverless.yml里
provider:
...
environment:
STAGE: {$opt:stage}然后,在您的代码中您可以通过process.env.STAGE访问它。
const tableName = 'MyTable_' + process.env.STAGEhttps://stackoverflow.com/questions/48455479
复制相似问题