DataformをGCEインスタンス上のGitリポジトリとHTTPSで連携してみる
概要
SaaS版のGitHubやGitLabに接続することが多いと思いますが、GCEにインストールしたサードパーティのGit(今回はGitLab)とも接続できるのかな?と思い気になって前回のブログではSSH
でDataformからGCEインスタンス上のGit(GitLab)と接続してみました。
さて、今回のブログではHTTPS
でDataformからGCEインスタンス上のGit(GitLab)と接続してみます。
※本記事ではGitLabのインストールに関しては省略しています。インストールに関しては前回のブログを参照ください。
※インストール時に設定するEXTERNAL_URL
には外部IPではなく有効なホスト名(ドメイン)を設定する必要があります。これはIPアドレスだと有効な証明書が割り当てられず、DataformからHTTPSで接続することができないためです。こちらに関しては本記事末尾の補足:外部IPでEXTERNAL_URLを設定した場合も参照ください。
やってみる
やりたいこと:DataformからGCEインスタンス上のGitLabへHTTPSで接続をする
全体の流れ
- GitLab側でDataform用のアクセストークンを発行
- GitLab側で発行したアクセストークンに権限付与
- Secret Managerでアクセストークンのシークレットを作成
- Dataform側で接続情報設定
- 接続確認
それではやってみましょう。
GitLab側の作業
GitLabでDataform用のアクセストークンを発行します。
リファレンスは以下となります。
GitLabにログインして、画面左上のアカウントのアイコンをクリック > Edit profile
を押下します。
Access tokens
> Add new token
を押下します。
トークン登録画面では以下の項目を設定して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
が表示されるのでコピーして控えておきます。
Google Cloud側の作業
Secret Managerで新規シークレットの登録を行います。適当な名前を設定して、シークレットの値
に先ほどコピーしたpersonal access token
を貼り付けます。その他の項目は全てデフォルトのままでシークレットの作成を行います。
※Dataformのサービスアカウントにroles/secretmanager.secretAcessor
ロールを付与しておきます(手順は割愛します)。
HTTPS接続するDataformのリポジトリに移動します。
SETTINGS
> GITと接続
を押下します。
プロトコルにHTTPSを指定して、GitLabで作成したリポジトリのURLとデフォルトのブランチ名、先ほど作成したSecret Managerのシークレット名を指定してリンク
を押下します。
無事接続できた場合Successfully linked to remote Git repository
と表示されます。また接続設定をみるとリポジトリ ソース
にhttps
から始まるGitLabのリポジトリのURLが設定されているはずです。
接続できているか確認してみる
試しにワークスペースを作成してみてください。
私はtesthttps
という名前で作成しています。
ワークスペースを作成すると先ほどGITと接続
で設定したデフォルトのブランチのデータが表示されているはずです。
Dataform側からもリポジトリへPUSHしてみます。
適当なファイルを作成してCOMMITします。
COMMITしたらPUSH TO REMOTE BRANCH
を押下します。
GitLabのリポジトリをみてください。ブランチ一覧をみると先ほど作成したワークスペース名のブランチが存在しているはずです。
あとはマージリクエストするなり好きなように料理できますね。
以上より、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.
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に触って設定もしていて、新鮮味がありとても楽しかったです。
それではまた。ナマステー