LoginSignup
1
0

Codepipeline クロスアカウント 対応 Ch.1

Posted at

これは何?

最近複数アカウントでのCodeSeriesの導入方法を個人的にまとめてみました。
シリーズものであり、クロスアカウントから始まり、マルチアカウント・マルチリージョンにも適応したものを共有していく予定です。

本日のゴールとしては、クロスアカウントでのCI/CDパイプラインの構築となります.

完成予想図は以下の通り.
image.png

また、シリーズものなので以下の内容についてもよろしければチェックのほどお願いします!

  • Codepipeline クロスリージョン対応 Ch.2
  • Codepipeline マルチアカウント & マルチリージョン対応 Ch.3

シナリオ

今回は以下のシナリオで実行したいと思います。

アカウントについて

アカウントは、以下2つのアカウントを用意。それぞれの役割は以下の通り。

  • 開発者向けアカウント(Developer Account) ... 開発者がよく使うアカウント。リポジトリなどを配置。
  • サービス用アカウント(Account A) ... サービスを実行するアカウント. Codepipeline を実行し, 各種リソースにデプロイする.

各種リソース

各種リソースでは以下の内容を最低限設定する必要があります。
IAMやS3、KMSについてはクロスアカウントの設定を忘れずに。

  • 開発者向けアカウント(Developer Account)
リソース 役割
CodeCommit 開発者向けアカウント上で作成.
アーティファクト格納用IAMロール Account AのCodepipeline用ロールからAssumeRoleされる. CodeCommit のソースを アーティファクト用S3バケットにPutObjectする権限を付与.
  • サービス用アカウント(Account A)
リソース 役割
Codepipeline Account A上で作成. CLIで作成(後述).
Codebuild Codebuild プロジェクトをAccount A上で作成.デフォルト設定.
S3バケット Source & Build アーティファクト用. バケットポリシーでDeveloper Accountからのアクセスを許可.
KMSキー KMSキー. キーポリシーでDeveloper Accountからのアクセスを許可.
Codepipeline用IAMロール デフォルで設定するポリシー + アーティファクト格納用ロールへAssumeRole権限. KMSへのアクセス権限.
CodeBuild用IAMロール デフォルで設定するポリシー + KMSへのアクセス権限.

構築テンプレート

codepipelineの作成

Codepipeline用のjsonファイルは以下の通りとなります。
json内の「<< 〇〇 >>」で始まる部分をそれぞれ設定したパイプライン名に置き換えてください。

pipeline.json
 {
     "pipeline": {
         "name": "<<Codepipeline名>>",
         "roleArn": "<<Codepipeline用IAMロール>>",
         "artifactStores": {
             "ap-northeast-1": {
                 "type": "S3",
                 "location": "<<S3バケット>>",
                 "encryptionKey": {
                     "id": "<<KMSキーArn>>", 
                     "type": "KMS"
                 }
             }
         },
         "stages": [
             {
                 "name": "Source",
                 "actions": [
                     {
                         "name": "Source",
                         "actionTypeId": {
                             "category": "Source",
                             "owner": "AWS",
                             "provider": "CodeCommit",
                             "version": "1"
                         },
                         "runOrder": 1,
                         "configuration": {
                             "OutputArtifactFormat": "CODE_ZIP",
                             "PollForSourceChanges": "true",
                             "RepositoryName": "<<CodeCommitリポジトリ名>>"
                         },
                         "outputArtifacts": [
                             {
                                 "name": "SourceArtifact"
                             }
                         ],
                         "inputArtifacts": [],
                         "roleArn": "<<アーティファクト格納用IAMロール>>",
                         "region": "ap-northeast-1",
                         "namespace": "SourceVariables"
                     }
                 ]
             },
             {
                 "name": "Build",
                 "actions": [
                     {
                         "name": "Build",
                         "actionTypeId": {
                             "category": "Build",
                             "owner": "AWS",
                             "provider": "CodeBuild",
                             "version": "1"
                         },
                         "runOrder": 1,
                         "configuration": {
                             "PrimarySource": "SourceArtifact",
                             "ProjectName": "<<Codebuild名>>",
                             "EnvironmentVariables": "[]" 
                         },
                         "outputArtifacts": [
                             {
                                 "name": "BuildArtifact"
                             }
                         ],
                         "inputArtifacts": [
                             {
                                 "name": "SourceArtifact"
                             }
                         ],
                         "region": "ap-northeast-1",
                         "namespace": "BuildVariables"
                     }
                 ]
             }
         ]
     }
 }

修正が完了したらCLIで以下のコマンドを実行します。

aws codepipeline create-pipeline --pipeline file://pipeline.json

また、上記ではなく手動で設定してみてget-pipelineコマンドでjson出力してから各種設定を加える方も楽かもしれません。

これでクロスアカウント経由でCI/CDパイプラインを実行することができます。

終わりに

今回はクロスアカウントでのCI/CDパイプラインの構築を実施しました。
後続のクロスリージョンなどのch2, ch3 の記事もよろしければ確認いただければ幸いです。

  • Codepipeline クロスリージョン対応 Ch.2
  • Codepipeline マルチアカウント & マルチリージョン対応 Ch.3
1
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
1
0