我正在设置一个管道以自动化云形式堆栈模板部署。
管道本身是在AWS eu-west-1 区域中创建的,但是云形式堆栈模板将部署在任何其他区域中。
实际上,我知道并且可以在另一个帐户中执行管道操作,但是我看不到在哪里指定我希望将模板部署到其中的区域,就像我们使用AWS CLI:aws --region cloudformation deploy....
。
无论如何是否有触发一个区域中的管道并在另一个区域执行deploy action
?
动作配置属性没有这种可能性...
解决方法是从 codebuild 容器和Speficy中运行AWS CLI部署命令,但是我想知道是否有一个更优雅的方法
如果您想部署到多个区域,一个接一个地,您可以在要部署到的每个区域中创建一个代码管道管道,并设置S3跨区域复制以使第一个管道的输出成为下一个区域中管道的输入。
这是一篇博客文章,进一步解释:https://aws.amazon.com/blogs/devops/building-a-cross-cross-regioncross-account-account-code-deployment-solution-solution-ondolution-on-aws/
<</p>自2018年11月下旬以来,Codepipeline支持交叉区域部署。但是,由于您需要在每个区域中创建工件存储桶,然后通过部署工件复制(例如,在您提到的代码建筑容器中(向它们复制,这仍然是不足之处的。因此,它的自动化不是可能的,但是如果您经历了设置的过程,则可以很好地工作。
codepipeline现在支持跨区域的部署并触发不同区域中的管道,我们可以指定"区域":" us-west-2"属性在云形式的动作阶段中触发该特定区域中的部署。
遵循此设置的步骤:
- 在两个不同的区域中创建两个水桶,例如" us-east-1"中的存储桶,在" us-west-2"中的存储桶(我们还可以使用Codepipeline已经创建的存储桶,当您首次在首次设置Pipeline时任何区域(
- 以一种可以在各自的帐户采取行动时可以使用相应存储桶的方式来配置管道。
- 在CodePipeline的操作中指定区域。
注意:我已连接样本云形式模板,该模板将帮助您进行跨区域云部署。
{
"Parameters": {
"BranchName": {
"Description": "CodeCommit branch name for all the resources",
"Type": "String",
"Default": "master"
},
"RepositoryName": {
"Description": "CodeComit repository name",
"Type": "String",
"Default": "aws-account-resources"
},
"CFNServiceRoleDeployA": {
"Description": "CFN service role for create resourcecs for account-A",
"Type": "String",
"Default": "arn:aws:iam::xxxxxxxxxxxxxx:role/CloudFormation-service-role-cp"
},
"CodePipelineServiceRole": {
"Description": "Service role for codepipeline",
"Type": "String",
"Default": "arn:aws:iam::xxxxxxxxxxxxxx:role/AWS-CodePipeline-Service"
},
"CodePipelineArtifactStoreBucket1": {
"Description": "S3 bucket to store the artifacts",
"Type": "String",
"Default": "bucket-us-east-1"
},
"CodePipelineArtifactStoreBucket2": {
"Description": "S3 bucket to store the artifacts",
"Type": "String",
"Default": "bucket-us-west-2"
}
},
"Resources": {
"AppPipeline": {
"Type": "AWS::CodePipeline::Pipeline",
"Properties": {
"Name": {"Fn::Sub": "${AWS::StackName}-cross-account-pipeline" },
"ArtifactStores": [
{
"ArtifactStore": {
"Type": "S3",
"Location": {
"Ref": "CodePipelineArtifactStoreBucket1"
}
},
"Region": "us-east-1"
},
{
"ArtifactStore": {
"Type": "S3",
"Location": {
"Ref": "CodePipelineArtifactStoreBucket2"
}
},
"Region": "us-west-2"
}
],
"RoleArn": {
"Ref": "CodePipelineServiceRole"
},
"Stages": [
{
"Name": "Source",
"Actions": [
{
"Name": "SourceAction",
"ActionTypeId": {
"Category": "Source",
"Owner": "AWS",
"Version": 1,
"Provider": "CodeCommit"
},
"OutputArtifacts": [
{
"Name": "SourceOutput"
}
],
"Configuration": {
"BranchName": {
"Ref": "BranchName"
},
"RepositoryName": {
"Ref": "RepositoryName"
},
"PollForSourceChanges": true
},
"RunOrder": 1
}
]
},
{
"Name": "Deploy-to-account-A",
"Actions": [
{
"Name": "stage-1",
"InputArtifacts": [
{
"Name": "SourceOutput"
}
],
"ActionTypeId": {
"Category": "Deploy",
"Owner": "AWS",
"Version": 1,
"Provider": "CloudFormation"
},
"Configuration": {
"ActionMode": "CREATE_UPDATE",
"StackName": "cloudformation-stack-name-account-A",
"TemplatePath":"SourceOutput::accountA.json",
"Capabilities": "CAPABILITY_IAM",
"RoleArn": {
"Ref": "CFNServiceRoleDeployA"
}
},
"RunOrder": 2,
"Region": "us-west-2"
}
]
}
]
}
}
}
}