AWS Cloudformation 陷入 Review_In_Progress

AWS Cloud Formation Stuck in Review_In_Progress

我正在尝试使用 Java-8 为 Lambda 使用 AWS SAM 设置 AWS 代码管道,如文档

中所述

http://docs.aws.amazon.com/lambda/latest/dg/automating-deployment.html (示例在 node.js 中)。

然而,我的 Staging 卡在 CloudFormation Stack 卡在 REVIEW_IN_PROGRESS 了很长时间。有什么办法可以调试这个问题吗?

我没有在控制台中看到任何进一步的事件。有什么具体要检查的吗?

模板如下

$ aws codepipeline get-pipeline --region us-east-1 --name aws-lexbot-facebook-pipeline
{
    "pipeline": {
        "roleArn": "arn:aws:iam::XXXXXXXXXXXX:role/AWS-CodePipeline-Service", 
        "stages": [
            {
                "name": "Source", 
                "actions": [
                    {
                        "inputArtifacts": [], 
                        "name": "Source", 
                        "actionTypeId": {
                            "category": "Source", 
                            "owner": "ThirdParty", 
                            "version": "1", 
                            "provider": "GitHub"
                        }, 
                        "outputArtifacts": [
                            {
                                "name": "MyApp"
                            }
                        ], 
                        "configuration": {
                            "Owner": “xxxxxxx”, 
                            "Repo": "lexbot", 
                            "PollForSourceChanges": "true", 
                            "Branch": "master", 
                            "OAuthToken": "****"
                        }, 
                        "runOrder": 1
                    }
                ]
            }, 
            {
                "name": "Build", 
                "actions": [
                    {
                        "inputArtifacts": [
                            {
                                "name": "MyApp"
                            }
                        ], 
                        "name": "CodeBuild", 
                        "actionTypeId": {
                            "category": "Build", 
                            "owner": "AWS", 
                            "version": "1", 
                            "provider": "CodeBuild"
                        }, 
                        "outputArtifacts": [
                            {
                                "name": "MyAppBuild"
                            }
                        ], 
                        "configuration": {
                            "ProjectName": "aws-lexbot-facebook-codebuild"
                        }, 
                        "runOrder": 1
                    }
                ]
            }, 
            {
                "name": "Staging", 
                "actions": [
                    {
                        "inputArtifacts": [
                            {
                                "name": "MyAppBuild"
                            }
                        ], 
                        "name": "LexBotBetaStack", 
                        "actionTypeId": {
                            "category": "Deploy", 
                            "owner": "AWS", 
                            "version": "1", 
                            "provider": "CloudFormation"
                        }, 
                        "outputArtifacts": [], 
                        "configuration": {
                            "ActionMode": "CHANGE_SET_REPLACE", 
                            "ChangeSetName": "LexBotChangeSet", 
                            "RoleArn": "arn:aws:iam::XXXXXXXXXXX:role/cloudformation-lambda-execution-role", 
                            "Capabilities": "CAPABILITY_IAM", 
                            "StackName": "LexBotBetaStack", 
                            "TemplatePath": "MyAppBuild::SamTemplate.yaml"
                        }, 
                        "runOrder": 1
                    }
                ]
            }
        ], 
        "artifactStore": {
            "type": "S3", 
            "location": “XXXXXX-us-east-1-987802409920"
        }, 
        "name": "aws-lexbot-facebook-pipeline", 
        "version": 1
    }
}

概览

在您的 CodePipeline 步骤中,您使用的是 CHANGE_SET_CREATE 操作模式。这会在 CloudFormation 堆栈上创建一个更改集,但不会自动执行它。您将需要第二个操作来使用 CHANGE_SET_EXECUTE 执行更改集。或者,您可以将操作的操作模式更改为 CREATE_UPDATE,这应该会直接更新您的操作。

您可能希望在 CodePipeline 中使用 CHANGE_SET_CREATECHANGE_SET_EXECUTE 的一个原因是,如果您希望在它们之间有一个批准步骤。如果您希望它自动完成,我建议 CREATE_UPDATE

CREATE_UPDATE 示例

下面是您的 CodePipeline Staging 阶段,但使用 CREATE_UPDATE 而不是 CREATE_CHANGE_SET。这将创建一个名为 stack 的新堆栈,或者如果同名堆栈已存在则更新现有堆栈。

{
    "inputArtifacts": [
        {
            "name": "MyAppBuild"
        }
    ], 
    "name": "LexBotBetaStack", 
    "actionTypeId": {
        "category": "Deploy", 
        "owner": "AWS", 
        "version": "1", 
        "provider": "CloudFormation"
    }, 
    "outputArtifacts": [], 
    "configuration": {
        "ActionMode": "CREATE_UPDATE", 
        "ChangeSetName": "LexBotChangeSet", 
        "RoleArn": "arn:aws:iam::XXXXXXXXXXX:role/cloudformation-lambda-execution-role", 
        "Capabilities": "CAPABILITY_IAM", 
        "StackName": "LexBotBetaStack", 
        "TemplatePath": "MyAppBuild::SamTemplate.yaml"
    }, 
    "runOrder": 1
}

CHANGE_SET_CREATE 和 CHANGE_SET_EXECUTE 示例

下面是一个如何同时使用 CHANGE_SET_CREATECHANGE_SET_EXECUTE 的示例。它首先在命名堆栈上创建一个变更集,然后执行该变更集。如果您希望在变更集和执行变更之间有一个 CodePipeline Approval 步骤,这将非常有用,这样您就可以查看预期的变更。

{
    "inputArtifacts": [
        {
            "name": "MyAppBuild"
        }
    ], 
    "name": "LexBotBetaStackChangeSet", 
    "actionTypeId": {
        "category": "Deploy", 
        "owner": "AWS", 
        "version": "1", 
        "provider": "CloudFormation"
    }, 
    "outputArtifacts": [], 
    "configuration": {
        "ActionMode": "CHANGE_SET_REPLACE", 
        "ChangeSetName": "LexBotChangeSet", 
        "RoleArn": "arn:aws:iam::XXXXXXXXXXX:role/cloudformation-lambda-execution-role", 
        "Capabilities": "CAPABILITY_IAM", 
        "StackName": "LexBotBetaStack", 
        "TemplatePath": "MyAppBuild::SamTemplate.yaml"
    }, 
    "runOrder": 1
},
{
    "name": "LexBotBetaStackExecute", 
    "actionTypeId": {
        "category": "Deploy", 
        "owner": "AWS", 
        "version": "1", 
        "provider": "CloudFormation"
    }, 
    "configuration": {
        "ActionMode": "CHANGE_SET_EXECUTE", 
        "ChangeSetName": "LexBotChangeSet", 
        "StackName": "LexBotBetaStack", 
    }, 
    "runOrder": 2
}

我转到更改集并点击执行按钮,现在它显示 CREATION_IN_PROGRESS。

单击更改集并单击 'name' 字段中的 link,它向我显示状态原因中的“模板格式错误:”。凭借这种洞察力,我能够识别并修复错误。

这可能是由于您的模板 file/troposphere 代码中存在一些服务错误。确保您可以可视化 cf 树以检查服务如何通信。

已经有人回答了,但是为了更清楚,请参考下面的截图。单击更改集,然后单击 select 更改集并单击执行。