CodePipeline 由阶段(逻辑)和操作(源/构建/部署等)组成。
每个操作都可以在本地帐户或跨帐户中运行。这种魔法是如何发生的?
每个动作都有一个 roleArn 属性。这是 CodePipeline 在执行该操作时“承担”的角色。如果“roleArn”属性中指定的角色在本地帐户中(或属性为空),则操作在本地帐户中运行。如果“roleArn”属性中指定的角色是跨账户,则该操作将在另一个账户中运行。
运行以下命令进行检查:
$ aws codepipeline get-pipeline --name <name> --region us-east-1
结果将类似于(见倒数第二行):
"name": "Deploy",
"actions": [
{
"name": "Deploy",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CloudFormation",
"version": "1"
},
"runOrder": 1,
"configuration": {
"ActionMode": "CREATE_UPDATE",
"Capabilities": "CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND",
"RoleArn": "arn:aws:iam::0123456789012:role/CrossAccount_Role",
"StackName": "Cx-Account",
"TemplatePath": "SourceArtifact::template.json"
},
"outputArtifacts": [],
"inputArtifacts": [
{
"name": "SourceArtifact"
}
],
"roleArn": "arn:aws:iam::0123456789012:role/CrossAccount_Role",
"region": "us-east-1"
}
在部署帐户本身中部署一个云形成堆栈 - 不成功,有可能吗?如果可以怎么办?
现在您有了在任何您想要的帐户中运行操作的密钥。照常创建操作,不要在操作本身上指定 roleArn,CodePipeline 将在部署帐户本身(管道所在的位置)中执行 cloudformation 操作。