首页 > 解决方案 > 使用无服务器框架创建的 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_SUFFIXCF 堆栈是否应该添加随机后缀?我如何实际检索正确的表名?

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

标签: amazon-dynamodbamazon-cloudformationserverless-framework

解决方案


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

尝试${self:provider.environment.DYNAMODB_ACCOUNTS_TABLE_NAME}代替${env:DYNAMODB_ACCOUNTS_TABLE_NAME}.


推荐阅读