最近 iPad Pro を購入したため、これを開発環境のとしても活用できると良いなと思い、GCP でプリエンプティブな GCE インスタンスを作成した。
インスタンスに https://github.com/<username>.keys
経由で取得できる github に登録した自分の公開鍵を設定した。こうすることで秘密鍵を github に使っているものを利用することができる。
これで手元の ~/.ssh/config
をこんな感じで修正すればもう使えるものだと思ってた。
Host gce Hostname <external-ip> IdentityFile ~/.ssh/github User codehex ForwardAgent yes
実際には使えていたが、暫くすると external-ip (以降、外部 IP)が突然変わってしまって毎回 config ファイルを修正していた。しかし、これではしんどいのでちゃんと固定される外部 IP を固定することにした。下記は実際にやった手順を示してる。
GCP のドキュメントを読んでると「エフェメラル」という言葉が出てくる。これは短命、つまり一時的なものを指すらしい。
インスタンスにはエフェメラル外部 IP が最初から割り当てられている。これを固定するために静的外部 IP を割り当てなければならない。これをやるためにはこれだけで良かったのかもしれないが、ちゃんと読んでなかったため下記方法で行った。
新しく静的外部 IP アドレスを予約する
予約するために対象の IP アドレスに名前をつけてあげる必要がある。ここでは codehex-workspace
という名前をつけた。
リージョンはインスタンスと同じにしてあげた方がいい気がしたため東京にした。
gcloud compute addresses create codehex-workspace --region asia-northeast1 --project <PROJECT_ID>
アドレス一覧を確認すると RESERVED
になってることが確認できるはず。
$ gcloud compute addresses list —project <PROJECT_ID> NAME REGION ADDRESS STATUS codehex-workspace [REGION] [ADDRESS] RESERVED
ここまでできれば公式ドキュメントに沿ったやり方で実現できる。インスタンスから削除するアドレス名は EXTERNAL_NAT
だった気がする。
https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address#IP_assign
設定完了後、再びアドレス一覧を確認すると status が IN_USE
になってることが確認できた。