CodePipelineとCodeCommitをクロスアカウントで実行する環境を一撃でデプロイしてみた


経緯

CodeCommitを一つのAWSアカウントに集め、CI/CDは各システム毎のAWSアカウントのCodePipelineで実施したいという声を複数いただき、毎度手作業で構築していたのだが、その繰り返し作業についムシャクシャしてしまい一撃でデプロイ出来るTerraformコードを書いてしまった。

今回は「必要最小権限」に拘って何度も試行錯誤をして出来た成果物になる。
特にクロスアカウント、IAM、リソースポリシーが多数登場するのもあり、「今回は時間がないから権限を緩く作って、後で時間が出来た時にちゃんとしよう」という人を今までたくさん見てきた。

断言しよう。
そんなぬるいこと言ってるヤツにちゃんとする時間など一生来ないのだ!

そして、今ちゃんとしてないから未来にも時間がないのだ

今これを作る時、つまりこれを見ている時が一番時間がある時なのだ!

CodePipelineはAWSの権限周りの知識ゼロで普通にググるだけではしっかりと作るのは非常に難しい。

前置きが長くなったが、以下のことをやるだけでクロスアカウントCodePipelineのHello Worldが完成する。

これを使ってあとは自身でカスタマイズしてほしい。健闘を祈る。

今回作る環境

成果物

こちらを見てください
GitHub

使い方

1. aws.tfの書き換え

READMEの通りなのだが、aws.tfの中のIAMロールを書き換えるだけで良い

> vim aws.tf
provider "aws" {
  alias = "account-a"
  assume_role {
    role_arn = "xxx"  // ←ここにCodeCommitを作りたいAWSアカウントに対してのAssumeRoleできるIAMロールのARN
  }
}

provider "aws" {
  alias = "account-b"
  assume_role {
    role_arn = "xxx"  // ←ここにCodePipelineを作りたいAWSアカウントに対してのAssumeRoleできるIAMロールのARN
  }
}
...
2. terraform apply実行
terraform apply

まとめ

Terraformではなくて、手作業で作りたい人もこれを見れば、何を作る必要があるのか、どんな権限が必要なのか?
というのを知るヒントにはなると思う。
これだけだと情報が足りないという場合はコメントいただけますと追記しようと思いますので、気軽にお願いします!