【发布时间】:2020-10-28 20:24:14
【问题描述】:
我正在使用无服务器框架创建 DynamoDB 表,然后我想从 Lambda 函数访问它。
在serverless.yml 文件中,我有以下环境变量和CF 资源的定义。
我期待的是一个名为 accounts-api-dev-accounts 的表格,但 cloudformation 堆栈为我创建的是 accounts-api-dev-accounts-SOME_RANDOM_LETTERS_AND_NUMBERS_SUFFIX。
在我的 lambda 函数中,环境变量 DYNAMODB_ACCOUNTS_TABLE_NAME 暴露给没有 SOME_RANDOM_LETTERS_AND_NUMBERS_SUFFIX 部分的函数。 CF 堆栈是否应该添加随机后缀?我如何真正检索正确的表名?
service:
name: accounts-api
provider:
...
stage: ${opt:stage, 'dev'}
environment:
DYNAMODB_ACCOUNTS_TABLE_NAME: '${self:service}-${self:provider.stage}-accounts'
还有以下 CF 资源:
Resources:
AccountsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${env:DYNAMODB_ACCOUNTS_TABLE_NAME}
AttributeDefinitions:
- AttributeName: customerNumber
AttributeType: S
- AttributeName: accountNumber
AttributeType: S
KeySchema:
- AttributeName: customerNumber
KeyType: HASH
- AttributeName: accountNumber
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
【问题讨论】:
-
另一条评论,我在部署时收到以下警告:Serverless Warning ----------------------------- --------- 找不到满足声明“env:DYNAMODB_ACCOUNTS_TABLE_NAME”的有效环境变量。
-
可能是在创建表定义的时候环境变量还没有更新?我不知道。尝试
${self:provider.environment.DYNAMODB_ACCOUNTS_TABLE_NAME}而不是${env:DYNAMODB_ACCOUNTS_TABLE_NAME} -
宾果游戏。不知道为什么我不能使用 ${env} ,但它可以工作。
标签: amazon-dynamodb amazon-cloudformation serverless-framework