この記事を読むのに必要な時間は約 10 分です。
最初の記事を書いてから今年で10年になります。ブログを頑張って書いていたのも最初の数年で今は定期的な更新はしていませんが、消すのもなんだかなーと思ってとりあえず維持しています。
一方でWordPressのサイトを維持するのにもコストがかかっている状態です。昔はブログからの収益でコストはそこまで気にする必要はありませんでしたが、今は1円も収益がないのでコストは単純にマイナスです。
現状紆余曲折あり、サイトはGoogle CloudのGCE上で稼働させていますがなにもしなくても毎月2,000円ぐらいかかってます。

このコストを無くすために現在日本リージョンで稼働しているサイトをUSリージョンへ移行し、GCEの無料枠内でのみの運用にしようというのが今回の趣旨になります。
Google Cloudには一定までは無料で利用が可能な無料枠が各サービス毎に定義されています。GCEの場合はUSのリージョンかつ最小構成のマシンタイプだと無料で利用可能です。

現状もマシンタイプは e2-micro にしているのですが、リージョンが asia-northeast1-a となっており無料枠の条件に合致していませんでした。通常リージョンはサービスを利用する層が最も多い地域を選択します。リージョンは物理的なサーバーの配置する地域でここが利用者と近くないと通信で物理的な距離による時間がかかってしまいます。
簡単にいうとサイト表示が全体的に遅くなります。そのため今までは日本のリージョンを選択していましたが、特に誰かに見られているわけでもないため、サイト表示速度は考える必要がなくそれなら無料枠のUSリージョンにしようという考え。
移行手順
移行方法に関してはClaudeに聞いたらサクッと教えてくれました。簡単に記載すると以下のステップです。
- スナップショットで現環境を保存
- 米国リージョンに新しいディスクを作成
- 米国リージョンにe2-microインスタンスを作成
- 動作確認
- Static IPを取得してDNS切り替え
- 旧インスタンスを停止・削除
実際に作業するとこれよりもう少し考慮事項が必要でしたが、今回の作業内容を備忘として残しておきます。
1. スナップショットで現環境を保存
まず、日本リージョンで動いているディスクの名称を確認し、スナップショットを取ります。これにより日本リージョンのGCEのコピー環境を作ることが可能になります。
# 現在のディスク名を確認
gcloud compute disks list
# スナップショット作成
gcloud compute disks snapshot [ディスク名] \
--snapshot-names=wordpress-migration \
--zone=asia-northeast1-a
2. 米国リージョンに新しいディスクを作成
先ほど作成したスナップショットをソースとしてUSリージョンにディスクを作成します。これによりUSリージョン上でワードプレスのデータが入ったストレージを利用することが可能になります。
# スナップショットから新リージョンにディスク作成
gcloud compute disks create wordpress-us \
--source-snapshot=wordpress-migration \
--zone=us-central1-a \
--type=pd-standard
3. 米国リージョンにe2-microインスタンスを作成
先ほど作成したディスクをアタッチした上でUSリージョンにGCEのインスタンスを作成します。無料枠になるようにマシンタイプは e2-micro を指定しています。
gcloud compute instances create wordpress-us \
--zone=us-central1-a \
--machine-type=e2-micro \
--disk=name=wordpress-us,boot=yes
ここまでの作業でUSリージョンへのコピー自体は完了となります。
4. 動作確認
実際にサイトができているかを確認するためにブラウザからアクセスが可能な外部IPアドレスを確認します。
# 新インスタンスのIPを確認
gcloud compute instances describe wordpress-us \
--zone=us-central1-a \
--format='get(networkInterfaces[0].accessConfigs[0].natIP)'
ここで表示されたIPアドレスに http で接続を試します。実際にはこの段階ではhttpでは表示されません。ネットワークのファイアーウォールで80番のポートを許可していないためです。そのため、追加作業でファイアーウォール設定を行います。
80を許可するルールを作成し、アタッチします。おそらくはデフォルトのルールもあるのでそちらを利用できる場合は新規に作る必要はないです。
デフォルトのルールは以下のコマンドで確認できます。
gcloud compute firewall-rules list
作成のコマンドとアタッチのコマンドは以下です。
gcloud compute firewall-rules create allow-http \
--allow=tcp:80 \
--target-tags=http-server \
--description="Allow HTTP traffic"
# インスタンスにタグを付与
gcloud compute instances add-tags wordpress-us \
--zone=us-central1-a \
--tags=http-server
これでhttpでの接続が確認できます。

5. Static IPを取得してDNS切り替え
続いて作成直後は外部IPはエフェラメルとなっており変化する可能性があるため、静的IPを取得してアタッチします。
# 静的IPを予約
gcloud compute addresses create wordpress-static-ip \
--region=us-central1
# インスタンスに割り当て
gcloud compute instances delete-access-config wordpress-us \
--zone=us-central1-a \
--access-config-name="external-nat"
# 静的IPの確認
gcloud compute addresses list --region=us-central1
# 静的IPのアタッチ
gcloud compute instances add-access-config wordpress-us \
--zone=us-central1-a \
--address=[取得した静的IP]
DNSの切り替えは自信が管理しているサービスで行ってください。私はCloud DNSで管理しているのでCloud DNS上でAレコードを取得した静的IPに変更しています。
ここまで作業をするとhttpの状態のドメインでUSリージョンへのアクセスが可能となります。
httpsで接続するには443のポート開放が必要なため、またファイアーウォールルールの設定を行います。
# ファイアウォールにHTTPS追加
gcloud compute firewall-rules create allow-https \
--allow=tcp:443 \
--target-tags=https-server \
--description="Allow HTTPS traffic"
# インスタンスにタグ付与
gcloud compute instances add-tags wordpress-us \
--zone=us-central1-a \
--tags=https-server
その後、SSL証明書を取り直します。
gcloud compute ssh wordpress-us --zone=us-central1-a
# Let's Encryptの場合
sudo certbot --apache -d takeiho.com -d www.takeiho.com
これで完全に移行が完了となります。
6. 旧インスタンスを停止・削除
最後に日本リージョンのインスタンスを停止または削除して完了です。即削除は心理的に少し怖いので一旦は停止のみにしておきます。

