Node.jsアプリをcloud buildからcompute engineへデプロイする

clodu buildからcompute engineへssh(scp)している例があまり無かったのでメモ。

Cloud Buildの構成

Cloud Build構成ファイル(cloudbuild.yaml)は以下の通り

steps:
  # ① Cloud Buildの実行環境にSSH鍵を作成
  - name: 'bash'
    secretEnv: ['SSH_KEY','SSH_KEY_PUB']
    entrypoint: 'bash'
    args:
    - -c
    - |
      mkdir -p /builder/home/.ssh
      echo "$$SSH_KEY" >>/builder/home/.ssh/google_compute_engine
      echo "$$SSH_KEY_PUB" >>/builder/home/.ssh/google_compute_engine.pub
      chmod 400 /builder/home/.ssh/google_compute_engine
  # ② アプリをビルド
  - name: node:16.14.0
    entrypoint: npm
    args: ['install']
  - name: node:16.14.0
    entrypoint: npm
    args: ["run","build"]
  # ③ VMインスタンスへファイルを転送
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: gcloud
    args: ['compute', 'scp', '--recurse', 'src','root@instanceName:api', '--zone', 'asia-northeast1-b']
availableSecrets:
  secretManager:
  - versionName: projects/{projectName}/secrets/SSH_KEY/versions/latest
    env: SSH_KEY
  - versionName: projects/{projectName}/secrets/SSH_KEY_PUB/versions/latest
    env: SSH_KEY_PUB
options:
  logging: CLOUD_LOGGING_ONLY
timeout: 1200s

Compute Engineへssh(scp)する為の鍵をCloud Buildの実行環境に作成

  ssh鍵の内容はSecret Managerに保存し、ビルド時に復号する。

アプリをビルド

VMインスタンスへscpでファイルを送信


作業の流れ

  1. SSH鍵を作成
    ssh-keygen -t rsa -f ~/.ssh/google_compute_engine
  1. 作成した公開鍵(google_compute_engine.pub)の中身をVMインスタンスのメタデータに追加する メタデータはCompute Engine管理画面の「メタデータ」 > 「SSH 認証鍵」から編集できる

  2. 1で作成したSSH鍵をCloud Buildの実行環境で使う為に、Secret Managerにシークレットを追加する yamlファイルでいうSSH_KEYSSH_KEY_PUB

  3. Cloud Build構成ファイル(cloudbuild.yaml)を作成

  4. Cloud Buildのトリガーを作成してビルドを実行

参考

  • SSH鍵の作成
OGP imageRed Hat Customer Portal - Access to 24x7 support and knowledgeRed Hat

終わりに

フロント側のデプロイフローも紹介してるのでこちらも是非

OGP imagemonorepo構成のフロントエンドアプリをcloud build経由でvercelへデプロイするmonorepo構成で作成したフロントエンドアプリケーションをcloud buildでビルドし、vercelへデプロイした時のまとめです