公開:2025年10月23日

20分で読めます

GitLabで実現するマルチアカウントCI/CD

AWS CodeConnectionsを活用し、GitLabとAWSを連携させたCI/CDパイプラインの構築方法を解説。マルチアカウント環境でのIaC実装をステップバイステップで紹介します。

編集部注:私たちは時折、パートナーコミュニティのメンバーにGitLabブログへの寄稿をお願いしています。今回、ソニービズネットワークス社のエンジニアである濱田一成氏に、共同執筆いただきました。

ソニービズネットワークス株式会社所属のエンジニア、濱田 一成です。先日、GitLab 様との共同企画でAWS様の作成したマルチアカウントIaC・CI/CDワークショップを、GitLabを用いた構成にリファクタリングしました。本記事は、そのワークショップの解説記事です。

従来の構成

従来の構成

元のワークショップはAWSサービスのみでCI/CDパイプラインを構成しています。このワークショップは手軽に継続的インテグレーションを体験出来ることから、非常に高い評価を得ていました。しかし現在AWS CodeCommitは新規顧客の受け入れを停止しており、元ワークショップも新たなお客様のご利用が出来なくなっていました。

リファクタリング後の構成

リファクタリング後の構成

そこで今回、AWS CodeCommitをGitLabに置き換え、CI/CDを体験するワークショップとしてリファクタリングを行いました。本ワークショップのAWS CDKコードをご利用頂く事で、GitLabをソースリポジトリとして組み込んだCI/CDパイプラインを体験頂けます。

ワークショップのポイント:AWS CodeConnections

AWS CodeConnectionsは、AWSと様々なコードリポジトリを接続するサービスです。本サービスを利用する事で、SaaS版GitLabはもちろん、セルフホスティング版のGitLabも、AWS上に構築したCI/CDパイプラインに組み込むことが出来るようになります。今回のワークショップではVPC内にGitLabサーバを構築し、インターネット経由でAWS CodeConnectionsと接続します。

ワークショップのポイント: AWS CodeConnections

プライベートネットワーク接続にも対応している

今回のワークショップではインターネット経由でGitLabと接続していますが、もちろん閉域に閉じることも可能です。AWS CodeConnectionsを作成する時に、オプションでVPCを指定する事が出来ます。こちらを指定すると、AWS CodeConnectionsとGitLab間の通信専用のENIが作成されます。AWS CodeConnectionsは、このENIを経由してGitLabと通信する事で、閉域網内での利用を実現しています。

プライベートネットワーク接続にも対応している

ワークショップ手順解説

従来のワークショップとの差分は、【Lab 1:CI/CDパイプライン環境のセットアップ】のうち、【手順5. GitLabをデプロイする】のみです。そこで今回は本セクションについて重点的に解説します。

前提事項:GitLab用公開ドメインを用意する

本ワークショップでは、GitLabと同じアカウントのRoute53にホストされている公開ドメインが必要です。

AWS CodeConnectionsの要件として、GitLabとの通信はTLS暗号化が必須となっています。GitLabはデフォルトでLet’s Encryptと統合していますが、GitLabのインストール中に指定したURLの名前解決を行えないとLet’s Encryptの設定が失敗してしまいます。その為、今回はCDKのデプロイプロセスの中にレコード登録を組み込んでいます。

ちなみに、このAWS CodeConnectionsのTLS要件はプライベート接続でも同様に求められます。その場合、CodeConnectionsの設定作成時にプライベート証明書をアップロードする必要があります。

手順1. インフラ CI/CDのセットアップに必要なアセットのダウンロード

本Labの実施に必要なコード一式を、gitコマンドでダウンロードしてください。


git clone 


https://github.com/issei-hamada/goverment-cloud-iac-cicd-with-gitlab.git

手順2. アセットの確認

ダウンロードしたプロジェクトの配下に、以下ディレクトリがあることを確認します。

  • artifact-repository

  • gitlab

  • cicd-pipeline

  • cdk-role

後の手順で、ディレクトリ毎に作業します。

手順3. パッケージのインストール

Node.jsの必要なライブラリをインストールします。


# ディレクトリ移動 


cd goverment-cloud-iac-cicd-with-gitlab 


# package.json に登録されているものをインストール


npm ci

手順4. artifact-repositoryをデプロイする

以下コマンドを順に実行し、artifact-repositoryをデプロイします。


# ディレクトリ移動


cd artifact-repository


# 対象アカウントに CDK で必要なリソースを作成


npx cdk bootstrap


# デプロイ


