ドキュメントに記載されているように、Java-8を使用してAWS SAM for LambdaでAWS Code Pipelineをセットアップしようとしていました
http://docs.aws.Amazon.com/lambda/latest/dg/automating-deployment.html (例はnode.jsにあります)。
しかし、私のステージングがCloudFormationスタックでスタックし、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
を使用して変更セットを実行する2番目のアクションが必要になります。または、アクションのアクションモードをCREATE_UPDATE
に変更して、アクションを直接更新することもできます。
CodePipelineでCHANGE_SET_CREATE
とCHANGE_SET_EXECUTE
を使用する理由の1つは、それらの間に承認ステップを設ける場合です。これが自動的に完了することを期待している場合は、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が表示されます。