【问题标题】:AWS Serverless Application Publish via Visual Studio通过 Visual Studio 发布 AWS 无服务器应用程序
【发布时间】:2020-06-24 04:47:13
【问题描述】:

使用 .Net Core、visual studio 2017 和 AWS Toolkit for Visual 2017,我创建了一个基本的 Web api,该 api 按设计工作。

但是,在发布/部署它时,第一次在 Stack 不存在时完美运行,创建了它所设想的一切。当我进行更改并需要重新部署/发布时,它会返回以下错误。

创建 CloudFormation 更改集时出错:堆栈 [TestStack] 已存在,无法使用更改集 [Lambda-Tools-636366731897711782] 再次创建。

错误信息的正上方是这个

找到现有堆栈:False

我想知道它在检测堆栈是否存在时是否有什么不对劲的地方。

我只是想知道我是否遗漏了什么,或者这是否真的是设计的,至于我要重新发布它,我必须登录我的 AWS 控制台并进入云形成部分并删除现有的堆栈。

发布对话框

项目结构

【问题讨论】:

    标签: amazon-web-services asp.net-core aws-lambda


    【解决方案1】:

    经过一番挖掘和一般试验和错误。我相信这实际上与执行发布的用户的权限有关。 (AWS 中的用户)

    我将内联策略更改为

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "",
                "Effect": "Allow",
                "Action": [
                    "cloudformation:*"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }
    

    其中cloudformation:* 曾经是用于单个权限的几行。

    这现在可以成功发布到现有的 Stack 上,但是 Visual Studio 不喜欢它并崩溃。 (虽然更新确实通过 AWS)

    【讨论】:

    • 我遇到了同样的问题(或类似的问题?),它在发布后崩溃,我发现实际上杀死 VS 的不是发布,而是 AWS Toolkit 的 CloudFormation 堆栈查看器.为了确认这一点,我打开 VS2017 到 AWS Explorer,转到 AWS CloudFormation 节点,展开它,然后双击(或右键单击 -> 打开)堆栈。 VS 立即崩溃。 VS2017 activityLog 显示 AWSToolkitPackage.dll 的“具有相同键的元素已存在”错误。这很烦人。
    • 必须有一组更简洁的cloudformation: 策略权限,sam deploy 需要这些权限。我遇到了同样的问题,尝试为应用程序(重新)部署编写 IAM 策略,仅授予所需的权限。
    【解决方案2】:

    AWS' Serverless Application Model 还是……非常新。由于缺乏任何有关使用 CLI 部署应用程序所需的 IAM 权限的文档,我制定了这项似乎可行的策略,并且只有 grants the least needed permissions 用于该任务。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "lambda:UpdateFunctionCode",
                    "s3:PutObject",
                    "cloudformation:DescribeStackEvents",
                    "cloudformation:UpdateStack",
                    "cloudformation:DescribeStackResource",
                    "cloudformation:CreateChangeSet",
                    "cloudformation:DescribeChangeSet",
                    "cloudformation:ExecuteChangeSet",
                    "cloudformation:GetTemplateSummary",
                    "cloudformation:ListChangeSets",
                    "cloudformation:DescribeStacks"
                ],
                "Resource": [
                    "arn:aws:lambda:*:123456789012:function:*-SAM-*",
                    "arn:aws:cloudformation:*:123456789012:stack/<STACK NAME OR GLOB>/*",
                    "arn:aws:cloudformation:<AWS_REGION>:aws:transform/Serverless-2016-10-31",
                    "arn:aws:s3:::aws-sam-cli-managed-default-samclisourcebucket-*/*"
                ]
            },
            {
                "Sid": "VisualEditor1",
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucketMultipartUploads"
                ],
                "Resource": "arn:aws:s3:::aws-sam-cli-managed-default-samclisourcebucket-*"
            },
            {
                "Sid": "VisualEditor2",
                "Effect": "Allow",
                "Action": "cloudformation:ValidateTemplate",
                "Resource": "*"
            }
        ]
    }
    

    注意:

    &lt;STACK NAME OR GLOB&gt; 替换为最适合您需求的内容,例如:

    • * 如果您不在乎这授予访问哪个 CloudFormation 堆栈
    • *-SAM-* 如果您以某种一致性命名您的 SAM CloudFormation 应用程序

    &lt;AWS_REGION&gt; 替换为您所在的地区。

    arn:aws:s3:::aws-sam-cli-managed-default-samclisourcebucket-* 是 SAM CLI 用于创建用于部署 CloudFormation 模板或更改集的存储桶的标准存储桶命名。您可以将其更改为明确为您创建的存储桶 SAM 的名称。

    【讨论】:

    • 可能会添加更多权限,具体取决于部署的应用程序是否将与其他 AWS 服务交互。但这对我们很有效,重新部署了一个需要与 DynDB 对话的 SAM 应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多