繁体   English   中英

通过 Visual Studio 发布 AWS 无服务器应用程序

[英]AWS Serverless Application Publish via Visual Studio

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

然而,在发布/部署它时,当 Stack 不存在时,第一次完美地工作,创建它假设的一切。 当我进行更改并需要重新部署/发布时,它会返回以下错误。

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

错误消息正上方是这个

找到现有堆栈:错误

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

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

发布对话框

发布对话框

项目结构

项目结构

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

我将内联策略更改为

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

其中cloudformation:*曾经是单独权限的几行。

这现在成功地通过现有堆栈发布,但是 Visual Studio 不喜欢它并且崩溃了。 (虽然更新确实通过 AWS)

AWS 的无服务器应用程序模型……仍然非常新。 由于缺乏关于使用 CLI 部署应用程序所需的 IAM 权限的任何文档,我制定了这个似乎有效的策略,并且只授予任务最不需要的权限

{
    "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": "*"
        }
    ]
}

注意:

<STACK NAME OR GLOB>替换为最适合您需求的内容,例如:

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

<AWS_REGION>替换为您正在运营的区域。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM