2024年7月25日に、AWSが自社のCodeCommitサービスについて重要な発表を行いました。詳細はAWSの公式ブログ記事(外部サイト)に記載されていますが、CodeCommitでの新規顧客の利用受付が終了することになりました。既存のお客様は引き続きサービスを利用できるものの、今後AWSが新機能を実装することはなく、セキュリティ、可用性、パフォーマンスの改善のみに注力するとのことです。
今回の発表は、開発チームがリポジトリを別のGitプロバイダーに移行することを検討するきっかけとなっています。これらの変更をふまえ、お客様がGitLabに移行して他のAWSサービスと統合できるように、抱括的なガイドをご用意しました。
注: 移行に関するAWSの公式推奨事項の詳細については、AWSのブログ記事(外部サイト)をご覧ください。
このガイドについて
このガイドでは、GitLabを使用していてAWSサービスとの統合を検討している開発チームや、AWSにホストされているGitリポジトリからGitLab.comに移行予定の開発チーム向けに包括的な情報を提供します。このガイドは次の3つの主要セクションで構成されています。
- GitLabへの並行移行:リスクを最小限に抑えつつ、AWSにホストされている既存リポジトリからGitLab.comへ徐々に移行する方法について説明します。
- AWS CodeBuildとの統合:GitLabリポジトリをAWS CodeBuildと統合し、強力な継続的インテグレーション(CI)環境を設定する手順を紹介します。
- AWS CodePipelineとの統合:効率的な継続的デリバリーパイプラインを構築するために、GitLabリポジトリをAWS CodePipelineと接続する方法について詳しく説明します。
- CodePipelineとCodeStar Connectionsのダウンストリーム統合:GitLabとAWS間の接続を活用して広範なサービスの利用を実現する方法について説明します。この方法を用いると、AWSエコシステム全体での統合の可能性が連鎖的に広がります。
このガイドを通して、GitLabとAWSの強力な機能を組み合わせ、効率的で柔軟な開発ワークフローを作成する方法を学びましょう!
第1セクション:GitLabへの並行移行
AWSにホストされているGitリポジトリをGitLab.comに移行することを検討中の方向けに、段階的なアプローチについて取り上げる本セクションでは、リスクを最小限に抑えながら移行を達成する方法をご紹介します。GitLabのミラーリング機能を活用すれば、既存の開発フローを維持しながら、新しい環境をテストできます。
並行移行が重要な理由
大規模なシステムの移行には常にリスクが伴います。特に、実施中の開発作業や既存のインテグレーション、自動化されたプロセスに影響が生じる可能性があります。並行移行アプローチを採用すると、次のようなメリットがあります。
1. リスクの最小化:既存のシステムを稼働させた状態で新しい環境をテストできます。
2. シームレスな移行:開発チームが新しいシステムに少しずつ慣れることができます。
3. インテグレーションテスト:すべてのインテグレーションと自動化を新しい環境で徹底的にテストできます。
4. 将来性:既存のCIと並行して、チームが徐々にGitLab CI/CDに移行できるようにします。
直接GitLabに一括で移行することが望ましいとわかっている場合は、並行移行を行う必要はありません。
GitLab.comへの移行手順
ステップ1:GitLab.comをセットアップする
-
会社で使用中のGitLab.comのグループがあるかどうか、またシングルサインオン(SSO)を設定済みであるかどうかを確認します。グループがあり、シングルサインオンを設定済みである場合は、両方とも使用することになります。
-
GitLab.comに会社で使用しているグループがない場合は、GitLab.comにアクセスして新規アカウントを作成するか、既存のアカウントにログインしてください。
-
会社用のネームスペース(Gitlab.comのルートレベルのグループ)を新たに作成します。
-
ネームスペースに、(これまでに使用されていない)会社に合った名前を付けます。
ステップ2:リポジトリをインポートする
並行移行の場合:GitLabのプルミラーリング機能を使用して、AWSにホストされているリポジトリからGitLab.comに変更を自動的に同期します。
- GitLab.comのターゲットグループに移動します。
- 右上の「新規プロジェクト」をクリックします。
- 「新しいプロジェクトを作成」ページで「プロジェクトをインポート」をクリックします。
- 「プロジェクトをインポート」ページで「URLによるリポジトリ」をクリックします。
- 「GitリポジトリのURL」フィールドに、AWSにホストされているリポジトリのURLを入力します。
- 「GitリポジトリのURL」フィールドの下にある「リポジトリをミラーリング」にチェックを入れます。
- 認証の設定:AWS CodeCommitコンソールで、移行するリポジトリのクローンURLを選択します。CodeCommitリポジトリをGitLabに移行する場合は、HTTPS CodeCommit URLを使用して、GitLabのリポジトリのミラーリングを介してリポジトリをクローンできます。また、GitLabにAWSのIAMユーザーに割り当てたGit認証情報を入力する必要があります。AWS CodeCommit用のGit認証情報を作成する方法は、こちらのAWSガイド(外部サイト)に従ってください。
この設定を行うと、デフォルトでは5分ごとにAWSにホストされているリポジトリからGitLab.comに変更が自動的にプルされます。
詳細については、リポジトリのミラーリングに関するドキュメントをご参照ください。
ステップ3:インテグレーションのテストと検証を行う
- CI/CDパイプライン:既存のパイプラインを複製するために、GitLab CIで
.gitlab-ci.yml
ファイルを設定します。他のCIツールからGitLab CI/CDへの移行の計画について詳細をご確認ください。 - イシュートラッキング:プロジェクトのイシューとテストワークフローをインポートします。
- コードレビュー:マージリクエストプロセスとテストレビューワークフローを設定します。
ステップ4:段階的に移行する
- 小規模または重要度の低いプロジェクトから移行を始めて、GitLab.comでの作業に慣れましょう。
- チームメンバー向けにトレーニングを行い、新しいワークフローに適応する時間を十分に確保します。
- インテグレーションとワークフローに問題がないことを確認しながら、徐々にその他のプロジェクトを移行します。
詳細については、CodeCommitからGitLabへの移行の自動化をご参照ください。
ステップ5:移行を完了する
すべてのテストと検証が完了し、新しい環境にチームが慣れてきたら、完全な移行の計画を立てます。プロジェクトごとに以下の対応を行います。
- 移行日を決めて、すべてのステークホルダーに通知する。
- 最後のデータ同期を行う。
- ミラーリング設定をGitLabプロジェクトから削除する。
- AWSにホストされているリポジトリを読み取り専用に設定し、すべての開発作業をGitLab.comに移行する。
ステップ6:新しい機能を導入するかどうかを判断する
GitLabでデベロッパーが利用できるコラボレーションとワークフローの自動化機能は、CodeCommitと比べてはるかに豊富です。これらの機能について理解するには、ある程度時間がかかります。中でもマージリクエストプロセスは、CodeCommitよりも強力です。
GitLab上でリポジトリが安定させてしまえば、既存のソリューションと並行して非常に簡単にGitLab CI/CDを試せることになるでしょう。本番環境のワークフローはそのままに、時間をかけてGitLab CI/CDの自動化を完成させることができるのです。
GitLabのアーティファクト管理も、リリース機能や多くのパッケージレジストリで非常に役に立ちます。
第1セクションのまとめ
GitLabへの並行移行アプローチを採用すると、リスクを最小限に抑えながらスムーズな移行を実現できます。このプロセスを通じて、チームは新しい環境に徐々に適応でき、すべてのインテグレーションと自動化が正しく機能するようになります。並行移行を行う必要がないとわかっていて一括で移行する場合でも、スキップできるのは1つのチェックボックス設定のみです。
第2セクション:GitLabとAWS CodeBuildの統合
AWS CodeBuildを使用して、GitLabリポジトリを構築してコードをテストしたい方は、こちらの完全ガイドを参考にして、CIパイプラインを効率的に設定してください。
前提条件
- GitLab.comアカウント
- AWSアカウント
- AWS CLI(構成済み)
ステップ1:AWS CodeStar ConnectionsでGitLabとの接続を作成する
- AWSマネージメントコンソールにログインし、CodeBuildサービスに移動します。
- 左側のナビゲーションパネルから「設定」>「接続」の順に選択します。
- 「接続を作成」ボタンをクリックします。
- プロバイダーとして「GitLab」を選択します。
- 接続名を入力して「GitLabに接続」をクリックします。
- GitLabの認証ページにリダイレクトされます。
- 必要な権限を承認します。
- 正常に接続されると、接続ステータスが「利用可能」に変わります。
ステップ2:AWS CodeBuildプロジェクトを作成する
- CodeBuildダッシュボードで「ビルドプロジェクトを作成」をクリックします。
- プロジェクトの名前と説明を入力します。
- ソース設定では、プロバイダーとして「GitLab」を選択します。
- 先程作成した接続を選択し、GitLabのリポジトリとブランチを指定します。
注:ステップ3以降では、ご自身の環境とニーズに応じて設定を行ってください。
第2セクションのまとめ
このセクションでは、GitLabリポジトリをAWS CodeBuildと統合する方法について詳しく説明しました。このように設定することで、GitLabで行ったコード変更がAWS CodeBuildによって自動的にビルド・テストされる継続的インテグレーションパイプラインを実現できます。
第3セクション:GitLabとAWS CodePipelineの統合
AWS CodePipelineを使用してGitLabリポジトリからの継続的デリバリーを実装しようとしている方は、この詳細なガイドを参考にしてください。GitLabをAWS CodeStar Connectionsプロバイダーとして利用できるようになったため、これまでよりも統合しやすくなりました。
前提条件
- GitLab.comアカウント
- AWSアカウント
- AWS CLI(構成済み)
ステップ1:AWS CodeStar ConnectionsでGitLabとの接続を作成する
- AWSマネージメントコンソールにログインし、CodePipelineサービスに移動します。
- 左側のナビゲーションパネルから「設定」>「接続」の順に選択します。
- 「接続を作成」ボタンをクリックします。
- プロバイダーとして「GitLab」を選択します。
- 接続名を入力して「GitLabに接続」をクリックします。
- GitLabの認証ページにリダイレクトされます。
- 必要な権限を承認します。
- 正常に接続されると、接続ステータスが「利用可能」に変わります。
ステップ2:AWS CodePipelineを作成する
- CodePipelineダッシュボードで「パイプラインを作成」をクリックします。
- パイプライン名を入力して「次へ」をクリックします。
- ソースプロバイダーとして「GitLab」を選択します。
- 先程作成した接続を選択し、GitLabのリポジトリとブランチを指定します。
- トリガータイプを選択します。リポジトリ内の特定のブランチやファイルタイプに対するプルイベントまたはプッシュイベントに基づいて、CodePipelineパイプラインの実行をトリガーできます。
注:ステップ3以降では、ご自身の環境とニーズに応じて設定を行ってください。
第3セクションのまとめ
このセクションでは、GitLabリポジトリをAWS CodePipelineと統合する方法について詳しく説明しました。このように設定することで、GitLabで行ったコード変更が自動的にAWS環境にデプロイされる継続的デリバリーパイプラインを実現できます。
第4セクション:GitLabへの移行
GitLabにAWSを統合すると、開発ワークフローとデプロイワークフローを効率化する強力な機能を利用できるようになり、ソースコード管理に伴う問題を解決しやすくなります。統合方法は次のようにいくつかあり、それぞれに独自のメリットがあります。
- AWS CodeStar Connectionsを使用してGitLabとAWSサービスを連携させる場合、さまざまなAWSサービスにGitLabなどの外部のGitリポジトリを接続できるようになるため、より一貫したワークフローを実現できます。この設定方法では、GitLabレポジトリでの自動ビルド、デプロイ、その他の重要なアクションが直接サポートされるため、開発プロセスの一貫性および効率性が向上します。
- AWS CodeStar Connections経由でGitLabとAWS CodePipelineを接続すると、完全なCI/CDパイプラインを作成できるため、自動化を次のレベルへと進められます。このアプローチでは、GitLabをAWS CodePipelineと統合することで、CodeBuildやCodeDeployなどのAWSサービスを使用して、ソース管理やビルドからテストやデプロイまでの全プロセスを自動化できます。これにより、堅牢でスケーラブルかつ効率的なデリバリープロセスを実現できます。
1.AWS CodeStar Connectionsを使ってGitLabとAWSサービスを接続する
AWS CodeStar Connectionsは、外部のGitリポジトリ(GitHubやBitbucketなど)をAWSサービスと接続するためのサービスです。また、CodeStar Connections経由でGitLabをAWSサービスに接続することもできます。GitLabを使用する場合、HTTP Gitサーバーとしてカスタム接続を設定しなければならない可能性があります。 この方法でGitLabに接続できるAWSサービスは以下のとおりです。
- AWSサービスカタログ
AWS Service Catalogは、組織におけるAWSリソースの標準化および管理を支援します。AWS Service CatalogをGitLabと統合すると、リソース管理の透明性が向上し、変更を追跡しやすくなります。具体的には、GitLabのコミットに基づいてカタログの更新を自動化し、運用効率を向上させることができます。
- AWS CodeBuild
AWS CodeBuildは、ソースコードをコンパイルし、テストを実行し、デプロイできるソフトウェアパッケージを生成するマネージド型のビルドサービスです。GitLabとCodeBuildを統合すると、GitLabにコード変更がプッシュされるたびに自動化されたビルドプロセスが開始されるようになります。これにより、ビルドの一貫性が確保され、コラボレーションとバージョン管理を容易に進められます。
- AWS Glue ノートブックジョブ
AWS Glueノートブックジョブは、データの準備とETL (抽出、変換、ロード)タスクを対話形式で開発して実行できるサービスです。GitLabとGlueノートブックジョブを統合すると、ノートブックとETLスクリプトのバージョン管理を行えるようになり、チームメンバー間のコラボレーションが促進され、データ処理パイプラインの品質管理が強化されます。
- AWS Proton
AWS Protonは、マイクロサービスとServerlessアプリケーションの開発とデプロイを自動化するサービスです。GitLabとAWS Protonを統合することで、インフラストラクチャをコードとして管理し、デプロイを自動化し、一貫した環境管理を実現できるため、開発プロセスをさらに効率化できます。
AWS CodeStar Connectionsのサポート対象のサービスが増えるにつれ、より多くのAWSサービスをGitLabとさらに簡単に接続できるようになります。そのため、CodeStar Connectionsを新たにサポートするサービスを定期的にチェックすることをお勧めします。
- AWS CodeStar Connections経由(CodeDeployを含む)でCodePipelineとGitLabを接続する
AWS CodePipelineは、ソフトウェアのリリースプロセスを自動化する継続的デリバリーサービスです。GitLabとCodePipelineを接続するには、AWS CodeStar Connectionsを使用する必要があります。この設定方法を用いると、GitLabリポジトリをソースとして指定し、CI/CDパイプライン全体を自動化できます。 CodePipelineがサポートする主なアクションは以下のとおりです。
- ソース管理 :AWS CodeCommit、GitHub、Bitbucket、GitLab
- ビルドとテスト :AWS CodeBuild、Jenkins
- デプロイ :AWS CodeDeploy、Elastic Beanstalk、ECS、S3
- 承認 :手動承認
- インフラストラクチャ管理 :AWS CloudFormation
- Serverless :AWS Lambda
- テスト :AWS Device Farm
- カスタムアクション :AWS Step Functions
GitLabとCodePipelineを統合すると、GitLabにコード変更がプッシュされるたびにパイプラインが自動的にトリガーされるため、一貫したプロセスでビルドからデプロイまでを行えます。さらに、これをGitLabのバージョン管理機能と組み合わせることで、デプロイの履歴と状態を簡単に追跡できるようになり、より柔軟で信頼性の高いソフトウェアデリバリーを実現できます。
まとめ
このガイドでは、GitLabへの移行、およびGitLabとAWSとの統合に関する包括的な情報を提供しました。4つの主なトピックを通して、以下の内容を取り上げました。
- GitLabへの並行移行:リスクを最小限に抑えつつ、AWSにホストされている既存リポジトリからGitLab.comへ徐々に移行する方法。
- AWS CodeBuildとの統合:GitLabリポジトリと統合された強力なCI環境を設定する手順。
- AWS CodePipelineとの統合:GitLabリポジトリを使用して効率的な継続的デリバリーパイプラインを構築する方法。
- CodePipelineとCodeStar Connectionsのダウンストリーム統合:GitLabとAWS間の接続を活用して広範なサービスの利用を実現する方法。この方法を用いると、AWSエコシステム全体での統合の可能性が連鎖的に広がります。
コードホスティングと統合の実装戦略は組織ごとに異なります。このガイドをチュートリアルとして、貴社独自のGitLab とAWSの統合および実装戦略の出発点としてご利用ください。
リソース
より詳しい情報と高度な設定については、以下のリソースを参照してください。
ご質問がある場合やサポートが必要な場合は、GitLabサポートまたはAWSサポートまでお問い合わせください。みなさまがAWSとGitLabの統合を始める上で、こちらの総合ガイドがお役に立てば幸いです。
監修:小松原 つかさ @tkomatsubara
(GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト)