hoge-hogeoのひきこもごも

インフラエンジニアだけど形を持ったインフラを触ったことがない人の徒然

Transfer:ことはじめ

概要

S3からデータを見たいんだって、別会社の人が。

SFTPじゃなくてもいい気がするんだけど、いつのまにかやることが決まってたから作る。

打ち合わせ呼んでクレメンス、、、立ててるだけで2万超えるやで。

はぁ。。。

手順

Transfer構築

CloudWatch Logs用のロールつくる

Transferが吐くログをCloudWatch Logsに記録させるために、先にロールをつくる f:id:hoge-hogeo:20191011150336p:plain

 

信頼関係はTransfer(TransferがCloudWatch Logsにログを送るから) f:id:hoge-hogeo:20191011150457p:plain

Transfer たてる

Custom hostname書くとR53にCNAMEを勝手につくってくれる。便利。

ちなみにhoge-hogeo.comは僕の持ち物ではないので、名前解決はできない。(ブログ用ダミー)

SFTPユーザ使う場合は左(多分)

Logging roleは↑で作ったロールを入れる f:id:hoge-hogeo:20191011151854p:plain

完成

f:id:hoge-hogeo:20191011152304p:plain

stopしてもお金は払ってや

検証で立てたらちゃんとdeleteしないと死ぬやつや f:id:hoge-hogeo:20191011154030p:plain

ユーザつくる

ポリシーつくる

権限はよしなに。

これはメンテナンス用ユーザのポリシーだからcreate/delete bucket以外の権限を付けといた。 f:id:hoge-hogeo:20191010152408p:plain

ロールつくる

作ったポリシーをアタッチする。 f:id:hoge-hogeo:20191010152955p:plain

信頼関係はTransfer(TransferがS3にモノを置いたりするから) f:id:hoge-hogeo:20191011145708p:plain

Transferコンソールからユーザを作成する

Home directoryはS3バケット名、Optionalを入れなければs3://バケット名/がログインしたときのホームディレクトリになる f:id:hoge-hogeo:20191010153101p:plain

test.txtを配置しておく f:id:hoge-hogeo:20191010150141p:plain

S3のバケットポリシーは空。あとでちゃんとバケットポリシー埋めないと。。。 f:id:hoge-hogeo:20191010151453p:plain

動作確認

見れた。

$ sftp -i .ssh/key.pem test-sftp@sftp.hoge-hogeo.com
Connected to test-sftp@sftp.hoge-hogeo.com.
sftp> ls  
test.txt  
sftp> ls -l
-rwxr--r--   1        -        -       17 Oct 10 05:49 test.txt

SFTPのコマンド分からん。

CloudWatch Logs

ログインしたら、CONNECTEDのログが出た。 f:id:hoge-hogeo:20191011153104p:plain

一応S3が直接見れないことを確認。

$ aws s3 ls s3://staging-xxxxxxxx

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

bundle installで'ld: library not found for -lssl'が出てつらい話

ローカルにアプリケーションcloneしてきてrubyのデプロイツールを検証したい。

bundle installが通らない

$ bundle install --path vendor/bundle
Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
〜中略〜
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/hogehogeo/Documents/hogeo-service/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2 for inspection.
Results logged to /Users/hogehogeo/Documents/hogeo-service/vendor/bundle/ruby/2.6.0/extensions/x86_64-darwin-18/2.6.0-static/mysql2-0.5.2/gem_make.out

An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before bundling.

gem installしてみる

gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/

"ld: library not found for -lssl"で落ちる

$ gem install mysql2 
Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.
  
〜中略〜
current directory: /Users/hogehogeo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)

make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/hogehogeo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.2 for inspection.
Results logged to /Users/hogehogeo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-18/2.6.0-static/mysql2-0.5.2/gem_make.out

参考:【Rails】MySQL2がbundle installできない時の対応方法 - Qiita

openssl自体は入ってるらしいので、upgradeしてみる

Error: openssl 1.0.2r is already installed
To upgrade to 1.0.2t, run `brew upgrade openssl`
$ brew upgrade openssl
==> Upgrading 1 outdated package:
openssl 1.0.2r -> 1.0.2t
==> Upgrading openssl 
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2t.mojave.bottle.tar.gz

