ようへいの日々精進XP

よかろうもん

(ショロカレ 18 日目)t2.nano は僕の欲求を満たしてくれるのか

自転車操業になりつつある「初老丸の独り Advent calendar 2015」の十八日目の記事です。

tl;dr

先日、EC2 インスタンスの t2 ブラザーズに新しい弟が増えた。その名は t2.nano(ナノ)。五男なナノは最もスペックは低い位置づけだが個人的にはコストを抑えられるという点でとても有り難い発表ナノ。

aws.typepad.com

え、そうなの?

ということで、t2.nano がどの程度の実力なのか自分がやりたいことが出来るのか目線で試してみることにした。

尚、上記のブログ記事がとても参考になった。以下の内容はほぼ上記の記事を自分なりに纏めたものになるので、詳細については上記の記事を参照されたし。


え、そうなの?

t2.nano のスペック

  • 1vCPU
  • 512MB メモリ
  • 最大2つの ENI をサポート
  • 30 CPU クレジット

t2.nano ってなんぼ?

  • t2.micro の半額
  • $0.0100/時間(東京リージョン/オンデマンド)
  • $7.30/月(東京リージョン/オンデマンド)

想定されるユースケース

t2.nanoはトラフィックの少ないウェブサイト、マイクロサービス、開発・テスト環境に使われることを想定していますし、費用効果を計測する車両にも使えると期待しています。さらに、トレーニングや教育用途もあります。

こちらの記事の抜粋。

僕の欲求

で、ナノでやってみたいのは以下のような内容ナノ。

三番目の諸々については具体的な何かというよりも、いつでもお小遣いを気にすることが出来るという点では既に欲求は満たされている気がしている。


やってみる

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

ブラウザでアクセスすると...

f:id:inokara:20151217234439p:plain

キタ━━━━(゚∀゚)━━━━!!

  • 残念でした...

ところが...ログインしつつ 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 を同時に動かすのはしんどいかもしれないけど、ちょっとした検証や低負荷で長時間動かしておくにはおススメ出来るインスタンスタイプではないかと思うナノ。(その気になればバーストもするし)