使用无服务器框架创建的DynamoDB表名有一个随机后缀



我正在使用无服务器框架创建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

也许在创建表定义时环境变量还没有更新?我不确定。

尝试${self:provider.environment.DYNAMODB_ACCOUNTS_TABLE_NAME}而不是${env:DYNAMODB_ACCOUNTS_TABLE_NAME}

我还没有看到这种行为(部署后的随机字符(,当必须替换表时,这可能是一种强制唯一性的方法。您可以使用另一个环境变量,并由表资源的输出填充值。这样,CloudFormation将向Lambda环境变量注入实际的资源名称。我还没有尝试过,但这将是我的第一次";转到";。

environment:
DYNAMODB_ACCOUNTS_TABLE_NAME: '${self:service}-${self:provider.stage}-accounts'
ACTUAL_DYNAMODB_ACCOUNTS_TABLE_NAME:
Ref: AccountsTable

相关内容

最新更新