LoginSignup
0
0

More than 3 years have passed since last update.

クロスアカウント・クロスリージョンなCodePipelineを実行する

Posted at

はじめに

以前の記事で、クロスアカウントなパイプラインを実行するコツをまとめてみた。

今回は、さらにこの2つのイベント連携部分をクロスリージョンにするにはどうしたら良いかを考えた。

最初に結論を書いておくと、CodePipelineのクロスリージョンアクションを使うのが良い、ということだ。

【AWS公式】CodePipeline でクロスリージョンアクションを追加する

検討経緯

以下の記事を参考にして、CodePipelineの完了時にS3にファイルを突っ込んでトリガしたり、サービス側アカウントにSNSトピックを置いて、CodePipelineの完了時にビルドアカウント側からPublishしてリージョン跨ぎのLambdaを起動したりした。

【参考】【Developers.IO】S3 Event Notificationを別アカウントのリージョンの異なるAmazon SNSに送信し、Lambdaを発火させる

多少強引ではあるが、これなら別リージョンのCodePipelineに着火することはできそうだった。

だがしかし、結局はCodePipelineのソースステージがクロスリージョン対応していなくて、別リージョンのCodeCommitを参照できないので、どうにもならなかった。S3でソース連携とか、あまりに泥臭すぎる。

素直にCodePipelineとソースステージは同一リージョンに置いて、ビルド・デプロイステージをクロスリージョンアクションを使うのが良いだろう。

クロスリージョンアクションのためのIaC(Terraform)

マネージメントコンソールでの実施方法はAWS公式にもあるので、ここではTerraformの書き方を残しておく。

と言っても、そんなに難しいことではない。
以下のように、2つのリージョンのアーティファクトストアを用意して、★の箇所にregionのプロパティを設定すれば良い。このケースでは、以前の記事のビルド側アカウントをap-northeast-1、サービス側アカウントのクロスリージョン対応をus-east-2で行っている例だ。S3はグローバルサービスのはずなのに、クロスリージョンで動かす先のリージョンに作っておかなければいけないという制約は謎……。

resource "aws_codepipeline" "service_account" {
  
(中略)
  
  artifact_store {
    region   = "ap-northeast-1"    
    type     = "S3"
    location = aws_s3_bucket.service_artifact1.bucket

    encryption_key {
      id   = aws_kms_key.cross_account.arn
      type = "KMS"
    }
  }

  artifact_store {
    region   = "us-east-2"     
    type     = "S3"
    location = aws_s3_bucket.service_artifact2.bucket
  }
  
(中略)
  
  stage {
    name = "Build"

    action {
      run_order        = 2
      name             = "Build"
      category         = "Build"
      owner            = "AWS"
      provider         = "CodeBuild"
      version          = "1"
      input_artifacts  = ["SourceArtifact"]
      output_artifacts = ["BuildArtifact"]
      region           = "us-east-2"         

      configuration = {
        ProjectName = aws_codebuild_project.service_account.name
      }
    }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0