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

VS2022中AWS Serverless.template发布后被覆盖的问题求助

解决VS2022 AWS Toolkit发布Lambda时serverless.template被覆盖的问题

问题背景

使用VS2022+AWS Toolkit开发Lambda项目时,执行「Publish to AWS Lambda」操作后,serverless.template(包括复制后的serverless2.template)会被重置为默认47行内容,所有自定义函数配置丢失,原文件从145行被缩减。重置后的默认模板内容如下:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Description": "TCR Manager API This template is partially managed by Amazon.Lambda.Annotations (v1.5.0.0).",
  "Resources": {
    "TcrManagerLambdaExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": {
            "Effect": "Allow",
            "Principal": {
              "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
          "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
        ],
        "Policies": [
          {
            "PolicyName": "lambdaPolicyAllowSecretsManager",
            "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": {
                "Effect": "Allow",
                "Action": "secretsmanager:GetSecretValue",
                "Resource": "*"
              }
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "ApiURL": {
      "Description": "API endpoint URL for Prod environment",
      "Value": {
        "Fn::Sub": "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"
      }
    }
  }
}

核心原因

问题源于项目中使用的Amazon.Lambda.Annotations包,该工具会根据代码中的注解自动生成/更新serverless.template,发布操作触发了模板的自动重置,覆盖了自定义配置。

解决方法

1. 禁用Annotations自动生成模板

在项目的.csproj文件中添加如下配置,阻止Annotations自动覆盖模板:

<PropertyGroup>
  <LambdaAnnotationsGenerateServerlessTemplate>false</LambdaAnnotationsGenerateServerlessTemplate>
</PropertyGroup>

添加后保存项目,重新发布时工具将不再自动生成或修改模板文件,自定义配置得以保留。

2. 使用分层模板分离自定义配置

保留Annotations生成的基础模板,将自定义的函数配置、资源定义放到独立的CloudFormation模板文件(比如custom-resources.template)中,通过嵌套栈合并到主模板:
在serverless.template的Resources节点下添加:

"CustomLambdaResources": {
  "Type": "AWS::CloudFormation::Stack",
  "Properties": {
    "TemplateURL": "custom-resources.template"
  }
}

这种方式既保留了Annotations自动管理基础资源(如执行角色)的能力,又能确保自定义配置不会被覆盖。

3. 修改发布向导配置

在VS2022的Lambda发布向导中:

  • 取消勾选「Generate serverless template」选项
  • 选择「Use existing template」,指定你修改后的模板文件路径
  • 完成发布配置后保存,后续发布将使用指定的现有模板,不再触发重置。

4. 修正自定义模板的项目关联

如果已经将模板复制为serverless2.template,需要更新项目的配置文件lambda-tools-defaults.json,将template字段的值改为自定义模板的名称:

{
  // 其他配置...
  "template": "serverless2.template"
}

同时确保发布向导中指定的模板路径与该配置一致,避免工具继续使用默认的serverless.template。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:35:14