You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Serverless.yml中根据Stage动态切换DynamoDB ARN

实现Serverless.yml中按环境动态切换DynamoDB表ARN

下面提供两种可行方案,帮你根据stage环境变量自动切换DynamoDB表ARN:

方案一:使用自定义变量映射

直接在serverless.yml中定义不同环境的ARN映射,通过变量插值动态引用:

service: lambda-service
frameworkVersion: '3'

custom:
  # 定义各环境对应的DynamoDB表ARN
  dynamoDbArn:
    staging: arn:aws:dynamodb:ap-south-1:11111111:table/table-1
    production: arn:aws:dynamodb:ap-south-1:22222222:table/table-1

provider:
  name: aws
  # 优先读取命令行传入的stage参数,默认值为staging
  stage: ${opt:stage, 'staging'}
  environment:
    NODE_ENV: ${self:provider.stage}
    # 将当前环境的ARN注入Lambda环境变量(可选,供代码中使用)
    DYNAMODB_TABLE_ARN: ${self:custom.dynamoDbArn.${self:provider.stage}}
  region: ap-south-1
  runtime: nodejs18.x
  
  iam:
    role:
      statements:
        - Effect: Allow
          Action:
            - dynamodb:Query
            - dynamodb:Scan
            - dynamodb:GetItem
            - dynamodb:PutItem
            - dynamodb:UpdateItem
            - dynamodb:DeleteItem
          # 动态引用对应环境的ARN
          Resource: ${self:custom.dynamoDbArn.${self:provider.stage}}
        
functions:
  api:
    handler: index.handler
    events:
      - httpApi: '*'

plugins:
  - serverless-offline

部署命令

  • 部署到staging环境:serverless deploy(默认)或serverless deploy --stage staging
  • 部署到production环境:serverless deploy --stage production

方案二:使用外部环境配置文件

当环境配置项较多时,可将不同环境的配置分离到单独文件,便于维护:

  1. 创建环境配置文件
  • env.staging.yml:
dynamoDbArn: arn:aws:dynamodb:ap-south-1:11111111:table/table-1
  • env.production.yml:
dynamoDbArn: arn:aws:dynamodb:ap-south-1:22222222:table/table-1
  1. 修改serverless.yml加载对应文件:
service: lambda-service
frameworkVersion: '3'

custom:
  # 加载当前stage对应的配置文件
  stageConfig: ${file(env.${self:provider.stage}.yml)}

provider:
  name: aws
  stage: ${opt:stage, 'staging'}
  environment:
    NODE_ENV: ${self:provider.stage}
    DYNAMODB_TABLE_ARN: ${self:custom.stageConfig.dynamoDbArn}
  region: ap-south-1
  runtime: nodejs18.x
  
  iam:
    role:
      statements:
        - Effect: Allow
          Action:
            - dynamodb:Query
            - dynamodb:Scan
            - dynamodb:GetItem
            - dynamodb:PutItem
            - dynamodb:UpdateItem
            - dynamodb:DeleteItem
          Resource: ${self:custom.stageConfig.dynamoDbArn}
        
functions:
  api:
    handler: index.handler
    events:
      - httpApi: '*'

plugins:
  - serverless-offline

部署命令与方案一一致,只需通过--stage参数指定环境即可自动加载对应配置。

内容的提问来源于stack exchange,提问作者mayank3503

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:07:16