npx cdk deploy

AWS CodeArtifactの役割

AWS CodeArtifactとは、ソフトウェア開発で使用するパッケージを安全に保存、公開、共有するためのフルマネージド型のアーティファクトリポジトリサービスです。ここで言う「パッケージ」とは、HTTPリクエストを手軽に実装するための、pythonで言う「requests」、JavaScriptで言う「Axios」のようなパッケージ(ライブラリとも表現する事がありますね)を指します。例えばpythonでソフトウェアを開発する際、pipの参照先をCodeArtifact に設定する事で、開発者全員が予めCodeArtifactに登録されたパッケージを利用出来るようになります。

ソフトウェア開発におけるパッケージ管理のセキュリティ・コンプライアンスを強化する事がAWS CodeArtifactの役割です。

手順5. GitLabをデプロイする

ここからが、アップデート後のコアとなる手順です。AWSにGitLabをデプロイしていきます。

5-1. デプロイパラメータを設定する

まずは、デプロイ時に利用する必須パラメータを設定します。gitlab/parameter.tsファイルを修正して下さい。

table

基本的にデフォルト値は設定されていますが、★の付いているホストゾーンID・ドメイン名のみ個別に設定が必要です。

次に、ユーザデータ(gitlab/lib/sh/gitlab-install.sh)内のURLを書き換える必要があります。16行目のhttps://gitlab.example.comを、GitLabの接続URLに書き換えて下さい。


EXTERNAL_URL="https://gitlab.example.com" apt-get install -y gitlab-ee

GitLabはデフォルトでLet’s Encryptと連携しています。こちらを記述する事で、インストール後、指定のドメインにhttpsアクセス可能な状態で起動します。

5-2. GitLab Stackをデプロイする

初めてCDKを実行する場合は、gitlabディレクトリへ移動し、CDKをbootstrapします。


# リポジトリ移動


cd gitlab


# CDK 用リソース作成


npx cdk bootstrap

次に、GitLab EC2インスタンスをデプロイします。


# デプロイ


npx cdk deploy

  • EC2 のキーペアについて

本ワークショップではCDKを使ってキーペアを生成しています。CDKでは秘密鍵をAWS Systems Manager Parameter Storeに保存する仕様になっています。インスタンス起動時点でセッションマネージャを利用出来る設定にはなっていますが、必要に応じて/ec2/keypair/GitLabから取得し、ファイルを生成してください。

これでインスタンスのデプロイは完了です。GitLabのインストールも自動で行われますが、CDKのデプロイ完了から10~15分程度かかります。ブラウザから設定したURLにアクセスし、ログインページが表示されるまでお待ちください。

5-3. GitLabへログイン

ログインページが表示されれば、GitLabのインストールは完了です。OSログインして初期パスワードを確認します。

  1. EC2コンソールにてGitLabインスタンスを選択し、「接続」から「セッションマネージャ」でEC2に接続します。

  2. 以下のcatコマンドを実行します。

    $sudo cat /etc/gitlab/initial_root_password
    # WARNING: This value is valid only in the following conditions
    # 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
    # 2. Password hasn't been changed manually, either via UI or via command line.
    #
    # If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
    Password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
    
  3. Passwordの値が、GitLab rootユーザの初期パスワードです。これをコピーしておきます。

  4. ブラウザからGitLabへアクセスし、ユーザ名:root / パスワード:前項で取得したパスワードを使って、ログインします。

ブラウザからアプリケーションにログイン出来れば、本手順は完了です。

5-4. GitLabグループ作成

GitLabではグループにプロジェクト(いわゆるリポジトリ)を紐づけて管理する為、まずはグループを作成します。

  1. ログイン後のトップページにて、左メニューの「Group」を選択

    ログイン後のトップページにて、左メニューの「Group」を選択

  2. 画面中央右の「New group」を押下

    画面中央右の「New group」を押下

  3. 「Create group」を押下

    「Create group」を押下

  4. 「Group name」を入力し、「Create group」を押下

    「Group name」を入力し、「Create group」を押下

今回は、「development-group」として下さい。

これでグループ作成は完了です。

5-5. ワークショップ用プロジェクト作成

次は、前段で作成したグループに紐づくプロジェクトを作成していきます。

  1. GitLabコンソール左メニュー右上の「+」アイコンをクリックし、「New project/repository」をクリック

    GitLabコンソール左メニュー右上の「+」アイコンをクリックし、「New project/repository」をクリック

  2. 「Create blank project」をクリック

    「Create blank project」をクリック

  3. プロジェクト名を入力し、「Create project」を押下

    Project URLで、name spaceに 5-4 で作成したグループ名が入力されている事を確認します。また、本 workshop ではプロジェクト名を「cicd-workshop」として下さい。

    プロジェクト名を入力し、「Create project」を押下

