google広告

リサーチパネル

Amazon Linux 2023に環境入替を行う

2023年9月23日

Amazon Linux 2023が正式リリース

Amazon Linux2の後継となるAmazon Linux 2023が正式リリースされました。
Amazon Linux2の保守期限は2025年6月30日までとなります。Amazon Linux2がCentOSベースでしたが Amazon Linux 2023からはFedoraベースとなっています。

  • リリースから5年間の無償サポート
  • 2年ごとのメジャーバージョンアップ
  • カーネルライブパッチが可能。リブート無しで脆弱性パッチが適用できる。

などなどアナウンスされていますね。
Amazon Linux2がCentOSベースでしたが、CentOSが8で事実上終了となってしまったので連動したサポート終了も自明の理ですね。
CentOSはCentOS8はサポート期間が短縮されて2021年末で終了、CentOS7も2024年6月までとなっています。
そういう意味ではAmazon Linux2は2018年6月の正式サポートから当初5年、結果延長され7年間の長期サポートになってるので良心的と言えると思います。
世の中ではAlma LinuxとRocky LinuxがポストCentOSの選択肢としではないかと言われていましたがAmazonはまさかのFedoraに着地となりました。
おじさんもFedora Core5まではよく使っていましたがその後はCentOSに乗り換えて結局、クラウドに行き着いたらAmazon Linux
、Amazon Linux2となっていた感じです。なんか紆余曲折の末、リフォームされた実家に出戻った気分です。
当初2022年後半にリリース予定となっていたAmazon Linux 2022当時の候補版が放流された時に一度、移行とかできるかは試していて例えSSHでRSA/SHA1がデフォルト無効化されているのでターミナルソフトもしくはサーバ側で設定変更とか最初のハマりポイントは確認していました。一通り動くかの確認もしてましたのでその結果を踏まえ最低限でサーバ移行していこうかと思います。

対象の環境

この機にECSにとかも考えなくもないのですが時間も無いので、とりあえずは日本IT伝統芸の「極力リフトみたいな?」のノリで行くことにします。
構成としては過去記事の通りですが、Dockerコンテナを動かすARMインスタンスをAutoScaling構成、データ永続領域はESFを使うという形です。

移行先インスタンスの用意

まずは移行先となるAmazon Linux 2023インスタンスを作成することにします。
以前の投稿記事から結構、マネージメントコンソールのUIが変わってるので備忘も兼ねて改めて画像も残しておきます。

インスタンス起動から画面遷移、とりあえず名前はご自由に

クィックスタートでAmazon Linuxを選択するとデフォルトでAmazon Linux 2023のAMIが選択されています。
アーキテクチャはデフォルトでは64bit(X86)になっているので自分は64bit(ARM)を選択します。

キーペアは今までと同じものを割り当ててます。
ネットワーク設定は実態に合わせて設定。今回は高度なネットワーク設定は行いません。

ストレージも移行前環境に合わせて最低限にします。

デフォルトでgp3になりました。

高度な詳細には今回以下の二つを設定。
・IAMインスタンスプロフィールに移行前と同じIAMロールを付与(モザイク部分)
・ユーザデータにSSMエージェントのインストールと自動起動設定、再起動のコマンドを付与
これでインスタンス作成後にマネージメントコンソールからOSにターミナル接続ができるようになります。
IAMインスタンスプロファイルに付与するIAMロールには「AmazonSSMManagedInstanceCore 」が含まれている必要があります。

ユーザデータに投入のコマンドはServerWorksさんのこちらの記事のコードを使わせてもらっています。
メタデータうまく使うと便利ですよね。

設定後にインスタンスの起動を押下しできあがれば接続からセッションマネージャの接続が可能になっています。もし繋がらない場合はキーペアを使ってSSH接続して見直しをしましょう。
ちなみに、あるあるなのが以下のような経路や権限の設定足りてないという感じです。

  • GWやNAT-GWで外部接続ができる環境になっていない。
  • 上記がいるけどうまく繋がらない時はパブリックIPが付与されてない。
  • 内部VPCとなっている場合はVPCエンドポイントが設定されていない
  • IAM権限が足りていないもしくは、EC2にプロファイル適用されていない

移行環境の設定

Amazon Linux2ではSElinuxはDIsableにしてまいましたが、Amazon Linux 2023では無効化せずデフォルトのenablesかつpermissiveで利用したいと思います。
基本的にSSMのセッションマネージャ接続なのでOpenSSL3のRSA/SHA1の有効化もしない方向で。
まずは時刻設定をUTCからJSTに変更。

