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_CREATE
和 CHANGE_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_CREATE
和 CHANGE_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 更改集并单击执行。
我正在尝试使用 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_CREATE
和 CHANGE_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_CREATE
和 CHANGE_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 更改集并单击执行。