使用.NET AWS Lambda Annotations框架时,LambdaFunction特性指定的Role未同步到生成的serverless.template中
使用.NET AWS Lambda Annotations框架时,LambdaFunction特性指定的Role未同步到生成的serverless.template中
我之前在把.NET 6 Web应用迁移到AWS Lambda、用Lambda Annotations框架的时候,也碰到过一模一样的问题!当时折腾了好一会儿才理清原因和解决办法,给你分享几个可行的方案:
1. 优先升级NuGet包版本
这个Role属性不被生成到模板里的问题,其实是Amazon.Lambda.Annotations框架早期版本的一个已知bug。在1.1.0及之后的稳定版本里,官方已经修复了这个属性映射的逻辑。
你可以打开项目的NuGet包管理器,找到Amazon.Lambda.Annotations,直接升级到最新稳定版,重新构建项目后,Role属性应该就会自动出现在生成的serverless.template里了。
2. 用自定义模板片段补全配置(适合无法升级版本的场景)
如果因为项目依赖限制暂时没法升级框架版本,Lambda Annotations提供了模板扩展的功能:在项目根目录下创建一个名为serverless.template.transform.json的文件,然后写入需要补充的配置,比如针对你的MenuItemAll函数:
{ "Resources": { "MenuItemAll": { "Properties": { "Role": "arn:aws:iam::11111111:role/ThingyRole" } } } }
每次构建项目生成serverless.template的时候,框架会自动把这个文件里的配置合并到生成的模板中,不会被覆盖,完美解决手动修改模板后被重新构建覆盖的问题。
3. 临时脚本修复(不推荐,仅作应急)
如果以上两种方法都暂时没法用,可以写个简单的部署前脚本,自动给生成的模板插入Role属性。比如用PowerShell脚本:
$templatePath = ".\serverless.template" $templateContent = Get-Content $templatePath -Raw $updatedContent = $templateContent.Replace('"Policies": [', '"Role": "arn:aws:iam::11111111:role/ThingyRole", "Policies": [') Set-Content $templatePath $updatedContent
不过这个方法比较脆弱,只要模板结构有变化就可能失效,所以只建议作为临时应急方案。
总结一下,最靠谱的还是升级框架版本,这是从根源上解决问题的办法。
备注:内容来源于stack exchange,提问作者steficol
相关产品推荐
相关产品推荐