中身見てみる

$ brew info openssl
openssl: stable 1.0.2t (bottled) [keg-only]
SSL/TLS cryptography library
https://openssl.org/
/usr/local/Cellar/openssl/1.0.2t (1,795 files, 12.0MB)
  Poured from bottle on 2019-09-25 at 12:18:20
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/openssl.rb
==> Caveats
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

openssl is keg-only, which means it was not symlinked into /usr/local,
because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.

If you need to have openssl first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

For pkg-config to find openssl you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"

==> Analytics
install: 268,610 (30 days), 1,333,944 (90 days), 6,296,651 (365 days)
install_on_request: 51,876 (30 days), 187,062 (90 days), 858,928 (365 days)
build_error: 0 (30 days)

上記を参考にしながらパスを指定

$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include"
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

bundle install再実行

$ bundle install --path vendor/bundle
〜中略〜
Using mini_magick 4.9.5
Using mustermann 1.0.3
Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions

通った。

もうやりたくない。

備忘録:HAProxyのtimeoutを伸ばす

Q: オフィスからTableau Desktopを使ってプロキシサーバ経由で本番DBのリードレプリカに繋いでいるけど、1分くらいでタイムアウトしてしまうのでタイムアウトをのばしてください。

A: PRDのDB(リードレプリカとはいえ)にログインしっぱなしはやめてください。

idle timeoutはこの2つっぽい。

listen mysql
        bind *:3306
        timeout connect 10s
        ★timeout client 30m
        ★timeout server 30m
        mode tcp
        server singleMySQL ${DB_ENDPOINT}:3306

Logrotate: dailyとか関係なく、ログサイズでローテートしたい

tl;dr

  • /etc/cron.daily/logrotateは/etc/cron.hourly/に引っ越ししよ
  • maxsize使おうね
  • 1日に何度もローテしたければunixtimeとか使って、ログローテしよ
