#はじめに
趣味でEC2のサーバを低コストで立てる場合、無料枠を使うのが一般的だと思います。しかしながら、12か月の期間縛りがあります。実際に、立ててしばらく使っているうちに興味が失せて、放置したまま1年たってしまい、AWSから請求があって、今更使っていないしもったいないからインスタンス削除 ということを2回繰り返してしまいました。
3回目にも同じことしてはならないと思っていたところ、t4gインスタンスが発表され、なんと価格は、ムンバイで0.0028 USD(t4g.nano)ではありませんか。これなら、ストレージの金額合わせても月に300円程度なので、まったく使わくなっても許せると思い、さっそく立ててみました。
立て方は、通常のインスタンスと変わりませんが、t4gはarmのコアなのでソフトのインストールは少し注意が必要です。
#EC2インスタンスを立てる
EC2インスタンスを立てる方法は、いろいろなところで紹介されているので、ここでは詳細は割愛します。
https://dev.classmethod.jp/articles/creation_vpc_ec2_for_beginner_2/
などが参考になると思います。
インスタンス作成のポイントは以下となります。
‐ アジアパシフィック (ムンバイ) リージョン を選択する
- マシンイメージでArmのものを選択する
- クレジットの消費タイプをStandard Mode(スタンダードモード)にする
###アジアパシフィック (ムンバイ) リージョン を選択する
コスト下げるのが目的なので、作業始める前に、ムンバイリージョンを選択してください(東京リージョンだと倍くらいの価格になります)。これ忘れると作業最初からやり直しになります。
###マシンイメージでArmのものを選択する
マシンイメージで、Armのものを選択する必要があります。Amazon Linuxなら右のほうにラジオボタンがあるので、そちらを選びます。
これでインスタンスタイプとして、t4g.nano が選択できるようになります。
###クレジットの消費タイプをStandard Mode(スタンダードモード)にする
t4g.nanoはクレジットタイプがデフォルトで無制限になっています。このままだとCPU使いすぎると課金が増えてしまいます(趣味で使っていて超えることは普通ないと思いますが、事故もありうるので)。以下のように、ステップ3:インスタンスの詳細の設定で、クレジット仕様の無制限チェックボックスを未選択にします。
あとは普通に起動すれば、ムンバイにt4g.nanoインスタンスが起動します。
1か月使った料金はこんな感じです。内訳はEC2 が$2でEBSが$1くらいです。
以下は、nginxとPostgreSQLを(ほぼ空で)起動した状態のtopコマンドになります。メモリが0.5Gしかないですが、これくらいの用途ならまだまだ余裕ですね。
#ソフトのインストール
Armのインスタンスで考慮しなければならないのが、ソフトのインストールです。公式サイトには、バイナリがないことも多いです。その場合、以下の方法があります。
- amazon-linux-extras コマンドを使う
- ソースからビルドを行う
amazon-linux-extrasの方が楽なので、こちらでインストールできるものはこちらで行い、そうでないものはソースからビルドすることになると思います。
###amazon-linux-extras コマンドを使う
2021年7月4日現在、amazon-linux-extrasでは以下が利用できるようです。
[ec2-user@***]$ amazon-linux-extras
0 ansible2 available [ =2.4.6 =2.8 =stable ]
1 httpd_modules available [ =1.0 =stable ]
2 memcached1.5 available \
[ =1.5.1 =1.5.16 =1.5.17 ]
4 postgresql9.6 available [ =9.6.8 =stable ]
5 postgresql10 available [ =10 =stable ]
7 R3.4 available [ =3.4.3 =stable ]
8 rust1 available [ =stable ]
11 php7.2 available \
[ =7.2.13 =7.2.14 =7.2.16 =7.2.17 =7.2.19 =7.2.21
=7.2.22 =7.2.23 =7.2.24 =7.2.26 =stable ]
13 lamp-mariadb10.2-php7.2 available \
[ =10.2.10_7.2.11 =10.2.10_7.2.14 =10.2.10_7.2.16
=10.2.10_7.2.17 =10.2.10_7.2.19 =10.2.10_7.2.22
=10.2.10_7.2.23 =10.2.10_7.2.24 =stable ]
14 libreoffice available [ =5.3.6.1 =stable ]
16 docker=latest enabled \
[ =18.06.1 =18.09.9 =stable ]
17 mate-desktop1.x available [ =stable ]
18 GraphicsMagick1.3 available \
[ =1.3.29 =1.3.32 =1.3.34 =stable ]
19 tomcat8.5 available \
[ =8.5.32 =8.5.38 =8.5.40 =8.5.42 =8.5.50 =stable ]
20 epel available [ =7.11 =stable ]
21 testing available [ =1.0 =stable ]
22 ecs available [ =stable ]
23 corretto8 available \
[ =1.8.0_202 =1.8.0_212 =1.8.0_222 =1.8.0_232 =1.8.0_242
=stable ]
24 golang1.11 available \
[ =1.11.3 =1.11.11 =1.11.13 =stable ]
25 squid4 available [ =4 =stable ]
26 php7.3 available \
[ =7.3.2 =7.3.3 =7.3.4 =7.3.6 =7.3.8 =7.3.9 =7.3.10
=7.3.11 =7.3.13 =stable ]
27 java-openjdk11 available [ =11 =stable ]
28 lynis available [ =stable ]
29 kernel-ng available [ =stable ]
30 BCC available [ =0.x =stable ]
31 nginx1=latest enabled [ =stable ]
32 ruby2.6 available [ =2.6 =stable ]
33 mock available [ =stable ]
34 postgresql11 available [ =11 =stable ]
35 php7.4 available [ =stable ]
36 python3.8 available [ =stable ]
37 lustre2.10 available [ =stable ]
38 haproxy2 available [ =stable ]
39 collectd available [ =stable ]
40 R4 available [ =stable ]
41 kernel-5.4 available [ =stable ]
42 selinux-ng available [ =stable ]
43 php8.0 available [ =stable ]
44 tomcat9 available [ =stable ]
45 unbound1.13 available [ =stable ]
46 mariadb10.5 available [ =stable ]
47 kernel-5.10 available [ =stable ]
48 redis6 available [ =stable ]
49 ruby3.0 available [ =stable ]
50 postgresql12 available [ =stable ]
51 postgresql13 available [ =stable ]
52 mock2 available [ =stable ]
nginxは31にあるので、
$sudo amazon-linux-extras enable nginx1
$yum clean metadata
$yum install nginx
でインストールできます。また、PostgreSQLも同様にインストールしました。
PostgreSQLインストールは、下記を参考にしました。
https://www.pedroalonso.net/blog/hosting-postgresql-on-a-t4g-graviton2-arm-instance-on-aws-ec2
###ソースからビルドを行う
公式にもamazon-linux-extrasにもない場合、ソースからインストールすることになります。試しに、nginxを、以下を参考にインストールしてみたところ、比較的簡単にインストールできました。
https://blog.k-san.info/nginx-on-centos-on-raspberrypi
raspberry piへのインストール手順が参考になることが多いと思います
#最後に
このインスタンスを使って、Angularで作ったサービスを2か月ほど運用していますが、目立った問題は出ていません。メモリ0.5GBというと今ではすごく貧弱なサーバに思えてしまいますが、20年前なら、これくらいでも結構大規模なWebアプリケーションを運用していたスペックだと思います。個人でなら十分遊べるスペックと思います。