AWS Serverless Application通过Visual Studio发布

时间:2017-07-26 13:22:45

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

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

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

  

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

错误消息正上方是

  

找到现有堆栈:错误

我想知道是否有一些不太正确的事情来检测堆栈是否存在。

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

发布对话

Publish Dialog

项目结构

Project Structure

2 个答案:

答案 0 :(得分:1)

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

注意:

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

  • *如果您不在乎哪个CloudFormation Stack会授予访问权限
  • *-SAM-*如果您以一致的方式命名SAM CloudFormation应用

<AWS_REGION>替换为您正在操作的区域。

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

答案 1 :(得分:0)

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

我将内联政策更改为

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

其中cloudformation:*曾经是个别权限的多行。

现在成功发布了现有的Stack,但是视觉工作室并不喜欢它并且崩溃。 (尽管更新确实通过了AWS)