# cat /etc/logrotate.d/test_hoge 
/var/log/test_hoge/*.log {
        daily
        maxsize 1M⬅︎これ
        dateext
        dateformat -%Y%m%d-%s⬅︎これ
        missingok
        rotate 7
        compress
        notifempty
        create 644 root root
}

検証開始

検証用のログローテ設定

これで、logrotateを1時間置きに回せば、dailyでローテorサイズでローテができるはず。

$ cat /etc/logrotate.d/test_hoge 
/var/log/test_hoge/*.log {
        daily
        maxsize 1M
        missingok
        rotate 7
        compress
        notifempty
        create 644 root root
}

1Mのファイルを作る。

$ dd if=/dev/zero of=test.log bs=1M count=1
1+0 レコード入力
1+0 レコード出力
1048576 バイト (1.0 MB) コピーされました、 0.0025573 秒、 410 MB/秒

#1MBぴったりだとローテされないかもなのでちょっと足した
$ echo hoge >> /var/log/test_hoge/test.log 

$ mv test.log /var/log/test_hoge/

ローテートを手動実行した結果、1MB以上なので、ローテされた。(あ、でもこれ当日初のローテートなので、dailyが効いてるだけかも)

$ /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
$ ls -l /var/log/test_hoge/
合計 4
-rw-r--r--. 1 root   root      0  3月 26 06:44 test.log
-rw-rw-r--. 1 centos centos 1058  3月 26 06:44 test.log-20190326.gz

1M超えていない&&1日前のログをローテするか

これは普通のdailyの検証かな。

statusファイルを1日前に戻して、logrotate.statusファイルのtest.logの日時も1日前(20190325)に偽造。

5バイトのログファイルを作成

# mv /var/log/test_hoge/test.log-20190326.gz /var/log/test_hoge/test.log-20190325.gz
# vim /var/lib/logrotate/logrotate.status
# grep test_hoge /var/lib/logrotate/logrotate.status 
"/var/log/test_hoge/test.log" 2019-3-25-6:46:31

$ sudo sh -c "echo hoge>> /var/log/test_hoge/test.log"
$  ls -l /var/log/test_hoge/
合計 8
-rw-r--r--. 1 root   root      5  3月 26 06:45 test.log
-rw-rw-r--. 1 centos centos 1058  3月 26 06:44 test.log-20190325.gz

logrotateを手動実行した結果、statusファイル内の時刻が更新された。

# /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
# grep test_hoge /var/lib/logrotate/logrotate.status 
"/var/log/test_hoge/test.log" 2019-3-26-6:46:31

1M超えていない&&1日前のログなのでローテされた。

"/var/log/test_hoge/test.log" 2019-3-26-6:46:31
# ls -l /var/log/test_hoge/
total 8
-rw-r--r--. 1 root   root      0 Mar 26 06:46 test.log
-rw-rw-r--. 1 centos centos 1058 Mar 26 06:44 test.log-20190325.gz
-rw-r--r--. 1 root   root     25 Mar 26 06:45 test.log-20190326.gz

当日すでにローテ済み&&1M超えのログをローテするか

当日すでにdailyでのローテートは済んでいるが、ログファイルが1Mを超えた場合に、

cron.hourlyで実行されたlogrotateでちゃんとローテされるか。

2Mのファイルを準備

# ls -l /var/log/test_hoge/
total 2056
-rw-r--r--. 1 root   root   2097152 Mar 26 07:02 test.log
-rw-rw-r--. 1 centos centos    1058 Mar 26 06:44 test.log-20190325.gz
-rw-r--r--. 1 root   root        25 Mar 26 06:45 test.log-20190326.gz

当日分はローテ済みなので

# date
Tue Mar 26 07:04:49 UTC 2019

# grep test_hoge /var/lib/logrotate/logrotate.status 
"/var/log/test_hoge/test.log" 2019-3-26-6:46:31

daily or 1M超えたファイルをローテできるかがこれで分かるはず

# /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
# grep test_hoge /var/lib/logrotate/logrotate.status 
"/var/log/test_hoge/test.log" 2019-3-26-7:6:55

# ls -l /var/log/test_hoge/
total 2056
-rw-r--r--. 1 root   root   2097152 Mar 26 07:02 test.log
-rw-rw-r--. 1 centos centos    1058 Mar 26 06:44 test.log-20190325.gz
-rw-r--r--. 1 root   root        25 Mar 26 06:45 test.log-20190326.gz

statusは更新されたのに、ローテは走ってない。。。

rotating pattern: /var/log/test_hoge/*.log  after 1 days (7 rotations)
empty log files are not rotated, log files >= 1048576 are rotated earlier, old logs are removed
considering log /var/log/test_hoge/test.log
  log needs rotating
rotating log /var/log/test_hoge/test.log, log->rotateCount is 7
dateext suffix '-20190326'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/test_hoge/test.log-20190326.gz already exists, skipping rotation

date suffixが被ってるからスキップされてた。。。

苦しいけど、unixtimeで回避してみる。

/var/log/test_hoge/*.log {
        daily
        maxsize 1M
        dateext
        dateformat -%Y%m%d-%s
        missingok
        rotate 7
        compress
        notifempty
        create 644 root root
}

これならdate suffixはまず被らない。

# /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf 
# ls -lt /var/log/test_hoge/
total 12
-rw-r--r--. 1 root   root      0 Mar 26 07:16 test.log
-rw-r--r--. 1 root   root   2067 Mar 26 07:02 test.log-20190326-1553584560.gz
-rw-r--r--. 1 root   root     25 Mar 26 06:45 test.log-20190326.gz
-rw-rw-r--. 1 centos centos 1058 Mar 26 06:44 test.log-20190325.gz

すでにローテ済み&&1M超えのログをローテするか:again

もう一度2Mのファイルを準備。

logrotate.stausは変更しない。

# ls -lt /var/log/test_hoge/
total 2060
-rw-r--r--. 1 root   root   2097152 Mar 26 07:20 test.log
-rw-r--r--. 1 root   root      2067 Mar 26 07:02 test.log-20190326-1553584560.gz
-rw-r--r--. 1 root   root        25 Mar 26 06:45 test.log-20190326.gz
-rw-rw-r--. 1 centos centos    1058 Mar 26 06:44 test.log-20190325.gz

# date
Tue Mar 26 07:21:06 UTC 2019

# grep test_hoge /var/lib/logrotate/logrotate.status 
"/var/log/test_hoge/test.log" 2019-3-26-7:16:0

DEKITA!

# /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf 
# ls -lt /var/log/test_hoge/
total 16
-rw-r--r--. 1 root   root      0 Mar 26 07:21 test.log
-rw-r--r--. 1 root   root   2067 Mar 26 07:20 test.log-20190326-1553584904.gz
-rw-r--r--. 1 root   root   2067 Mar 26 07:02 test.log-20190326-1553584560.gz
-rw-r--r--. 1 root   root     25 Mar 26 06:45 test.log-20190326.gz
-rw-rw-r--. 1 centos centos 1058 Mar 26 06:44 test.log-20190325.gz

おまけ

書き方ダメなやつ

*だけで指定するやつ

/home/ubuntu/tools/log/* {
    daily
    missingok
    rotate 3
    compress
    notifempty
}

永遠にローテされる。

-rw-rw-r-- 1 ubuntu ubuntu   343 Jun 10 00:06 lifecycle_action_polling_sqs_20190610000601.log.1.1.gz.1.gz
-rw-rw-r-- 1 ubuntu ubuntu   343 Jun 10 00:05 lifecycle_action_polling_sqs_20190610000501.log.1.1.gz.1.gz
-rw-rw-r-- 1 ubuntu ubuntu   343 Jun 10 00:04 lifecycle_action_polling_sqs_20190610000401.log.1.1.gz.1.gz
-rw-rw-r-- 1 ubuntu ubuntu   343 Jun 10 00:03 lifecycle_action_polling_sqs_20190610000301.log.1.1.gz.1.gz
-rw-rw-r-- 1 ubuntu ubuntu   343 Jun 10 00:02 lifecycle_action_polling_sqs_20190610000201.log.1.1.gz.1.gz
-rw-rw-r-- 1 ubuntu ubuntu   343 Jun 10 00:01 lifecycle_action_polling_sqs_20190610000101.log.1.1.gz.1.gz
-rw-rw-r-- 1 ubuntu ubuntu   343 Jun 10 00:00 lifecycle_action_polling_sqs_20190610000001.log.1.1.gz.1.gz

当然だけど*で引っかかるからひたすらローテート対象になって、圧縮されていく。

正しくは、*.logとかだね。

(ファイルのローテート規則がおかしいのは、途中からdelaycompress外したから)

API Gateway: API Keyを使ってAPI実行をする

雑な備忘録

やりたきこと

API GatewayでLambdaたたきたい(Lambdaでメール飛ばす)

お品書き

  • APIをデプロイする
  • API Keyを作る
  • API Keyにアタッチする使用量プランを作る
  • APIを使用量プランにアタッチする

手順

APIをデプロイする

ここはいつも通り f:id:hoge-hogeo:20190325141420p:plain

ステージは適当に f:id:hoge-hogeo:20190311213013p:plain

API Keyを作る

f:id:hoge-hogeo:20190325141843p:plain

ここもこだわりなければ適当に f:id:hoge-hogeo:20190311213250p:plain

API Keyにアタッチする使用量プランを作る

f:id:hoge-hogeo:20190311213302p:plain

APIを使用量プランにアタッチする

f:id:hoge-hogeo:20190325142152p:plain

f:id:hoge-hogeo:20190311214002p:plain

APIに使用量プランがアタッチされた。 f:id:hoge-hogeo:20190311214012p:plain

なにもないけどPOSTでAPI Gatewayたたく

$ curl -X POST -H 'x-api-key:hogehoge' https://***********.execute-api.ap-northeast-1.amazonaws.com/dev/send
null

Lambdaが実行されて、メールきた。

POSTのメソッドなのにしばらくGETでcurl投げまくってハマってたのは内緒。 f:id:hoge-hogeo:20190311222143p:plain

Docker: 使っていないボリュームを削除してディスク使用量を節約する

dockerコンテナ周りでボリューム食ってるのかなーと調べてたら、こんなコマンド見つけた。

# docker system df -v
Images space usage:

REPOSITORY          TAG                 IMAGE ID            CREATED ago         SIZE                SHARED SIZE         UNIQUE SiZE         CONTAINERS
errbit/errbit       latest              a9d99b72415d        14 months ago ago   312.6MB             136.8MB             175.8MB             1
mongo               3.2                 e326370ecc98        14 months ago ago   301.3MB             0B                  301.3MB             1
redash/redash       latest              8156a8c1b0c6        18 months ago ago   930.1MB             566.1MB             364MB               2
redash_server       latest              5f398543e01d        19 months ago ago   936.1MB             566.1MB             370MB               0
redis               3.0-alpine          856249f48b0c        20 months ago ago   12.63MB             0B                  12.63MB             1
redash/base         latest              9d04584f371a        20 months ago ago   566.1MB             566.1MB             0B                  0
postgres            9.5.6-alpine        cc38b642ca58        21 months ago ago   36.85MB             0B                  36.85MB             1
postgres            9.5.6               52caac8f7edd        21 months ago ago   265.5MB             0B                  265.5MB             1
<none>              <none>              46336a6d9d4c        22 months ago ago   915.4MB             0B                  915.4MB             0
ruby                2.3.3-alpine        9e455f733647        23 months ago ago   136.8MB             136.8MB             0B                  0
redash/nginx        latest              76abf32984e9        3 years ago ago     134.5MB             0B                  134.5MB             1

Containers space usage:

CONTAINER ID        IMAGE                   COMMAND                  LOCAL VOLUMES       SIZE                CREATED ago         STATUS                       NAMES
5f15ff79bc44        errbit/errbit:latest    "bundle exec puma ..."   0                   0B                  3 weeks ago ago     Up 3 weeks (healthy)         errbit_errbit_1
9c876e5f91f4        redash/redash:latest    "/app/bin/docker-e..."   0                   16.5kB              11 months ago ago   Up 18 hours                  redash_worker_1
4b08babe3be6        redash/nginx:latest     "nginx -g 'daemon ..."   0                   38.8MB              11 months ago ago   Up 6 weeks                   redash_nginx_1
862cb38007a3        redash/redash:latest    "/app/bin/docker-e..."   0                   1.16GB              11 months ago ago   Up 7 days                    redash_server_1
098126220a5b        mongo:3.2               "docker-entrypoint..."   2                   0B                  14 months ago ago   Up 3 weeks                   errbit_mongo_1
f6e965d00219        postgres:9.5.6-alpine   "docker-entrypoint..."   0                   28.5kB              17 months ago ago   Up 6 weeks                   redash_postgres_1
03a8de294c69        redis:3.0-alpine        "docker-entrypoint..."   1                   0B                  17 months ago ago   Up 6 weeks                   redash_redis_1
d68b144fc7f3        postgres:9.5.6          "docker-entrypoint..."   0                   1.17GB              17 months ago ago   Exited (137) 17 months ago   bkdb

Local Volumes space usage:

VOLUME NAME                                                        LINKS               SIZE
a746a9e11969121fec6fa9d829501d3ee259b2d1ee4f25023baa1e34bf36f654   0                   24.65kB
b5976d2e3d871820bd35e87d20ac174e08f927d569ed04727d8802fb0034b253   1                   74.73MB
f2cab22375163310d24db55662477203e9b8b37fbec6ef4528cec6ab2fc41133   0                   38.35MB
2fc297e830636a0d9a4b2d0d67c83c33a24b8e6fc768146a7f37ad55b7c57429   0                   8.967kB
8aecf8c34087d426dc4737fa6690be5efd2ecdfff7f4e242eef5f48ac6bfdc15   0                   172B
62cac3cf9d837a22fa835485b17e1c3cb4b7ac0e002f5e08bebfbf7b9076ef74   0                   2.365GB
88f3613372d4950e245a94bec539296eb17c99109370290cf83bdbc210033671   0                   1.931kB
ee9834461c5f561314a20c30e8beee5dcc4f28a5275b89792f20a9d38c39274f   0                   1.937MB
f56dd56299fbc947791fa9c1c9ce3445815db04e9e91a039c76910659de6ef37   1                   0B
ff593cb1ceef802b9223c6cb0f9a184ce9686d9f6fd46558471699cab0e89178   0                   38.49MB
09557be5cec0ec1e30f88e5d1ba65361255eb57dae1ce20f4dfc71c695f6e271   1                   477.2MB
55e03608a3ee112ad7cf592a2057345a15037d29ec136169dab356f03f3f8f04   0                   1.386GB

「Local Volumes space usage:」のLINKS 0が使われていないボリュームらしい

# docker volume ls -f dangling=true
DRIVER              VOLUME NAME
local               2fc297e830636a0d9a4b2d0d67c83c33a24b8e6fc768146a7f37ad55b7c57429
local               55e03608a3ee112ad7cf592a2057345a15037d29ec136169dab356f03f3f8f04
local               62cac3cf9d837a22fa835485b17e1c3cb4b7ac0e002f5e08bebfbf7b9076ef74
local               88f3613372d4950e245a94bec539296eb17c99109370290cf83bdbc210033671
local               8aecf8c34087d426dc4737fa6690be5efd2ecdfff7f4e242eef5f48ac6bfdc15
local               a746a9e11969121fec6fa9d829501d3ee259b2d1ee4f25023baa1e34bf36f654
local               ee9834461c5f561314a20c30e8beee5dcc4f28a5275b89792f20a9d38c39274f
local               f2cab22375163310d24db55662477203e9b8b37fbec6ef4528cec6ab2fc41133
local               ff593cb1ceef802b9223c6cb0f9a184ce9686d9f6fd46558471699cab0e89178

使っていないボリュームを削除する。

# docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
ee9834461c5f561314a20c30e8beee5dcc4f28a527ab89792f20a9d38c39274f
ff593cb1ceef802b9223c6cb0f9a184ce9686a9f6fd46558471699cab0e89178
55e03608a3ee112ad7cf592a2057345a15037d29ec136169dab356f03f3f8f04
62cac3cf9d837a22fa835485b17e1c3cb4b7ac0e002f5e08bebfbf7b9076ef74
88f3613372d4950e245a94bec539296eb17c991a9370290cf83bdbc210033671
f2cab22375163310d24db55662477203e9b8b37fbec6ef4528cec6ab2fc41133
2fc297e830636a0d9a4b2d0d67c83c33a24b8e6fca68146a7f37ad55b7c57429
8aecf8c34087d426dc4737fa6690be5efd2ecdfff7f4e242eef5f48ac6bfdc15
a746a9e11969121fec6fa9d829501d3ee259b2d1ee4f2a023baa1e34bf36f654

LINKS 0のボリュームがなくなったので、アタッチされていないボリュームはちゃんと消されてそう。

# docker system df -v
Images space usage:

REPOSITORY          TAG                 IMAGE ID            CREATED ago         SIZE                SHARED SIZE         UNIQUE SiZE         CONTAINERS
errbit/errbit       latest              a9d99b72415d        14 months ago ago   312.6MB             136.8MB             175.8MB             1
mongo               3.2                 e326370ecc98        14 months ago ago   301.3MB             0B                  301.3MB             1
redash/redash       latest              8156a8c1b0c6        18 months ago ago   930.1MB             566.1MB             364MB               2
redash_server       latest              5f398543e01d        19 months ago ago   936.1MB             566.1MB             370MB               0
redis               3.0-alpine          856249f48b0c        20 months ago ago   12.63MB             0B                  12.63MB             1
redash/base         latest              9d04584f371a        20 months ago ago   566.1MB             566.1MB             0B                  0
postgres            9.5.6-alpine        cc38b642ca58        21 months ago ago   36.85MB             0B                  36.85MB             1
postgres            9.5.6               52caac8f7edd        21 months ago ago   265.5MB             0B                  265.5MB             1
<none>              <none>              46336a6d9d4c        22 months ago ago   915.4MB             0B                  915.4MB             0
ruby                2.3.3-alpine        9e455f733647        23 months ago ago   136.8MB             136.8MB             0B                  0
redash/nginx        latest              76abf32984e9        3 years ago ago     134.5MB             0B                  134.5MB             1

Containers space usage:

CONTAINER ID        IMAGE                   COMMAND                  LOCAL VOLUMES       SIZE                CREATED ago         STATUS                       NAMES
5f15ff79bc44        errbit/errbit:latest    "bundle exec puma ..."   0                   0B                  3 weeks ago ago     Up 3 weeks (healthy)         errbit_errbit_1
9c876e5f91f4        redash/redash:latest    "/app/bin/docker-e..."   0                   16.5kB              11 months ago ago   Up 20 hours                  redash_worker_1
4b08babe3be6        redash/nginx:latest     "nginx -g 'daemon ..."   0                   38.8MB              11 months ago ago   Up 6 weeks                   redash_nginx_1
862cb38007a3        redash/redash:latest    "/app/bin/docker-e..."   0                   1.16GB              11 months ago ago   Up 7 days                    redash_server_1
098126220a5b        mongo:3.2               "docker-entrypoint..."   2                   0B                  14 months ago ago   Up 3 weeks                   errbit_mongo_1
f6e965d00219        postgres:9.5.6-alpine   "docker-entrypoint..."   0                   28.5kB              17 months ago ago   Up 6 weeks                   redash_postgres_1
03a8de294c69        redis:3.0-alpine        "docker-entrypoint..."   1                   0B                  17 months ago ago   Up 6 weeks                   redash_redis_1
d68b144fc7f3        postgres:9.5.6          "docker-entrypoint..."   0                   1.17GB              17 months ago ago   Exited (137) 17 months ago   bkdb

Local Volumes space usage:

VOLUME NAME                                                        LINKS               SIZE
b5976d2e3d871820bd35e87d20ac174e08f927d569ed04727d8802fb0034b253   1                   74.76MB
09557be5cec0ec1e30f88e5d1ba65361255eb57dae1ce20f4dfc71c695f6e271   1                   477.3MB
f56dd56299fbc947791fa9c1c9ce3445815db04e9e91a039c76910659de6ef37   1                   0B

Terraform: module化する話

モノはこんな

$ cd terra-modulized-es
$ tree .
.
├── modules
│   └── elasticsearch
│       └── aws_es_node.tf
└── services
    └── elasticsearch
        ├── production
        │   ├── main.tf
        └── staging
            └── main.tf

6 directories, 4 files

ここに変数の中身を書く

$cat terra-modulized-es/services/elasticsearch/production/main.tf
module "production-es-cluster" {
  region          = "ap-northeast-1"
  source          = "../../../modules/elasticsearch"
  lb_name         = "production-es-alb"
  internal_option = "false"
  lb_type         = "application"
  es_alb_sg       = "sg-xxxxxxxxxxxxxxxxx"
  es_alb_subnet   = ["subnet-xxxxxxxx", "subnet-xxxxxxxx"]
  env             = "production"
}

こっちは変数の定義とリソースのオプションを書くだけ

$cat terra-modulized-es/modules/elasticsearch/aws_es_node.tf
provider "aws" {
  region = "${var.region}"
}

variable "region" {}
variable "lb_name" {}
variable "internal_option" {}
variable "lb_type" {}
variable "es_alb_sg" {}

variable "es_alb_subnet" {
  type = "list"
}

variable "env" {}

resource "aws_lb" "es-alb" {
  name                       = "${var.lb_name}"
  internal                   = "${var.internal_option}"
  load_balancer_type         = "${var.lb_type}"
  security_groups            = ["${var.es_alb_sg}"]
  subnets                    = ["${var.es_alb_subnet}"]
  enable_deletion_protection = false

  tags = {
    Environment = "${var.env}"
  }
}

できた。

$ cd terra-modulized-es/services/elasticsearch/production
$ terraform apply

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + module.production-es-cluster.aws_lb.es-alb
〜略〜
module.production-es-cluster.aws_lb.es-alb: Still creating... (2m10s elapsed)
module.production-es-cluster.aws_lb.es-alb: Creation complete after 2m13s (ID: arn:aws:elasticloadbalancing:ap-northea...app/production-es-alb/xxxxxxxx)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

variableも外だしした方がいいな。