#デフォルトはUTC
$ timedatectl
               Local time: Fri 2023-03-24 13:13:46 UTC
           Universal time: Fri 2023-03-24 13:13:46 UTC
                 RTC time: Fri 2023-03-24 13:13:47
                Time zone: n/a (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
$
$
$
#JSTに変更
$ sudo timedatectl set-timezone Asia/Tokyo
$
$
$ date
Fri Mar 24 22:14:00 JST 2023
$
$
$ timedatectl
               Local time: Fri 2023-03-24 22:14:05 JST
           Universal time: Fri 2023-03-24 13:14:05 UTC
                 RTC time: Fri 2023-03-24 13:14:06
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
$

パッケージの更新確認と更新の実施

#更新版リポジトリ確認。作業時点では更新リポジトリ無し。
$ sudo dnf check-release-update

#作業時点ではパッケージの更新無し
$ sudo dnf -y update
Last metadata expiration check: 5:41:00 ago on Fri Mar 24 16:44:25 2023.
Dependencies resolved.
Nothing to do.
Complete!

efsボリュームのマウント

# esf-utilのインストール
sudo dnf install -y amazon-efs-utils
Last metadata expiration check: 5:49:35 ago on Fri Mar 24 16:44:25 2023.
Dependencies resolved.
==========================================================================================================================================
 Package                            Architecture              Version                                 Repository                     Size
==========================================================================================================================================
Installing:
 amazon-efs-utils                   noarch                    1.34.5-1.amzn2023                       amazonlinux                    56 k
Installing dependencies:
 stunnel                            aarch64                   5.58-1.amzn2023.0.2                     amazonlinux                   154 k

Transaction Summary
==========================================================================================================================================
Install  2 Packages

Total download size: 210 k
Installed size: 783 k
Downloading Packages:
(1/2): amazon-efs-utils-1.34.5-1.amzn2023.noarch.rpm                                                      597 kB/s |  56 kB     00:00
(2/2): stunnel-5.58-1.amzn2023.0.2.aarch64.rpm                                                            1.3 MB/s | 154 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                     1.1 MB/s | 210 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                  1/1
  Installing       : stunnel-5.58-1.amzn2023.0.2.aarch64                                                                              1/2
  Running scriptlet: stunnel-5.58-1.amzn2023.0.2.aarch64                                                                              1/2
  Installing       : amazon-efs-utils-1.34.5-1.amzn2023.noarch                                                                        2/2
  Running scriptlet: amazon-efs-utils-1.34.5-1.amzn2023.noarch                                                                        2/2
  Verifying        : amazon-efs-utils-1.34.5-1.amzn2023.noarch                                                                        1/2
  Verifying        : stunnel-5.58-1.amzn2023.0.2.aarch64                                                                              2/2

Installed:
  amazon-efs-utils-1.34.5-1.amzn2023.noarch                              stunnel-5.58-1.amzn2023.0.2.aarch64

Complete!

# efsのマウントディレクトリを作成
$ sudo mkdir /efs

# /etc/fstabに efsボリュームのマウント定義を追加
$ sudo vi /etc/fstab
#以下の定義を追記して保存
【EFS ファイルシステム ID】:/           /efs            efs     defaults,_netdev  0 0

# efsボリュームをマウント
$ sudo mount /efs

# マウントの確認
$ df -h
#以下のような表示があること
【EFS ファイルシステム ID】.efs.ap-northeast-1.amazonaws.com:/  x.xE  x.xG  x.xE   1% /efs

dockerのインストールとdocker-composeを設定

$ sudo dnf -y install docker
Last metadata expiration check: 6:06:22 ago on Fri Mar 24 16:44:25 2023.
Dependencies resolved.
==========================================================================================================================================
 Package                                Architecture            Version                                 Repository                   Size
==========================================================================================================================================
Installing:
 docker                                 aarch64                 20.10.17-1.amzn2023.0.6                 amazonlinux                  31 M
Installing dependencies:
 containerd                             aarch64                 1.6.8-2.amzn2023.0.4                    amazonlinux                  21 M
 iptables-libs                          aarch64                 1.8.8-3.amzn2023.0.2                    amazonlinux                 424 k
 iptables-nft                           aarch64                 1.8.8-3.amzn2023.0.2                    amazonlinux                 185 k
 libcgroup                              aarch64                 3.0-1.amzn2023.0.1                      amazonlinux                  77 k
 libnetfilter_conntrack                 aarch64                 1.0.8-2.amzn2023.0.2                    amazonlinux                  58 k
 libnfnetlink                           aarch64                 1.0.1-19.amzn2023.0.2                   amazonlinux                  30 k
 libnftnl                               aarch64                 1.2.2-2.amzn2023.0.2                    amazonlinux                  83 k
 pigz                                   aarch64                 2.5-1.amzn2023.0.3                      amazonlinux                  78 k
 runc                                   aarch64                 1.1.3-1.amzn2023.0.2                    amazonlinux                 2.8 M

Transaction Summary
==========================================================================================================================================
Install  10 Packages

Total download size: 56 M
Installed size: 256 M
Downloading Packages:
(1/10): libnetfilter_conntrack-1.0.8-2.amzn2023.0.2.aarch64.rpm                                           630 kB/s |  58 kB     00:00
(2/10): libnftnl-1.2.2-2.amzn2023.0.2.aarch64.rpm                                                         696 kB/s |  83 kB     00:00
(3/10): iptables-libs-1.8.8-3.amzn2023.0.2.aarch64.rpm                                                    3.1 MB/s | 424 kB     00:00
(4/10): libnfnetlink-1.0.1-19.amzn2023.0.2.aarch64.rpm                                                    783 kB/s |  30 kB     00:00
(5/10): pigz-2.5-1.amzn2023.0.3.aarch64.rpm                                                               1.2 MB/s |  78 kB     00:00
(6/10): iptables-nft-1.8.8-3.amzn2023.0.2.aarch64.rpm                                                     1.7 MB/s | 185 kB     00:00
(7/10): libcgroup-3.0-1.amzn2023.0.1.aarch64.rpm                                                          1.1 MB/s |  77 kB     00:00
(8/10): runc-1.1.3-1.amzn2023.0.2.aarch64.rpm                                                              15 MB/s | 2.8 MB     00:00
(9/10): containerd-1.6.8-2.amzn2023.0.4.aarch64.rpm                                                        62 MB/s |  21 MB     00:00
(10/10): docker-20.10.17-1.amzn2023.0.6.aarch64.rpm                                                        73 MB/s |  31 MB     00:00
------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                      72 MB/s |  56 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                  1/1
  Installing       : runc-1.1.3-1.amzn2023.0.2.aarch64                                                                               1/10
  Installing       : containerd-1.6.8-2.amzn2023.0.4.aarch64                                                                         2/10
  Running scriptlet: containerd-1.6.8-2.amzn2023.0.4.aarch64                                                                         2/10
  Installing       : libcgroup-3.0-1.amzn2023.0.1.aarch64                                                                            3/10
  Installing       : libnfnetlink-1.0.1-19.amzn2023.0.2.aarch64                                                                      4/10
  Installing       : libnetfilter_conntrack-1.0.8-2.amzn2023.0.2.aarch64                                                             5/10
  Installing       : iptables-libs-1.8.8-3.amzn2023.0.2.aarch64                                                                      6/10
  Installing       : pigz-2.5-1.amzn2023.0.3.aarch64                                                                                 7/10
  Installing       : libnftnl-1.2.2-2.amzn2023.0.2.aarch64                                                                           8/10
  Installing       : iptables-nft-1.8.8-3.amzn2023.0.2.aarch64                                                                       9/10
  Running scriptlet: iptables-nft-1.8.8-3.amzn2023.0.2.aarch64                                                                       9/10
  Running scriptlet: docker-20.10.17-1.amzn2023.0.6.aarch64                                                                         10/10
  Installing       : docker-20.10.17-1.amzn2023.0.6.aarch64                                                                         10/10
  Running scriptlet: docker-20.10.17-1.amzn2023.0.6.aarch64                                                                         10/10
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /usr/lib/systemd/system/docker.socket.

  Verifying        : libnftnl-1.2.2-2.amzn2023.0.2.aarch64                                                                           1/10
  Verifying        : iptables-libs-1.8.8-3.amzn2023.0.2.aarch64                                                                      2/10
  Verifying        : libnetfilter_conntrack-1.0.8-2.amzn2023.0.2.aarch64                                                             3/10
  Verifying        : iptables-nft-1.8.8-3.amzn2023.0.2.aarch64                                                                       4/10
  Verifying        : pigz-2.5-1.amzn2023.0.3.aarch64                                                                                 5/10
  Verifying        : libnfnetlink-1.0.1-19.amzn2023.0.2.aarch64                                                                      6/10
  Verifying        : containerd-1.6.8-2.amzn2023.0.4.aarch64                                                                         7/10
  Verifying        : runc-1.1.3-1.amzn2023.0.2.aarch64                                                                               8/10
  Verifying        : libcgroup-3.0-1.amzn2023.0.1.aarch64                                                                            9/10
  Verifying        : docker-20.10.17-1.amzn2023.0.6.aarch64                                                                         10/10

Installed:
  containerd-1.6.8-2.amzn2023.0.4.aarch64     docker-20.10.17-1.amzn2023.0.6.aarch64  iptables-libs-1.8.8-3.amzn2023.0.2.aarch64
  iptables-nft-1.8.8-3.amzn2023.0.2.aarch64   libcgroup-3.0-1.amzn2023.0.1.aarch64    libnetfilter_conntrack-1.0.8-2.amzn2023.0.2.aarch64
  libnfnetlink-1.0.1-19.amzn2023.0.2.aarch64  libnftnl-1.2.2-2.amzn2023.0.2.aarch64   pigz-2.5-1.amzn2023.0.3.aarch64
  runc-1.1.3-1.amzn2023.0.2.aarch64

Complete!

# dockerの起動と自動起動の有効化
$ sudo systemctl start docker
$ sudo systemctl enable docker

# dockerグループにec2-userを追加。 ec2-userで追加した場合は、一旦exitして再度ec2-userにチェンジ
$ sudo usermod -a -G docker ec2-user

# ARMインスタンスのdocker-compose対応
$ sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose status
Unable to find image 'ghcr.io/linuxserver/docker-compose:latest' locally
latest: Pulling from linuxserver/docker-compose
df42d0a7b694: Pull complete
2601eb96bfaa: Pull complete
7421ed24fad5: Pull complete
42be308edb70: Pull complete
5c32b41951cf: Pull complete
c99a224c9dd5: Pull complete
f171060ef457: Pull complete
e9ffb8de2a6d: Pull complete
9fe9f2489158: Pull complete
32704cfd08c0: Pull complete
Digest: sha256:8dc71d6ac5e20f1c023476ff9d0e06184b6a9462a526f9751dbc5eef486f78c6
Status: Downloaded newer image for ghcr.io/linuxserver/docker-compose:latest
/usr/local/bin/docker-compose-entrypoint.sh: 20: exec: status: not found
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
 

移行元環境での保全と移行データ抽出

移行のために移行元データの保全とデータの抽出を行います。
自分はALBでSorryページ表示させてまずはアクセスを遮断しましが、そちらは割愛します。
まずは dockerイメージをcommitします。

# コンテナ IDは dcoker psで稼働しているコンテナを確認
$ docker commmit 【コンテナ ID】 【commite断面のコンテナ名】:【タグ】
$ dcocker images
# commiteで作成したコンテナイメージが登録されていることを確認 

動作している dockerコンテナを停止します。

# docker-compose.ymlのあるディレクトリに移動してコンテナの停止を実行
$ docker-compose stop

移行するdockerイメージをファイルに出力します。
efsボリュームを指定して出力します。

$ docker save -o 【コンテナ名】.tar 【commite断面のコンテナ名】:【タグ】

永続データボリュームを退避しておきます。
docker-compose.ymlのあるディレクトリに移動して永続ボリュームを退避しておきます。

  $ sudo tar czvf /【efsボリューム】/【ディレクトリ名】.tar.gz 【永続ボリュームディレクトリ】

移行先環境でdockerイメージ取り込みと起動を実施

efsボリュームに移動して出力したdockerイメージを取り込みます。

$ docker load -i 【ディレクトリ名】.tar.gz
$ docker images
# 出力したdockerイメージが登録されていることを確認します。

docker-compose.ymlのあるディレクトリに移動して コンテナ環境を起動します。
upで構築までは行わず、startで起動のみを行います。
起動が可能なことを確認したら、一旦停止しておきます。

$ docker-compose start
$ docker-compose ps
# 正常に起動しているかを確認する。
$ docker-compose stop

AutoScalingグループへの入替

AutoScalingグループをAmazon Linux 2からAmazon Linux 2023のイメージに入れ替えるためdockerの起動まで実施したEC2インスタンスでAMIイメージを作成します。
イメージを作成したら起動テンプレートを作成します。
既存の起動テンプレートを以下のようにコピーして編集します。

利用するAMIを作成したAMIに差し替え、テンプレートのバージョンを作成を押下します。

反映後、起動テンプレートのデフォルトバージョンを編集したバージョンに変更します。

AutoScalingグループを確認し、起動テンプレートのAMI IDが新しいものに入れ替わっていることを確認します。

ロードバランサのターゲットグループも移行元環境を外します入れ替えます。
ちなみに、自分の設定はALBのヘルスチェックをAutoScalingの条件に入れてません。
入れている場合は先に一時的に条件から外してください。
AutoScalingグループのインスタン管理から現在稼働している移行元環境をデタッチします。

最低稼働数を下回るため、起動テンプレートから新しいインスタンスが自動的に作成されALBにも登録されるか確認します。
起動したEC2インスタンスにセッションマネージャから接続しコンテナの状態を確認し問題なければALBのSorryページを解除して終了です。