更新日:2026年8月19日
11分で読めます
AWSインフラとアプリ配信をエンドツーエンドで自動化。OpenTofuでEKSを プロビジョニングし、GitLab CI/CDでビルドとパッケージ化、Argo CDがGitOpsでデプロイします。

クラウド環境の構築は簡単ではありません。ネットワーク、サブスクリプション、各種サービス、そして基盤インフラを構成するあらゆる要素を考慮する必要があるためです。手作業でのセットアップはミスが起こりやすく、環境ごとに差異が生まれ、同じ状態を再現するのも困難です。
本記事では、GitLabを運用の中枢に据えて、完全に自動化されたクラウド環境を構築する方法を紹介します。クラウドインフラはすべてコードとして定義してGitLab上で管理し、GitLab CI/CDパイプラインからOpenTofuを使ってAWSにデプロイ。さらに同じパイプラインが、Argo CDによるGitOpsの手法で、実際のWebアプリケーションのビルドとデプロイまで担います。
まずは、Infrastructure as Code(IaC)とGitOpsがなぜ重要なのか、そしてGitLabがこれらの手法を単一のプラットフォームでどう統合するのかを押さえておきましょう。
IaCによって、環境は次の特性を備えます。
GitOpsは、この考え方をアプリケーションのライフサイクルにまで広げたもの。Kubernetesクラスター(やその他のインフラ)に手作業で変更を適用するのではなく、アプリケーションのあるべき状態をGitに置きます。あとはArgo CDのようなGitOpsオペレーターが、リポジトリの内容とクラスターの状態を継続的に一致させる仕組みです。これによって得られるメリットは次のとおり。
こうしたアプローチに必要な機能は、すべてGitLabに揃っています。
クラウドインフラのプロビジョニングからアプリケーションの配信まで、GitLabならすべてが1つのプラットフォーム上で完結します。
本チュートリアルを進めるには、以下が必要です。
本チュートリアルで扱う手順は次のとおりです。
この例をご自身のGitLab環境で再現する方法を、順に見ていきましょう。サンプルのソースコードはSATEC Public Demo Groupで公開しています。
最初のステップは、OpenTofu(Terraformのオープンソースフォーク)によるクラウドインフラのプロビジョニングです。ネットワークコンポーネントを宣言的に定義し、Amazon EKSクラスターを作成します。
このプロセスに再現性と安全性を持たせるため、値をハードコードせずGitLab CI/CD変数を使います。これにより、複数のパイプラインをまたいでAWS環境を動的に設定できます。
必要な環境変数は以下のとおりです。すべてのプロジェクトに継承させるため、親グループの**「設定 > CI/CD > 変数」**で定義します。
変数はすべてGitLab上で保護変数として定義し、AWSシークレットアクセスキーのような機密性の高いものにはマスクも設定します。こうすることで、安全なCI/CDコンテキストでのみ値が参照される状態を保てます。セキュリティをさらに高めたい場合は、CI/CD変数のチュートリアルもご覧ください。コードと設定を分離しておけば、パイプラインは柔軟さを保ったまま、特定の環境に依存しなくなります。
設定が完了すれば、OpenTofuパイプラインを自動実行して次の処理を行えます。

上の図は、インフラのプロビジョニングプロセスの流れを示したものです。
この段階が終わると、AWS環境とKubernetesクラスターのプロビジョニングは完了し、すぐに運用できる状態になります。

このプロセスの最後(ポストデプロイ)に行うのが、専用リポジトリに置いた2つ目のGitLabパイプラインのトリガーです。このパイプラインが、Helmプロバイダーを使ってArgo CDとCertManagerを新しいEKSクラスターへ自動的にデプロイします。
AWSインフラとEKSクラスターのプロビジョニングが済んだら、次は環境の運用に欠かせないKubernetesツール、すなわちArgo CD、CertManager、Ingress NGINX Controllerの構成です。
この工程は、別リポジトリに置いた2つ目のGitLabパイプラインによって完全に自動化されています。

2つ目のパイプラインは、OpenTofuのプロビジョニングステージが正常に完了した時点で、インフラパイプラインのトリガージョブから自動的に実行されます。
つまり、これらのコアコンポーネントのデプロイは、エンドツーエンドの同じワークフローの一部としてシームレスに進み、手作業は一切不要。デプロイ自体はOpenTofuがHelmプロバイダー経由で実行するため、HelmチャートをGitLab上でコードとして宣言的に管理できます。
ワークフローを簡略化すると、次のようになります。
コアとなるKubernetesコンポーネント(Argo CD、CertManager、Ingress NGINX Controller)のインストールが完了すると、自動化パイプラインの最終ステージが始まります。この工程は、Helmチャートのインストール完了直後に自動で実行される仕組みです。
ここでトリガーされる3つ目のGitLabパイプラインが、Argo CD経由でサンプルWebアプリケーションを新しいEKSクラスターにデプロイします。
全体の流れは以下の図のとおりです。

このステージでは、GitLabがOpenTofuの生成したkubeconfigを使ってクラスターに接続し、Webアプリケーションのあるべき状態を定義したArgo CDのアプリケーションマニフェストを適用します。
パイプラインが行う処理は次のとおりです。
これらの処理はすべてGitLab CI/CDによって自動的に行われ、手作業は発生しません。
マニフェストが適用されると、Argo CDコントローラーがそれを検知し、アプリケーションの状態をリポジトリと同期。サンプルWebページがEKSクラスターにデプロイされます。
こうして出来上がるのは、次のような形で稼働するKubernetes環境です。
このアプローチにより、エンドツーエンドの自動化、トレーサビリティ、再現性が確保され、そのすべてをGitLabで管理できます。
Argo CDでアプリケーションをデプロイする前に、まずはビルドし、コンテナ化して、GitLabコンテナレジストリに公開しておく必要があります。
この工程は専用のCI/CDパイプラインで管理し、ソースコードとKubernetesマニフェストを別々のリポジトリに置くGitOps向けのリポジトリ構成に従います。

この構成では、GitLabグループを大きく2つに分けます。
この分離によって、アプリケーションコードとデプロイ設定は互いに独立しながらも自動化を通じて同期し、見通しのよいGitOpsワークフローが実現します。
アプリケーションリポジトリに定義したCI/CDパイプラインは、次のタスクを自動化します。
これらは、新しいイメージタグのコミット、またはマージリクエストの作成という形で自動的に行われます。

コミットやマージリクエストが作成されると、Argo CDがデプロイリポジトリの変更を自動的に検知し、更新後のマニフェストをKubernetesクラスターと同期します。新しいバージョンのアプリケーションは、手作業を挟むことなくデプロイされます。
本記事では、GitLabを中心に据えた完全自動のクラウド環境の構築方法を紹介しました。冒頭で掲げた目標、つまり再現性があり、バージョン管理され、自動化されたインフラという要件を満たす構成です。インフラのプロビジョニングにOpenTofu、パイプラインのオーケストレーションにGitLab CI/CD、GitOpsベースのアプリケーション配信にArgo CDを組み合わせれば、クラウドリソースから稼働中のアプリケーションまで、ライフサイクル全体を1つのプラットフォームで管理できます。
クラウドインフラとDevSecOpsの実践に深い知見を持つGitLabパートナーとして、Clober(SATECグループ)は、各組織のニーズに合わせた自動化環境の導入を支援しています。
注:本記事は、Clober(SATECグループ)のDevSecOpsチームがAWS Summit Madrid 2025で実施したライブデモをもとにしています。
無料の
30日間のGitLabトライアルを開始
クレジットカードなしでご登録いただけます。
このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成してあなたの声を届けましょう。
フィードバックを共有する