以上でプロジェクトの作成が完了し、リポジトリのクローンやプッシュが可能な状態になりました。次は、GitLabとAWSの接続設定に必要な認証情報を払い出します。

5-6. パーソナルアクセストークンを払い出す

GitLabと外部リソースを連携する際、パーソナルアクセストークン(PAT(という認証情報を利用します。今回はAWSとGitLabを連携する為に必要です。

  1. 左メニュー右上のユーザアイコンをクリックし、「Edit profile」をクリック

    左メニュー右上のユーザアイコンをクリックし、「Edit profile」をクリック

  2. 左メニューの「Access tokens」をクリック

    左メニューの「Access tokens」をクリック

  3. 右上の「Add new token」ボタンを押下

    右上の「Add new token」ボタンを押下

  4. 「Select scope」にて「api」と「admin_mode」にチェックを入れ、「Create token」ボタンを押下

    token name には、任意の値を入れて下さい。

    「Select scope」にて「api」と「admin_mode」にチェックを入れ、「Create token」ボタンを押下

  5. 「Your token」に表示されているトークンをコピーし、控える

    「Your token」に表示されているトークンをコピーし、控える

以上でPATの払い出しが完了し、GitLabとAWSを連携する準備が出来ました。

補足:パーソナルアクセストークンの有効期間について

PATの有効期間については、AWS CodeConnectionsとの接続設定を作成する時に有効であればよいです。接続設定を作成した後は、PATを削除しても問題ありません。

GitLabとAWS CodeConnectionsの連携設定を作成すると、GitLabのApplicationsに以下のようなアプリが作成されます。

GitLabとAWS CodeConnectionsの連携設定を作成すると、GitLabのApplicationsに以下のようなアプリが作成されます。

PATは、このアプリをGitLab側に作成する為だけに必要な認証情報なのです。

手順6. AWS CodeConnectionsを作成する

ここからAWSの作業に戻ります。AWS CodeConnectionsを作成し、GitLab側で認証します。

6-1. 「接続」を作成

  1. AWSコンソールの検索窓にて「CodePipeline」と入力し、サービスページへ移動

  2. 左メニューの「設定」プルダウンから、「接続」を選択

  3. 右上の「接続を作成」ボタンを押下

    右上の「接続を作成」ボタンを押下

  4. 「プロバイダーを選択する」にて「GitLab Self Managed」を選択し、接続設定を入力後、「GitLab Self Managedに接続」ボタンを押下

    • 接続名:任意の値
    • URL:作成した GitLab の URL を入力
    • 「VPCを使用」にはチェックを入れない

    → プライベートサブネット内にあるGitLabと接続する時のオプション

    「VPCを使用」にはチェックを入れない → プライベートサブネット内にあるGitLabと接続する時のオプション

これでAWS CodeConnectionsの「接続」を作成できました。現時点では、接続ステータスは「保留中」で問題ありません。次の手順で承認作業を行います。

6-2. GitLabにてAWS CodeConnectionsの接続を承認する

  1. 先ほど作成した「接続」の、右上「保留中の接続を更新」ボタンを押下

    先ほど作成した「接続」の、右上「保留中の接続を更新」ボタンを押下

  2. ポップアップウィンドウが開く。テキストボックスに個人用アクセストークンを入力し、「続行」ボタンを押下

    ポップアップウィンドウが開く。テキストボックスに個人用アクセストークンを入力し、「続行」ボタンを押下

  3. GitLabの認証画面が開く。「Authorize ~」ボタンを押下

    この時、作業しているブラウザからGitLabに接続できる必要があります。ワークショップ環境であれば問題ありませんが、社内環境と接続する際はご注意下さい。

    GitLabの認証画面が開く。「Authorize ~」ボタンを押下

  4. 「ホストインスタンスでのインストールの確認」にて、「続行」を押下

    「ホストインスタンスでのインストールの確認」にて、「続行」を押下

  5. 「接続」のステータスが「利用可能」になったら完了

    「接続」のステータスが「利用可能」になったら完了

  6. 「接続設定」に記載されているARNを控える

以上でAWS CodeConnectionsの設定は完了です。これでAWS CodePipelineのソースリポジトリとしてGitLabを指定出来るようになりました。次の手順では、実際にAWS CodePipelineをデプロイしてCI/CDパイプラインを動かせるようにしていきます。

補足:AWS CodeConnectionsから参照出来るGitLabプロジェクトの制御方法

AWS CodePipelineでソースとして指定できるプロジェクトは「3. GitLab の認証画面が開く。「Authorize ~」ボタンを押下」手順を実行する際に、GitLabへログインしていたユーザによって決まります。スクリーンショットではAdministratorになっていますが、実際の構築では各々のユーザ名になります。PATを払い出す際に「admin_mode」にチェックを入れても、全てのプロジェクトを参照できるようになるわけではありません

手順7. cicd-pipeline をデプロイする

AWS CodeConnectionsをソースに指定し、CI/CDパイプラインをデプロイします。基本的に元のワークショップと変わらないのですが、2つだけパラメータを追加しています。

7-1. デプロイパラメータを設定する

cicd-pipeline/parameter.tsに、先ほどメモしたAWS CodeConnectionsのARNとソースとして指定したいGitLabのプロジェクト名を入力します。


// CodeConnections parameters



codeConnectionArn: 'arn:aws:codeconnections:ap-northeast-1:xxxxxxxxxxxx:connection/xxxxxxxxxxxx',



gitlabTargetProject: 'development-group/cicd-workshop',

7-2. デプロイする

初めて CDK を実行する場合は、対象のディレクトリへ移動し、CDK を bootstrap します。これは対象のアカウントとリージョンの組み合わせで初めて CDK を実行するときに必要です。


# リポジトリ移動


cd cicd-pipeline


# CDK用リソースを作成


npx cdk bootstrap --profile cicd


# デプロイ


npx cdk deploy --profile cicd

以上でCI/CDパイプラインのデプロイは完了です。

手順8. cdk-roleをデプロイする

最後に、パイプライン内で利用するIAMロールを作成します。本ワークショップはマルチアカウントを想定している為、アカウントを跨いでCDKを実行する際にこのIAMロールを利用します。デプロイ手順は、以下コマンドを順に実行するだけです。


# リポジトリ移動


cd cdk-role


# CDK用リソースを作成


npx cdk bootstrap --profile cicd


# デプロイ


npx cdk deploy --profile cicd

コマンドが正常に完了すれば、CI/CDパイプラインに関するリソースのデプロイは完了です。

手順9. CDKコードを GitLabにpushする

ここまでの手順で、GitLabとAWS上に作成したCI/CDパイプラインの連携設定が完了しました。あとはGitLabにブランチを作成し、コードをプッシュすれば各環境にコードがデプロイされます。

  1. GitLabプロジェクトに develop/staging/production ブランチを作成する

  2. feature ブランチを作成し、開発/検証/本番環境へデプロイするCDKコードを push する

  3. develop -> staging -> production ブランチとマージしていくことで各環境にコードがデプロイされることを確認

Lab 2:ソース管理 以降の手順については、従来のワークショップの手順と同一です。手順内のAWS CodeCommitを適宜GitLabに読み替えて実施して下さい。

終わりに

AWS CodeConnectionsさえ作ってしまえば、GitLabとAWSを簡単に連携出来るようになります。本ワークショップではシングルアカウントを想定して解説しましたが、Resource Access Managerを使う事でマルチアカウントにも対応可能です。AWSとGitLabを組み合わせたCI/CDパイプラインのご相談があれば、ソニービズネットワークスまでご相談下さい。

以上、ソニービズネットワークスのAWS Ambassador、濱田 一成がお送りしました。

謝辞:本ブログは、Amazon Web Services, Inc. 社作成のワークショップ「マルチアカウント IaC・CI/CD ワークショップ 」を元に、GitLab版の作成依頼をGitLab Japanからソニービズネットワークス社濱田様にご依頼をして作成いただいたものになります。

ソニービズネットワークス社は、ソニーグループの法人向けICTソリューション事業を展開しています。高品質な法人向けインターネット接続サービス「NUROアクセス」を主力に、クラウドサービス、セキュリティ、AIサービスなど、ビジネスに必要なインフラとシステムをワンストップで提供し、企業の成長と効率化を支援しています。この度、GitLabのオフィシャルリセールパートナーとなりました。

ご意見をお寄せください

このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成してあなたの声を届けましょう。
Share your feedback

フォーチュン100企業の50%以上がGitLabを信頼

より優れたソフトウェアをより速く提供

インテリジェントなDevSecOpsプラットフォームで

チームの可能性を広げましょう。