自転車操業になりつつある「初老丸の独り Advent calendar 2015」の十八日目の記事です。
tl;dr
先日、EC2 インスタンスの t2 ブラザーズに新しい弟が増えた。その名は t2.nano(ナノ)。五男なナノは最もスペックは低い位置づけだが個人的にはコストを抑えられるという点でとても有り難い発表ナノ。
え、そうなの?
ということで、t2.nano がどの程度の実力なのか自分がやりたいことが出来るのか目線で試してみることにした。
尚、上記のブログ記事がとても参考になった。以下の内容はほぼ上記の記事を自分なりに纏めたものになるので、詳細については上記の記事を参照されたし。
え、そうなの?
t2.nano のスペック
- 1vCPU
- 512MB メモリ
- 最大2つの ENI をサポート
- 30 CPU クレジット
t2.nano ってなんぼ?
- t2.micro の半額
- $0.0100/時間(東京リージョン/オンデマンド)
- $7.30/月(東京リージョン/オンデマンド)
想定されるユースケース
t2.nanoはトラフィックの少ないウェブサイト、マイクロサービス、開発・テスト環境に使われることを想定していますし、費用効果を計測する車両にも使えると期待しています。さらに、トレーニングや教育用途もあります。
こちらの記事の抜粋。
僕の欲求
で、ナノでやってみたいのは以下のような内容ナノ。
- ECS のコンテナインスタンス
- Rundeck を動かしておく
- 諸々の検証
三番目の諸々については具体的な何かというよりも、いつでもお小遣いを気にすることが出来るという点では既に欲求は満たされている気がしている。
やってみる
ECS のコンテナインスタンス
いつも使っている教材を利用して t2.nano な ECS コンテナインスタンスを起動してみた。
- cpuinfo
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz stepping : 2 microcode : 0x2b cpu MHz : 2400.028 cache size : 30720 KB (snip) cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management:
- meminfo
$ cat /proc/meminfo MemTotal: 500212 kB MemFree: 99000 kB Buffers: 8928 kB Cached: 297356 kB SwapCached: 0 kB (snip) Hugepagesize: 2048 kB DirectMap4k: 53248 kB DirectMap2M: 602112 kB
- インスタンスタイプを確認
$ curl http://169.254.169.254/latest/meta-data/instance-type t2.nano
- Docker Engine
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aa24c40078d5 amazon/amazon-ecs-agent:latest "/agent" 3 minutes ago Up 3 minutes 127.0.0.1:51678->51678/tcp ecs-agent $ sudo docker version Client: Version: 1.9.1 API version: 1.21 Go version: go1.4.2 Git commit: a34a1d5 Built: Fri Nov 20 13:12:04 UTC 2015 OS/Arch: linux/amd64 Server: Version: 1.9.1 API version: 1.21 Go version: go1.4.2 Git commit: a34a1d5 Built: Fri Nov 20 13:12:04 UTC 2015 OS/Arch: linux/amd64
Docker Engine は起動していることを確認。
- ECS からはどんな風に見えているのか
$ make OUTPUT=json ECS_CLUSTER=oreno-cluster ECS_ARN=705afbd9-d078-48bc-82c 8-3b2aafc83cbe ecs-describe-container-instances { "failures": [], "containerInstances": [ { "status": "ACTIVE", "registeredResources": [ { "integerValue": 1024, "longValue": 0, "type": "INTEGER", "name": "CPU", "doubleValue": 0.0 }, { "integerValue": 488, "longValue": 0, "type": "INTEGER", "name": "MEMORY", "doubleValue": 0.0 }, (snip) ], "versionInfo": { "agentVersion": "1.7.0", "agentHash": "191dbd5", "dockerVersion": "DockerVersion: 1.9.1" } } ] }
- ECS container agent はどの位のリソースを使っているのか
docker stats
コマンドで確認してみる。
$ sudo docker stats --no-stream=true ecs-agent CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O ecs-agent 0.06% 12.5 MB / 512.2 MB 2.44% 27.78 kB / 27.86 kB 9.056 MB / 4.096 kB
ECS container agent 自体が t2.nano 搭載メモリ一杯、一杯にメモリを使用できる状態で起動しているのはちょっと注意が必要。
やっぱりメモリが見た目で心もとないけど、ひとまず Docker Engine 動いているから欲求は満たされそうナノ。
Rundeck を動かす
- インストール
$ wget http://dl.bintray.com/rundeck/rundeck-deb/rundeck-2.6.2-1-GA.deb $ sudo apt-get install openjdk-7-jdk $ sudo dpkg -i rundeck-2.6.2-1-GA.deb
- 設定
$ cd /etc/rundeck $ sudo diff -u rundeck-config.properties.bk rundeck-config.properties --- rundeck-config.properties.bk 2015-12-17 14:30:22.943200999 +0000 +++ rundeck-config.properties 2015-12-17 14:30:51.663200999 +0000 @@ -5,6 +5,6 @@ #rss.enabled if set to true enables RSS feeds that are public (non-authenticated) rss.enabled=false # change hostname here -grails.serverURL=http://localhost:4440 +grails.serverURL=http://xxx.xxx.xxx.xxx:4440 $ sudo diff -u framework.properties.original framework.properties --- framework.properties.original 2015-12-17 14:30:01.995200999 +0000 +++ framework.properties 2015-12-17 14:32:52.923200999 +0000 @@ -8,10 +8,10 @@ framework.server.name = localhost framework.server.hostname = localhost framework.server.port = 4440 -framework.server.url = http://localhost:4440 +framework.server.url = http://xxx.xxx.xxx.xxx:4440
- 起動
満を持して起動。
$ sudo service rundeckd start
ブラウザでアクセスすると…
キタ━━━━(゚∀゚)━━━━!!
- 残念でした…
ところが…ログインしつつ rundeck のログを見ると…
2015-12-17 14:39:14.157:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:4440 OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000d4777000, 20123648, 0) failed; error='Cannot allocate memory' (errno=12)
予想はしていたもののメモリ不足を訴えるログが。「メモリ不足ナノ」。
ドキュメントのインストール要件には含まれていないようだけど…JVM の割り当てメモリを見てみると…
$ sudo cat /etc/rundeck/profile | grep Xmx RDECK_JVM="$RDECK_JVM -Xmx1024m -Xms256m -XX:MaxPermSize=256m -server"
おお、すでに搭載メモリを超える容量で最大ヒープサイズの確保が行われるようだ。-Xmx
のサイズを調整すればもしかして…
$ sudo diff -u profile.original profile --- profile.original 2015-12-17 14:58:17.931200999 +0000 +++ profile 2015-12-17 14:58:32.531200999 +0000 @@ -36,7 +36,7 @@ # # Set min/max heap size # -RDECK_JVM="$RDECK_JVM -Xmx1024m -Xms256m -XX:MaxPermSize=256m -server" +RDECK_JVM="$RDECK_JVM -Xmx256m -Xms256m -XX:MaxPermSize=256m -server" # # SSL Configuration - Uncomment the following to enable. Check SSL.properties for details. #
ヒープサイズを控えめにするとメモリ不足のエラーは出なくなることが確認できた。
- だが…
使い物になるのか(ちゃんと JOB が動くのか)否かは適当な JOB を動かして長期的に見ていきたい。
ということで
一応
自分の欲求は満たしてくれそうナノ。
きっと
Docker Engine と Rundeck を同時に動かすのはしんどいかもしれないけど、ちょっとした検証や低負荷で長時間動かしておくにはおススメ出来るインスタンスタイプではないかと思うナノ。(その気になればバーストもするし)