DataformをGCEインスタンス上のGitリポジトリとHTTPSで連携してみる

DataformをGCEインスタンス上のGitリポジトリとHTTPSで連携してみる

DataformとGCEインスタンス上のGitリポジトリとHTTPSで連携することができるのか検証してみました。
Clock Icon2024.10.19

概要

SaaS版のGitHubやGitLabに接続することが多いと思いますが、GCEにインストールしたサードパーティのGit(今回はGitLab)とも接続できるのかな?と思い気になって前回のブログではSSHでDataformからGCEインスタンス上のGit(GitLab)と接続してみました。
https://dev.classmethod.jp/articles/20241017-dataform-gce-git-con/

さて、今回のブログではHTTPSでDataformからGCEインスタンス上のGit(GitLab)と接続してみます。

※本記事ではGitLabのインストールに関しては省略しています。インストールに関しては前回のブログを参照ください。

※インストール時に設定するEXTERNAL_URLには外部IPではなく有効なホスト名(ドメイン)を設定する必要があります。これはIPアドレスだと有効な証明書が割り当てられず、DataformからHTTPSで接続することができないためです。こちらに関しては本記事末尾の補足:外部IPでEXTERNAL_URLを設定した場合も参照ください。

やってみる

やりたいこと:DataformからGCEインスタンス上のGitLabへHTTPSで接続をする

全体の流れ

  1. GitLab側でDataform用のアクセストークンを発行
  2. GitLab側で発行したアクセストークンに権限付与
  3. Secret Managerでアクセストークンのシークレットを作成
  4. Dataform側で接続情報設定
  5. 接続確認

それではやってみましょう。

GitLab側の作業

GitLabでDataform用のアクセストークンを発行します。
リファレンスは以下となります。
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html

GitLabにログインして、画面左上のアカウントのアイコンをクリック > Edit profileを押下します。
スクリーンショット 2024-10-19 0.43.42

Access tokens > Add new tokenを押下します。
スクリーンショット 2024-10-19 0.46.58

トークン登録画面では以下の項目を設定してCreate personal access tokenを押下します。

設定項目 設定値
Token name dataform
Expiration data デフォルト
Select scopes api, read_repository, write_repository

上記の設定値はDataformのリファレンスに記載がありました。

トークンに dataform という名前を付けます。
GitLab の個人用アクセス トークンの名前は dataform にする必要があります。
Dataform に api、read_repository、write_repository の権限を付与します。

※引用:https://cloud.google.com/dataform/docs/connect-repository?hl=ja#connect-https

トークンの登録に成功すると以下のように画面にpersonal access tokenが表示されるのでコピーして控えておきます。
スクリーンショット 2024-10-19 0.56.41

Google Cloud側の作業

Secret Managerで新規シークレットの登録を行います。適当な名前を設定して、シークレットの値に先ほどコピーしたpersonal access tokenを貼り付けます。その他の項目は全てデフォルトのままでシークレットの作成を行います。
スクリーンショット 2024-10-19 0.59.37

※Dataformのサービスアカウントにroles/secretmanager.secretAcessorロールを付与しておきます(手順は割愛します)。

HTTPS接続するDataformのリポジトリに移動します。
SETTINGS > GITと接続を押下します。
プロトコルにHTTPSを指定して、GitLabで作成したリポジトリのURLとデフォルトのブランチ名、先ほど作成したSecret Managerのシークレット名を指定してリンクを押下します。
スクリーンショット 2024-10-19 1.05.33

無事接続できた場合Successfully linked to remote Git repositoryと表示されます。また接続設定をみるとリポジトリ ソースhttpsから始まるGitLabのリポジトリのURLが設定されているはずです。
スクリーンショット 2024-10-19 1.08.42

接続できているか確認してみる

試しにワークスペースを作成してみてください。
私はtesthttpsという名前で作成しています。

ワークスペースを作成すると先ほどGITと接続で設定したデフォルトのブランチのデータが表示されているはずです。
スクリーンショット 2024-10-19 1.12.54

Dataform側からもリポジトリへPUSHしてみます。
適当なファイルを作成してCOMMITします。
スクリーンショット 2024-10-19 1.15.42

COMMITしたらPUSH TO REMOTE BRANCHを押下します。
スクリーンショット 2024-10-19 1.15.53

GitLabのリポジトリをみてください。ブランチ一覧をみると先ほど作成したワークスペース名のブランチが存在しているはずです。
スクリーンショット 2024-10-19 1.23.50

あとはマージリクエストするなり好きなように料理できますね。

以上より、GCEインスタンス上のGitLabとDataformをHTTPSにて接続できることが無事検証できました。

補足:外部IPでEXTERNAL_URLを設定した場合

外部IPでEXTERNAL_URLを設定した場合は、
GitLab側でトークンを発行してSecret Managerに登録してDataformで接続設定をしても以下のエラーが発生します。

We are unable to connect to your Git provider with the configured credentials. If you use HTTPS authentication check that the token is valid and has not expired. If you use SSH authentication check that the private user key and public host key are valid. See the following error message for more details:
Remote repository 'https://***' could not be reached.

スクリーンショット 2024-10-19 2.14.08

GCEにインストールしたGitLab側でIPベースとなっているため有効な証明書が設定されていない状態なので、DataformからGitLabへのHTTPS接続が確立できず、結果として接続が失敗すると考えられます。(ただしSSH接続の場合は証明書を用いないため外部IPで設定してもDataformと接続が可能です)

EXTERNAL_URLへの設定値のパターンを以下にまとめてみました。

パターン 接続タイプ 結果
有効なドメインを設定 HTTPS 接続可能
有効なドメインを設定 SSH 接続可能
外部IPを設定 HTTPS 接続不可
外部IPを設定 SSH 接続可能

DataformとGCEインスタンスのGitLabとの接続検証をするだけなら外部IPで設定してSSHで接続するのが一番楽かなと思います。特に、ドメインの用意がない場合。

所感

SSH・HTTPSでGCEインスタンス上のGitLabとDataformを接続してみました。特に問題なくできたのですが、あくまでもできたのは接続だけです。
実際にGitLabのようなVCSを本番運用していくためには可用性を担保する必要があると考えます。DBはCloud SQLを使う、MIGにする、ロードバランサを入れる、バックアップ設定・・・様々な検討が必要と思います。
今回は接続しか試していませんが今後は上記のような可用性に関係してくる面の検証も行ってみたいと思います。
普段サーバレスのサービスばかり触っているので今回GCEに触って設定もしていて、新鮮味がありとても楽しかったです。

それではまた。ナマステー

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.