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

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

従来のワークショップとの差分は、【Lab 1:CI/CDパイプライン環境のセットアップ】のうち、【手順5. GitLabをデプロイする】のみです。そこで今回は本セクションについて重点的に解説します。
本ワークショップでは、GitLabと同じアカウントのRoute53にホストされている公開ドメインが必要です。
AWS CodeConnectionsの要件として、GitLabとの通信はTLS暗号化が必須となっています。GitLabはデフォルトでLet’s Encryptと統合していますが、GitLabのインストール中に指定したURLの名前解決を行えないとLet’s Encryptの設定が失敗してしまいます。その為、今回はCDKのデプロイプロセスの中にレコード登録を組み込んでいます。
ちなみに、このAWS CodeConnectionsのTLS要件はプライベート接続でも同様に求められます。その場合、CodeConnectionsの設定作成時にプライベート証明書をアップロードする必要があります。
本Labの実施に必要なコード一式を、gitコマンドでダウンロードしてください。
git clone
https://github.com/issei-hamada/goverment-cloud-iac-cicd-with-gitlab.git
ダウンロードしたプロジェクトの配下に、以下ディレクトリがあることを確認します。
artifact-repository
gitlab
cicd-pipeline
cdk-role
後の手順で、ディレクトリ毎に作業します。
Node.jsの必要なライブラリをインストールします。
# ディレクトリ移動
cd goverment-cloud-iac-cicd-with-gitlab
# package.json に登録されているものをインストール
npm ci
以下コマンドを順に実行し、artifact-repositoryをデプロイします。
# ディレクトリ移動
cd artifact-repository
# 対象アカウントに CDK で必要なリソースを作成
npx cdk bootstrap
# デプロイ
npx cdk deploy
AWS CodeArtifactとは、ソフトウェア開発で使用するパッケージを安全に保存、公開、共有するためのフルマネージド型のアーティファクトリポジトリサービスです。ここで言う「パッケージ」とは、HTTPリクエストを手軽に実装するための、pythonで言う「requests」、JavaScriptで言う「Axios」のようなパッケージ(ライブラリとも表現する事がありますね)を指します。例えばpythonでソフトウェアを開発する際、pipの参照先をCodeArtifact に設定する事で、開発者全員が予めCodeArtifactに登録されたパッケージを利用出来るようになります。
ソフトウェア開発におけるパッケージ管理のセキュリティ・コンプライアンスを強化する事がAWS CodeArtifactの役割です。
ここからが、アップデート後のコアとなる手順です。AWSにGitLabをデプロイしていきます。
まずは、デプロイ時に利用する必須パラメータを設定します。gitlab/parameter.tsファイルを修正して下さい。

基本的にデフォルト値は設定されていますが、★の付いているホストゾーン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アクセス可能な状態で起動します。
初めてCDKを実行する場合は、gitlabディレクトリへ移動し、CDKをbootstrapします。
# リポジトリ移動
cd gitlab
# CDK 用リソース作成
npx cdk bootstrap
次に、GitLab EC2インスタンスをデプロイします。
# デプロイ
npx cdk deploy
本ワークショップではCDKを使ってキーペアを生成しています。CDKでは秘密鍵をAWS Systems Manager Parameter Storeに保存する仕様になっています。インスタンス起動時点でセッションマネージャを利用出来る設定にはなっていますが、必要に応じて/ec2/keypair/GitLabから取得し、ファイルを生成してください。
これでインスタンスのデプロイは完了です。GitLabのインストールも自動で行われますが、CDKのデプロイ完了から10~15分程度かかります。ブラウザから設定したURLにアクセスし、ログインページが表示されるまでお待ちください。
ログインページが表示されれば、GitLabのインストールは完了です。OSログインして初期パスワードを確認します。
EC2コンソールにてGitLabインスタンスを選択し、「接続」から「セッションマネージャ」でEC2に接続します。
以下の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.
Passwordの値が、GitLab rootユーザの初期パスワードです。これをコピーしておきます。
ブラウザからGitLabへアクセスし、ユーザ名:root / パスワード:前項で取得したパスワードを使って、ログインします。
ブラウザからアプリケーションにログイン出来れば、本手順は完了です。
GitLabではグループにプロジェクト(いわゆるリポジトリ)を紐づけて管理する為、まずはグループを作成します。
ログイン後のトップページにて、左メニューの「Group」を選択

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

「Create group」を押下

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

