AWSで詰まったところ|EC2のボリューム拡張・Lightsail接続・LambdaのGLIBCエラー
/ 6 min read
Table of Contents
はじめに
AWSで実際に手間取った場面と、その対処をまとめました。
EC2のボリュームを拡張しても容量が増えない
管理画面でボリュームのサイズを変更しただけでは、**OSから見える容量は増えません。**拡張は3段階に分かれています。
- AWS側でボリュームのサイズを変更する
- パーティションを拡張する
- ファイルシステムを拡張する
管理画面の操作は1番目だけで、2と3はサーバー側で実行する必要があります。「サイズを変えたのに df の表示が変わらない」というのは、この2つが残っているためです。
1. 管理画面でサイズを変更する
EC2 > Volumes > 対象のボリューム > Modify volume からサイズを変更します。
2. パーティションを拡張する
$ sudo growpart /dev/xvda 1デバイス名とパーティション番号の間にスペースが必要です。現在の構成は lsblk で確認できます。
$ lsblk3. ファイルシステムを拡張する
**ファイルシステムの種類によってコマンドが違います。**まず種類を確認してください。
$ df -hTType の列を見て、対応するコマンドを実行します。
| ファイルシステム | コマンド |
|---|---|
| xfs | sudo xfs_growfs / |
| ext4 | sudo resize2fs /dev/xvda1 |
Amazon Linux 2 の既定は xfs です。Ubuntuでは ext4 のことが多くなります。
# 拡張後の確認$ df -hTLightsailに Tera Term で接続できない
Amazon Linux 2023 のLightsailインスタンスに、Tera Term 4系から接続しようとすると失敗することがあります。
Tera Term 5系にすると接続できます。
原因は、新しいOSがサポートする暗号アルゴリズムに、古いクライアントが対応していないことです。OS側が古い方式を無効化しているため、クライアントを更新する以外に安全な解決策はありません。
Lambda で GLIBC のバージョンエラーが出る
Lambda上でPythonのライブラリを使おうとしたときに出るエラーです。
ImportError: /lib64/libc.so.6: version `GLIBC_2.28' not found(required by /opt/python/lxml/etree.cpython-310-x86_64-linux-gnu.so)原因は、手元の環境でビルドされたバイナリが、Lambdaの実行環境と合っていないことです。ネイティブコードを含むライブラリ(lxml など)で起きます。
Lambdaの実行環境に合うバイナリを指定してインストールし、レイヤーとしてまとめます。
$ mkdir python$ python3 -m pip install \ --platform manylinux2014_x86_64 \ --implementation cp \ --only-binary=:all: \ --upgrade \ -t ./python \ パッケージ名$ zip -r layer.zip ./python作成した layer.zip を、Lambdaのレイヤーとしてアップロードします。
各オプションの意味です。
| オプション | 意味 |
|---|---|
--platform manylinux2014_x86_64 |
Lambdaの実行環境向けのバイナリを取得する |
--implementation cp |
CPython向けを指定する |
--only-binary=:all: |
ソースからのビルドを禁止する(必ずビルド済みを使う) |
-t ./python |
展開先のディレクトリを指定する |
おわりに
どれも「手元では動くのにAWS上では動かない」という形で表面化する問題です。環境の違いがどこにあるか(OSのバージョン、ファイルシステム、CPUアーキテクチャ)を確認するのが、いちばんの近道になります。
