GCE インスタンスの resonite ヘッドレスサーバ対話シェルにアクセスしよう¶
この記事では Google Cloud で resonite ヘッドレスサーバ を構築する で構築した ヘッドレスサーバ について以下を実施します
GCE インスタンスの起動/停止
GCE インスタンスへの ssh アクセス
ヘッドレスサーバ の対話シェル(headless server interface)操作
前提条件¶
こちらでセットアップした Google Cloud Shell を利用して Google Cloud をコマンドラインから操作します。
インフラ設定用の環境変数を設定する¶
環境変数を読み込みます
source ~/resonite-headless-infra/scripts/env-headless-server.bash
環境変数が設定されたことを確認します
echo -e \
"RESONITE_HEADLESS_ENVIRONMENT\t\t=\t${RESONITE_HEADLESS_ENVIRONMENT}"\\n\
"VPC_NAME\t\t\t\t=\t${VPC_NAME}"\\n\
"SUBNET_NAME\t\t\t\t=\t${SUBNET_NAME}"\\n\
"REGION\t\t\t\t\t=\t${REGION}"\\n\
"SUBNET_RANGE\t\t\t\t=\t${SUBNET_RANGE}"\\n\
"RESONITE_HEADLESS_SERVER_INSTANCE_NAME\t=\t${RESONITE_HEADLESS_SERVER_INSTANCE_NAME}"\\n\
"IMAGE_PROJECT\t\t\t\t=\t${IMAGE_PROJECT}"\\n\
"IMAGE_FAMILY_SCOPE\t\t\t=\t${IMAGE_FAMILY_SCOPE}"\\n\
"IMAGE_FAMILY\t\t\t\t=\t${IMAGE_FAMILY}"\\n\
"ZONE\t\t\t\t\t=\t${ZONE}"\\n\
"SETUP_RESONITE_HEADLESS_SERVER_SCRIPT\t=\t${SETUP_RESONITE_HEADLESS_SERVER_SCRIPT}"\\n\
"MACHINE_TYPE\t\t=\t${MACHINE_TYPE}"\\n\
gcloud CLI の構成を設定します
PROJECT_NAME=$(gcloud config list --format="value(core.project)")
gcloud config set project ${PROJECT_NAME}
gcloud config set compute/zone ${ZONE}
gcloud config set compute/region ${REGION}
GCE インスタンスを起動/停止する¶
インスタンスを確認します
gce-list
起動コマンド¶
以下のコマンドを実行すると、停止しているインスタンスが表示されるので選択して Enter を押してください
gce-start
起動コマンド¶
以下のコマンドを実行すると、停止しているインスタンスが表示されるので選択して Enter を押してください
gce-start
停止コマンド¶
以下のコマンドを実行すると、起動しているインスタンスが表示されるので選択して Enter を押してください
gce-stop
GCE インスタンスに ssh でアクセスする¶
以下のコマンドを実行すると、起動しているインスタンスが表示されるので選択して Enter を押してください
gce-ssh
ヘッドレスサーバ の対話シェル(headless server interface)に入る¶
ヘッドレスサーバ は tmux(ターミナルマルチプレクサの一種) から起動している為、起動中の tmux セッションに入ることでアクセスできます
ヘッドレスサーバの対話シェルにアクセスします
tmux a
tmux の config は標準と違い、prefix キーを C-k に変更しています
Ctrl+k ⇒ c 新しくウィンドウを作成する
Ctrl+k ⇒ n 次のウィンドウを表示する
Ctrl+k ⇒ p 前のウィンドウに表示する
Ctrl+k ⇒ d セッションをデタッチする(ヘッドレスサーバは起動したまま)
# コピーモード ※画面をスクロールできるようになる
Ctrl+k ⇒ [ コピーモードを開始する
h カーソルを左に移動する
j カーソルを下に移動する
k カーソルを上に移動する
l カーソルを右に移動する
Ctrl-b ページアップ
Ctrl-f ページダウン
元のシェルに戻り、ログオフします
# セッションをデタッチする(ヘッドレスサーバは起動したまま)
Ctrl+k ⇒ d
# GCE インスタンスのシェルから抜ける
exit
ヘッドレスサーバの Unit (自動起動設定)の確認をします
# ヘッドレスサーバのサービスが動いていることを確認する
systemctl status resonite-headless.service
# ヘッドレスサーバのサービスをリスタートする
sudo systemctl restart resonite-headless.service
# ヘッドレスサーバのサービスを停止する
systemctl status resonite-headless.service
SFTP 接続をする¶
IAP のポート転送を使うことができます
INSTANCE_NAME=$(gcloud compute instances list --filter="status=TERMINATED" --format="value(name)"|fzf)
gcloud compute start-iap-tunnel ${INSTANCE_NAME} 22 --local-host-port=localhost:10022 --zone=${ZONE}
sftp -P 10022 localhost
GCE インスタンスを削除する¶
GCE インスタンスが不要になったら削除しましょう
gcloud compute instances delete ${RESONITE_HEADLESS_SERVER_INSTANCE_NAME}
注釈
GCE インスタンスは使わない時は停止して、必要な時に起動してください。 停止している間は基本的に課金されませんが、例外として停止中も1日に数円単位でディスク使用料金がかかります
注釈
gce コマンドは ${HOME}/.bashrc
に書かれているので確認してみてください
function gce-start(){
INSTANCE_NAME=$(gcloud compute instances list --filter="status=TERMINATED" --format="value(name)"|fzf)
if [ -n "${INSTANCE_NAME}" ]; then
ZONE=$(gcloud compute instances list --filter="name=${INSTANCE_NAME}" --format="value(zone)")
gcloud compute instances start ${INSTANCE_NAME} --zone=${ZONE}
else
echo Instance is not specified.
fi
gcloud compute instances list
}
function gce-stop(){
INSTANCE_NAME=$(gcloud compute instances list --filter="status=RUNNING" --format="value(name)"|fzf)
if [ -n "${INSTANCE_NAME}" ]; then
ZONE=$(gcloud compute instances list --filter="name=${INSTANCE_NAME}" --format="value(zone)")
gcloud compute instances stop ${INSTANCE_NAME} --zone=${ZONE}
else
echo Instance is not specified.
fi
gcloud compute instances list
}
function gce-ssh(){
INSTANCE_NAME=$(gcloud compute instances list --filter="status=RUNNING" --format="value(name)"|fzf)
if [ -n "${INSTANCE_NAME}" ]; then
ZONE=$(gcloud compute instances list --filter="name=${INSTANCE_NAME}" --format="value(zone)")
gcloud compute ssh --tunnel-through-iap ${INSTANCE_NAME} --zone=${ZONE}
else
echo Instance not specified.
fi
}
alias gce-list='gcloud compute instances list --format="table[BOX](name, resourcePolicies[0].basename(), zone, machineType, scheduling.preemptible, networkInterfaces[].accessConfigs[natIP], status)"'
警告
※注意事項
gce-ssh
は Google Cloud の IAP という仕組みを使っています
https://cloud.google.com/compute/docs/connect/ssh-using-iap?hl=ja
IAP 経由の ssh ログインをした場合、自動的にローカルのユーザ名でユーザが作成されます。 本手順は Cloud Shell を起動したローカルのユーザ名を元にしてディレクトリ配置をしているので、ローカルのユーザ名が違う端末から ssh アクセスしようとするとうまくいきません。
以上
明日の記事 へ続きます。