今回は、「development-group」として下さい。
これでグループ作成は完了です。
次は、前段で作成したグループに紐づくプロジェクトを作成していきます。
GitLabコンソール左メニュー右上の「+」アイコンをクリックし、「New project/repository」をクリック

「Create blank project」をクリック

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

以上でプロジェクトの作成が完了し、リポジトリのクローンやプッシュが可能な状態になりました。次は、GitLabとAWSの接続設定に必要な認証情報を払い出します。
GitLabと外部リソースを連携する際、パーソナルアクセストークン(PAT(という認証情報を利用します。今回はAWSとGitLabを連携する為に必要です。
左メニュー右上のユーザアイコンをクリックし、「Edit profile」をクリック

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

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

「Select scope」にて「api」と「admin_mode」にチェックを入れ、「Create token」ボタンを押下
token name には、任意の値を入れて下さい。

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

以上でPATの払い出しが完了し、GitLabとAWSを連携する準備が出来ました。
PATの有効期間については、AWS CodeConnectionsとの接続設定を作成する時に有効であればよいです。接続設定を作成した後は、PATを削除しても問題ありません。
GitLabとAWS CodeConnectionsの連携設定を作成すると、GitLabのApplicationsに以下のようなアプリが作成されます。

PATは、このアプリをGitLab側に作成する為だけに必要な認証情報なのです。
ここからAWSの作業に戻ります。AWS CodeConnectionsを作成し、GitLab側で認証します。
AWSコンソールの検索窓にて「CodePipeline」と入力し、サービスページへ移動
左メニューの「設定」プルダウンから、「接続」を選択
右上の「接続を作成」ボタンを押下

「プロバイダーを選択する」にて「GitLab Self Managed」を選択し、接続設定を入力後、「GitLab Self Managedに接続」ボタンを押下
→ プライベートサブネット内にあるGitLabと接続する時のオプション

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

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

GitLabの認証画面が開く。「Authorize ~」ボタンを押下
この時、作業しているブラウザからGitLabに接続できる必要があります。ワークショップ環境であれば問題ありませんが、社内環境と接続する際はご注意下さい。

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

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

「接続設定」に記載されているARNを控える
以上でAWS CodeConnectionsの設定は完了です。これでAWS CodePipelineのソースリポジトリとしてGitLabを指定出来るようになりました。次の手順では、実際にAWS CodePipelineをデプロイしてCI/CDパイプラインを動かせるようにしていきます。
AWS CodePipelineでソースとして指定できるプロジェクトは「3. GitLab の認証画面が開く。「Authorize ~」ボタンを押下」手順を実行する際に、GitLabへログインしていたユーザによって決まります。スクリーンショットではAdministratorになっていますが、実際の構築では各々のユーザ名になります。PATを払い出す際に「admin_mode」にチェックを入れても、全てのプロジェクトを参照できるようになるわけではありません
AWS CodeConnectionsをソースに指定し、CI/CDパイプラインをデプロイします。基本的に元のワークショップと変わらないのですが、2つだけパラメータを追加しています。
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',
初めて CDK を実行する場合は、対象のディレクトリへ移動し、CDK を bootstrap します。これは対象のアカウントとリージョンの組み合わせで初めて CDK を実行するときに必要です。
# リポジトリ移動
cd cicd-pipeline
# CDK用リソースを作成
npx cdk bootstrap --profile cicd
# デプロイ
npx cdk deploy --profile cicd
以上でCI/CDパイプラインのデプロイは完了です。
最後に、パイプライン内で利用するIAMロールを作成します。本ワークショップはマルチアカウントを想定している為、アカウントを跨いでCDKを実行する際にこのIAMロールを利用します。デプロイ手順は、以下コマンドを順に実行するだけです。
# リポジトリ移動
cd cdk-role
# CDK用リソースを作成
npx cdk bootstrap --profile cicd
# デプロイ
npx cdk deploy --profile cicd
コマンドが正常に完了すれば、CI/CDパイプラインに関するリソースのデプロイは完了です。
ここまでの手順で、GitLabとAWS上に作成したCI/CDパイプラインの連携設定が完了しました。あとはGitLabにブランチを作成し、コードをプッシュすれば各環境にコードがデプロイされます。
GitLabプロジェクトに develop/staging/production ブランチを作成する
feature ブランチを作成し、開発/検証/本番環境へデプロイするCDKコードを push する
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のオフィシャルリセールパートナーとなりました。