Amazon Linux 2023に環境入替を行う
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)を選択します。
キーペアは今までと同じものを割り当ててます。
ネットワーク設定は実態に合わせて設定。今回は高度なネットワーク設定は行いません。
ストレージも移行前環境に合わせて最低限にします。
高度な詳細には今回以下の二つを設定。
・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ページを解除して終了です。
ディスカッション
コメント一覧
まだ、コメントがありません