GCPのVMを新しいOSのVMに移行しました

GCP

これまでGoogle Cloud Platform(GCP)を利用しているのですが、Googleから「あなたがGoogle Compute Engine (GCE)のVMで使っているUbuntu 18.04 LTSが2023年5月31日にEOLになるので、Ubuntu 20.04 LTSまたはUbuntu Pro 18.04 LTSに移行してください。」とリマインドがありました。もうそんな時期なのかと早めに移行を実施しました。

移行手順を考える

考えてみた移行手順は以下の通りです。

  1. バックアップとして現在のGCEのVMインスタンスのブートディスクのスナップショットをとる。
  2. 新しいVMインスタンスをUbuntu 20.04 LTSでセットアップする。
  3. スナップショットから新規のディスクを作成し、新しいVMインスタンスにマウント
  4. アプリケーションやデータをマウントしたディスクから移行
  5. 新しいOpsエージェントに切り替えていなかったので切り替え
  6. 動作確認
  7. 旧VMインスタンスの削除
  8. スナップショットとそれから作成したディスクはしばらく残しておいて問題なければ削除

ほぼGCPのGUIでできるのですが、初めて行なったところだけメモしておきます。

VMに新規のディスクをマウント

スナップショットから作成した新規のディスクをVMに接続したあと、mountするためのデバイス名はどこだろうと探したところ以下のコマンドでした。

$ sudo lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0     7:0    0  55.6M  1 loop /snap/core18/2697
loop1     7:1    0  63.3M  1 loop /snap/core20/1822
loop2     7:2    0 337.9M  1 loop /snap/google-cloud-cli/111
loop3     7:3    0  91.9M  1 loop /snap/lxd/24061
loop4     7:4    0  49.9M  1 loop /snap/snapd/18357
loop5     7:5    0  49.9M  1 loop /snap/snapd/18596
loop6     7:6    0  55.6M  1 loop /snap/core18/2721
loop7     7:7    0  63.3M  1 loop /snap/core20/1852
loop8     7:8    0 333.4M  1 loop /snap/google-cloud-cli/119
sda       8:0    0    20G  0 disk 
├─sda1    8:1    0  19.9G  0 part /
├─sda14   8:14   0     4M  0 part 
└─sda15   8:15   0   106M  0 part /boot/efi
sdb       8:16   0    20G  0 disk 
├─sdb1    8:17   0  19.9G  0 part 
├─sdb14   8:30   0     4M  0 part 
└─sdb15   8:31   0   106M  0 part 

デバイス名がわかればあとはマウントするだけです。

$ sudo mount -o discard,defaults /dev/sdb1 /mnt/disks/old-boot
$ sudo lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0     7:0    0  55.6M  1 loop /snap/core18/2697
loop1     7:1    0  63.3M  1 loop /snap/core20/1822
loop2     7:2    0 337.9M  1 loop /snap/google-cloud-cli/111
loop3     7:3    0  91.9M  1 loop /snap/lxd/24061
loop4     7:4    0  49.9M  1 loop /snap/snapd/18357
loop5     7:5    0  49.9M  1 loop /snap/snapd/18596
loop6     7:6    0  55.6M  1 loop /snap/core18/2721
loop7     7:7    0  63.3M  1 loop /snap/core20/1852
loop8     7:8    0 333.4M  1 loop /snap/google-cloud-cli/119
sda       8:0    0    20G  0 disk 
├─sda1    8:1    0  19.9G  0 part /
├─sda14   8:14   0     4M  0 part 
└─sda15   8:15   0   106M  0 part /boot/efi
sdb       8:16   0    20G  0 disk 
├─sdb1    8:17   0  19.9G  0 part /mnt/disks/old-boot
├─sdb14   8:30   0     4M  0 part 
└─sdb15   8:31   0   106M  0 part 
$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/root       20134592  3388824  16729384  17% /
devtmpfs          490268        0    490268   0% /dev
tmpfs             494588        0    494588   0% /dev/shm
tmpfs              98920     1056     97864   2% /run
tmpfs               5120        0      5120   0% /run/lock
tmpfs             494588        0    494588   0% /sys/fs/cgroup
/dev/loop0         56960    56960         0 100% /snap/core18/2697
/dev/loop1         64896    64896         0 100% /snap/core20/1822
/dev/loop2        345984   345984         0 100% /snap/google-cloud-cli/111
/dev/loop3         94080    94080         0 100% /snap/lxd/24061
/dev/loop4         51072    51072         0 100% /snap/snapd/18357
/dev/sda15        106858     6161    100697   6% /boot/efi
/dev/loop5         51072    51072         0 100% /snap/snapd/18596
/dev/loop6         56960    56960         0 100% /snap/core18/2721
/dev/loop7         64896    64896         0 100% /snap/core20/1852
/dev/loop8        341376   341376         0 100% /snap/google-cloud-cli/119
tmpfs              98916        0     98916   0% /run/user/1003
tmpfs              98916        0     98916   0% /run/user/1001
/dev/sdb1       20134592 10285880   9832328  52% /mnt/disks/old-boot
$

LoggingエージェントからOpsエージェントへの移行

旧システムではアプリケーションのログをLoggingエージェントでStackDriver Loggingに読み込んで、BigQueryにシンクしていたのですが、Loggingエージェントの後継がCloud LoggingのOpsエージェントになったようです。今後のこともあるので、新しいOpsエージェントに置き換えてみました。

旧システムのLoggingエージェントで追加設定していたファイルは以下の内容でした。

$ cat /etc/google-fluentd/config.d/wowhoneypot.conf
<source>
  @type tail
  format /^\[(?<time>[^\]]*)\] (?<clientip>[^ ]*) (?<hostname>[^ ]*) "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<status>[^ ]*) (?<mrrid>[^ ]*) (?<requestbody>[^ ]*)$/
  time_format %Y-%m-%d %H:%M:%S%z
  path /opt/wowhoneypot/log/access_log
  pos_file /var/lib/google-fluentd/pos/wowhoneypot.pos
  read_from_head true
  tag wowhoneypot-access
</source>

Opsエージェントは全く内容が異なるので、いろいろ試して以下の設定ファイルに落ち着きました。

$ cat /etc/google-cloud-ops-agent/config.yaml 
logging:
  receivers:
    wowhoneypot-access:
      type: files
      include_paths:
      - /opt/wowhoneypot/log/access_log
      record_log_file_path: true
  service:
    pipelines:
      default_pipeline:
        receivers: []
      wow_pipeline:
        receivers: [wowhoneypot-access]
        processors: [wow_parse]
  processors:
    wow_parse:
    type: parse_regex
    regex: "^\[(?<time>[^\]]*)\] (?<clientip>[^ ]*) (?<hostname>[^ ]*) \"(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?\" (?<status>[^ ]*) (?<mrrid>[^ ]*) (?<requestbody>[^ ]*)$"
    time_key:    time
    time_format: "%Y-%m-%d %H:%M:%S%z"

これでデータがCloud Loggingに取り込まれ、BigQueryにもシンクしていることが確認できたので、Opsエージェントへの移行も完了です。

gcp-gce-logexploer.png

まとめ

GCPなどのクラウドは変化が激しく、いつの間にか周りの仕組みが新しくなっているので久しぶりのシステム移行でやや戸惑いましたが、簡単な操作でさまざまな設定や操作もでき、マニュアルもある程度は揃っているのでやはりGCPは便利かなと思います。

タイトルとURLをコピーしました