クラウドシード

Cloud Seedは、GitLab Incubation Engineeringが Google Cloudと協力して主導するオープンソースプログラムです。

Cloud SeedはHerokuのような使いやすさとハイパークラウドの柔軟性を兼ね備えています。私たちはOAuth 2を使って、Terraformとinfrastructure-as-codeを基盤にしたハイパークラウド上でサービスをプロビジョニングし、2日目のオペレーションを可能にします。

目的

私たちは、GitLabから主要なクラウドプロバイダーにウェブアプリケーション(およびその他のワークロード)をデプロイするのは簡単であるべきだと考えています。

この取り組みをサポートするために、Cloud SeedはGitLabで適切なGoogle Cloudサービスを利用することを簡単かつ直感的にします。

なぜGoogle Cloudなのか

あるいはなぜAWSやAzureではないのですか?

Cloud Seedは誰でも拡張できるオープンソースのプログラムであり、私たちはすべての主要なクラウドプロバイダーと協力したいと考えています。Google Cloudを選んだ理由は、彼らのチームがこの取り組みにアクセスしやすく、協力的で、協力的だからです。

オープンソースプロジェクトとして、誰もが貢献し、私たちの方向性を形作ることができます

Google Cloud Runへのデプロイ

GitLabプロジェクトにWebアプリケーションをデプロイしたら、Cloud Seedを使ってGitLabからGoogle Cloudにデプロイする手順を説明します:

  1. デプロイ認証情報の設定
  2. (オプション)お好みの GCP リージョンを設定します。
  3. Cloud Runのデプロイパイプラインの設定

デプロイ資格情報の設定

Cloud Seedは、GitLabプロジェクトからGoogle Cloud Platform(GCP) サービスアカウントを作成するインターフェースを提供します。サービスアカウント作成ワークフローで、関連するGCPプロジェクトを選択する必要があります。このプロセスにより、サービスアカウント、キー、デプロイ権限が生成されます。

サービスアカウントを作成するには

  1. Project :: Infrastructure :: Google Cloud ページにアクセスしてください。
  2. サービスアカウントの作成」を選択します。
  3. Google OAuth 2のワークフローに従い、GitLabを作成します。
  4. GCPプロジェクトを選択します。
  5. 選択したGCPプロジェクトにGit参照(ブランチやタグなど)を関連付けます。
  6. フォームを送信して、サービスアカウントを作成します。

生成されたサービスアカウント、サービスアカウントキー、関連するGCPプロジェクトIDは、プロジェクトCI変数としてGitLabに保存されます。これらはProject :: Settings :: CI ページでレビュー・管理することができます。

生成されたサービスアカウントには以下のロールがあります:

  • roles/iam.serviceAccountUser
  • roles/artifactregistry.admin
  • roles/cloudbuild.builds.builder
  • roles/run.admin
  • roles/storage.admin
  • roles/cloudsql.client
  • roles/browser

CI変数をシークレットマネージャーに格納することでセキュリティを強化できます。詳細については、GitLabでのシークレットマネジメントを参照してください。

お好みのGCPリージョンを設定

デプロイ用にGCPリージョンを設定する場合、提供されるリージョンのリストは、利用可能なすべてのGCPリージョンのサブセットです。

リージョンを設定するには、以下の手順に従います:

  1. Project :: Infrastructure :: Google Cloud ページにアクセスしてください。
  2. Configure GCP Regionを選択します。
  3. ご希望のGCPリージョンを選択します。
  4. 選択したGCPリージョンのGit参照(ブランチやタグなど)を関連付けます。
  5. フォームを送信して、GCPリージョンを設定します。

設定されたGCPリージョンはプロジェクトCI変数としてGitLabに保存されます。Project :: Settings :: CI ページでレビューと管理ができます。

Cloud Run デプロイパイプラインの設定

パイプラインで Google Cloud Run デプロイジョブを設定できます。このようなパイプラインの典型的な使用例は、Web アプリケーションの継続的デプロイです。

プロジェクトのパイプライン自体は、ビルド、テスト、セキュアなど複数のステージにまたがる広範な目的を持つことができます。そのため、Cloud Run デプロイは、より大きなパイプラインに適合する1つのジョブとしてパッケージ化されています。

Cloud Runデプロイメントパイプラインを設定するには、次の手順に従います:

  1. Project :: Infrastructure :: Google Cloud ページにアクセスしてください。
  2. Deployments タブを開きます。
  3. Cloud Run の場合は、「マージリクエストで設定」を選択します。
  4. 変更内容をレビューし、送信してマージリクエストを作成します。

これにより、Cloud Run デプロイ パイプラインを含む(または既存のパイプラインに注入される)新しいブランチが作成され、変更とデプロイ パイプラインの実行をレビューしてメイン ブランチにマージできる関連マージ リクエストが作成されます。

クラウド SQL データベースのプロビジョニング

リレーショナルデータベースインスタンスはProject :: Infrastructure :: Google Cloud ページからプロビジョニングできます。Cloud SQL は、データベースインスタンスのプロビジョニングに使用される、基盤となる Google Cloud サービスです。

以下のデータベースとバージョンがサポートされています:

  • PostgreSQL:14、13、12、11、10、9.6
  • MySQL 8.0、5.7、5.6
  • SQLサーバー
    • 2019: スタンダード、エンタープライズ、エクスプレス、ウェブ
    • 2017:スタンダード、エンタープライズ、エクスプレス、ウェブ

Google Cloudの価格が適用されます。Cloud SQLの価格ページをご参照ください。

  1. データベースインスタンスの作成
  2. バックグラウンドワーカーによるデータベースのセットアップ
  3. データベースへの接続
  4. データベースインスタンスの管理

データベースインスタンスの作成

Project :: Infrastructure :: Google Cloud ページからDatabaseタブを選択します。ここには、Postgres、MySQL、SQL Serverのデータベースインスタンスを作成するための3つのボタンがあります。

データベースインスタンス作成フォームには、GCPプロジェクト、Git参照(ブランチまたはタグ)、データベースバージョン、マシンタイプのフィールドがあります。送信すると、データベースインスタンスが作成され、データベースのセットアップがバックグラウンドジョブとしてキューに入れられます。

バックグラウンドワーカーによるデータベースのセットアップ

データベースインスタンスの作成に成功すると、バックグラウンドワーカーが以下のタスクを実行します:

  • データベースユーザーの作成
  • データベーススキーマの作成
  • データベースの詳細をプロジェクトのCI/CD変数に格納します。

データベースに接続

データベースインスタンスのセットアップが完了すると、データベース接続の詳細がプロジェクト変数として利用可能になります。これらはProject :: Settings :: CI ページで管理でき、適切な環境で実行するパイプラインが利用できるようになります。

データベースインスタンスの管理

Project :: Infrastructure :: Google Cloud :: Databases のインスタンス一覧は Google Cloud Console にリンクしています。インスタンスを選択して詳細を表示し、インスタンスを管理します。

クラウドシードに貢献する

Cloud Seedに貢献する方法はいくつかあります:

  • Cloud Seedを使ってフィードバックを共有しましょう。
  • Ruby on Rails や Vue.js に精通している場合は、開発者としてGitLab に貢献することを検討してください。
    • Cloud Seedの多くはGitLabコードベースの内部モジュールです。
  • GitLabパイプラインに精通しているなら、Cloud Seed Libraryプロジェクトに貢献することを検討してください。