🦔
GCP Cloud Buildを一時サーバーとして使う
概要
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