🦔

GCP Cloud Buildを一時サーバーとして使う

2022/12/10に公開

概要

cloudbuildのコンテナ中でsshサーバーを立ててngrokで入るだけ

メリットとしては 1日あたり120分までの無料枠 があるのと、指定したコンテナに簡単には入れるところです

ただし、プライベートプールではなく無料枠があるデフォルトプールを使用する必要があります

設定

まず以下のような cloudbuild.yaml を置きます
タイムアウトは各自調節してください

steps:
- name: public.ecr.aws/debian/debian:11
  entrypoint: /bin/bash
  args: ['./start.sh']

timeout: 900s

start.shはこんな感じ

#!/bin/bash
set -euxo pipefail

# sshの設定(この例では証明書認証)
apt update
apt install -y openssh-server
mkdir /run/sshd ~/.ssh
cp ./ca.key.pub /etc/ssh/ca.key.pub
echo "TrustedUserCAKeys /etc/ssh/ca.key.pub" >> /etc/ssh/sshd_config
/usr/sbin/sshd

# ngrok起動 最後にログインコマンドを出すようにしてます
# ngrokコマンドにそのままパイプつなげるとタイミングによって出力されないので一回ファイルに書いてます
./ngrok config add-authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
./ngrok tcp 22 --region jp --log stdout > /tmp/stdout.log &
sleep 10
perl -ple 's#.*url=tcp://(.+):(\d+)#ssh -lroot $1 -p$2#' /tmp/stdout.log
wait

起動

起動リージョンは近い方が良いのですが、制限されている場合 もあるので近くて使える場所を選びます

gcloud builds submit . --region=asia-east1

起動するとこんな感じでログが出るので
表示されたsshコマンドで入る

+ ./ngrok tcp 22 --region jp --log stdout
+ perl -ple 's#.*url=tcp://(.+):(\d+)#ssh -lroot $1 -p$2#' /tmp/stdout.log
t=2022-12-08T17:56:09+0000 lvl=info msg="no configuration paths supplied"
t=2022-12-08T17:56:09+0000 lvl=info msg="using configuration at default config path" path=/builder/home/.config/ngrok/ngrok.yml
t=2022-12-08T17:56:09+0000 lvl=info msg="open config file" path=/builder/home/.config/ngrok/ngrok.yml err=nil
t=2022-12-08T17:56:09+0000 lvl=info msg="starting web service" obj=web addr=127.0.0.1:4040
t=2022-12-08T17:56:09+0000 lvl=info msg="tunnel session started" obj=tunnels.session
t=2022-12-08T17:56:09+0000 lvl=info msg="client session established" obj=csess id=39ab872f4152
ssh -lroot xxxx.xxxxx.ngrok.io -p14104

Discussion