アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

プリエンプティブな GCE インスタンスの外部 IP を固定する

最近 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 になってることが確認できた。