🤘

仮想サーバーを Google Cloud にクラウドリフトして困ったこと

に公開

こんにちは。クラウドエース株式会社で Google Cloud 認定トレーナーをしている廣瀬 隆博です。
個人的にはライブこそヘヴィメタルの醍醐味だと思っているので、今回は 月末 Tech Lunch Online#2 - Google Cloud を語る!- でライブしてきた内容をお届けします。
ライブといっても Lightning Talk(以下、LT)ですので、内容は短めですね。
気軽に読んでもらったらと思います。

https://jaguer-tech-lunch.connpass.com/event/354120/

月末 Tech Lunch とは

月末 Tech Lunch とは、Google Cloud のユーザー会(Japan Google Cloud Usergroup for Enterprise: 愛称 Jagu'e'r)主催の LT 会です。
同会のイベントでは少し珍しく、会員以外の参加も可能だそうです。
本記事を読んで興味を持たれた方は、是非 connpass をチェックしてみてください。

https://jaguer-tech-lunch.connpass.com/

仮想サーバーを Google Cloud にクラウドリフトして困ったこと

ここからは、LT で実際に使用したスライドを交えつつ、サクサク紹介していこうと思います。

困った時のシステム構成

困った時のシステム構成

やりたかったことは割とシンプルですね。
オンプレミスの仮想サーバーを Google Cloud へクラウドリフトするのがゴール でした。
本番移行に向けた事前検証として、現行環境と並行稼働させようと試行錯誤していた際に様々な 困ったこと が起きました。

カスタムホスト名はデプロイ時しか設定できない

カスタムホスト名はデプロイ時しか設定できない

まず初めに、デプロイしたサーバーのホスト名を変えようとしました。
現行と移行先を並行稼働させるのに、同じホスト名だと使いづらいですよね。

カスタムホスト名とは、Compute Engine で動作する OS に任意のホスト名を付与する機能です。
「これでホスト名を変えよう」とチャレンジしましたが、設定することはできませんでした。
どうやら カスタムホスト名は仮想サーバーのデプロイ時しか設定できない仕様 のようですね。

https://cloud.google.com/compute/docs/instances/custom-hostname-vm?hl=ja#limitations

対策のひらめき

インスタンス名とホスト名が同期しない

インスタンス名とホスト名が同期しない

インスタンス名とホスト名が同期するはずだと思い出した私は、さっそく試しました。
しかし、この同期は動作しませんでした。
Google Cloud のサポートとやり取りを進めるなかで、Linux は同期するが Windows は同期しない という仕様を知りました。
Windows は Active Directory もあってホスト名を気軽に変えることはできない気もするので、言われてみればという感じでしたね。

https://cloud.google.com/compute/docs/instances/rename-instance?hl=ja#limitations

仮想サーバーを複製したら壊れた

仮想サーバーを複製したら壊れた

何もしてないのに壊れた って思うことありますよね。私もそう思いました。
結局、普通に OS 上でホスト名を変更するしかない という結論に達した私は、事前準備として移行先の仮想サーバーで Active Directory ドメインから抜けました。
すると、現行の仮想サーバーで Active Directory の認証が通らなくなりました。

幸い本番機ではなかったので業務影響はなかったのですが、ヒヤリハットですね。
何もしてないのに壊れたのではなく、何もしなかったから壊れた といった感じでしょうか。

なお、Active Directory に関する細かい話は、ここでは割愛させていただきます。
しかし、この動作は Active Directory の仕様に合致するというのは間違いなさそうです。

GCEsysprep が失敗する

GCEsysprep が失敗する

何もしてないのに壊れたので、何かしようと思い GCEsysprep が必要だという結論に達しました。
詳しいことは割愛しますが、これによって Windows のセキュリティ識別子(SID)を変更し、現行と移行先が違うサーバーだと認識させる儀式みたいなものですね。

これが見事に失敗しました。
ホスト名を別の物に変えるので、各種サービスは止めておいて、ホスト名変更後に一つずつ動作を確認しよう と思って主要なサービスを停止したせいでした。
具体的には、Windows Update サービスが止まっていたことに起因する事象だったはずです。(うろ覚え)

GCEsysprep に必要なサービスを故意に止めたことで発生したトラブルなので、仕様に反した結果と言える事象だったのでしょう。

スケジュール スナップショットが不定期にエラー

色々あったけど、無事にサーバーが複製できました。
これで検証を始めていくにあたり、これまでの苦労を水に流さないための定期バックアップを仕掛けました。
スケジュール スナップショット という機能ですね。

これが不定期にエラーするんです。
何故か分からずハマりましたが、最終的に仕様だという結論に達しました。
Windows の動作中に整合性の取れたバックアップを取得する機能があるのですが、OS が古かったり、ディスクを複数搭載していると不定期にエラーが発生するそうです。

https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-snapshots?hl=ja#vss_snapshot_failed

スケジュール スナップショットが不定期にエラー

こういう時はシェル芸ですよね。
今回は厳密にいえばスクリプト芸かもしれませんが、自分で作ったリトライの仕組みを用いてエラー対策をしました。

まとめ

まとめ

これまでの文章にも、意図的に 仕様 と書いてきました。
今回の取り組みで困ったことは、全て仕様なんですよね。
皆様におかれましては、困った時はまず仕様を確認して Google Cloud および Compute Engine を正しくお使いいただけますと幸いです。

クラウドエース株式会社 Google Cloud 認定トレーナーの廣瀬 隆博がお届けしました。また次の記事でお会いしましょう。

Discussion