Wednesday, August 17, 2016

Certbotクライアントで、Let’s Encrypt SSL証明書を発行する


https://certbot.eff.org
https://letsencrypt.org/getting-started/
Let’s Encryptのクライアントが新しくなり、Certbotとなりました。

環境:CentOS6, nginx

Certbotクライアントをインストール
$ git clone https://github.com/certbot/certbot
$ cd certbot/
$ sudo yum update openssl
$ sudo ./certbot-auto

SSL証明書を発行
ドメイン:my.domain.com
ルートディレクトリ:/usr/share/nginx/html
メールアドレス:me@gmail.com
$ ./certbot-auto certonly --webroot \
-w /usr/share/nginx/html -d my.domain.com \
-m me@gmail.com \
--agree-tos
$ sudo ls /etc/letsencrypt/live/my.domain.com
cert.pem  chain.pem  fullchain.pem  privkey.pem

DHパラメータファイルを作成
$ sudo openssl dhparam 2048 -out /etc/letsencrypt/live/my.domain.com/dhparam.pem
これで、証明書ファイルが揃いました。

証明書の更新
いちど生成したSSL証明書は、コマンドオプションがファイルに記録されています。
renewと打つだけなので楽。

更新コマンド
$ ~/certbot/certbot-auto renew --force-renew 
cron設定
$ crontab -e

# Renew Let's Encrypt SSL
0 0 1 * *  /home/myuser/certbot/certbot-auto renew --force-renew && service nginx reload

Tuesday, August 2, 2016

pcregrepコマンドを使ってみる

pcregrepは、grepコマンドと同じように、文字パターンを指定してファイルを検索するコマンドです。
Perl5と互換性のある正規表現が書けます。Perlに慣れた人だったら重宝するかもしれないですね。

pcregrepをインストールする方法

pcregrepコマンドを内包しているPCREはメジャーバージョンが2つあって、ここではPCRE2を使うことにします。
コマンドは、pcre2grepになります。
古いバージョンだと、オプションが少ないし、セキュリティアップデートがあるので最新版を使うとよいです。

MacOSX
$ brew install pcre2
$ pcregrep -V
pcregrep version 8.39 2016-06-14
CentOS 6
# yum --enablerepo=epel install pcre2-tools
# pcre2grep -V
pcre2grep version 10.21 2016-01-12

以下、使い方の例です。

nginxのログから、IPアドレスの数でソート
# pcre2grep -o 'host:[0-9.]+' access.log | sort | uniq -c | sort -bg
    704 host:127.0.0.1
    736 host:5.104.241.192
    800 host:54.64.148.39
    843 host:5.104.241.190
    870 host:157.55.39.63
    888 host:40.77.167.67
    968 host:157.55.39.222
   1100 host:207.46.13.10
   1134 host:40.77.167.89
   1509 host:182.250.248.43
   2296 host:122.132.171.187
   2580 host:40.77.167.39
   3298 host:157.55.39.176
   3320 host:118.9.19.37
   7400 host:153.126.157.62
pcregrepは、grepより検索が早かったので、ログが大きい場合につかってみるといいかもしれません。 以下、timeをつけて時間を測った結果です。10倍近く差がでました。
grepの場合
# time grep -o -E 'host:[0-9.]+\s' access.log | sort | uniq -c | sort -bg
real 0m6.049s
user 0m5.973s
sys 0m0.077s

pcre2grepの場合
# time pcre2grep -o 'host:[0-9.]+(?=\s)' access.log | sort | uniq -c | sort -bg
real 0m0.759s
user 0m0.724s
sys 0m0.037s

特定の検索語を2つ以上指定して検索
# pcre2grep -o1 -o2 --om-separator=' ' '(iPad).*(reqtime:\d+\.\d+)' access.log
iPad reqtime:0.000
iPad reqtime:0.198
iPad reqtime:0.242
iPad reqtime:0.000
iPad reqtime:0.044

See also)
http://www.pcre.org/current/doc/html/pcre2grep.html

top image frpm Indi Samarajiva Mika Tennekoon Art

Friday, July 15, 2016

Fabricを使って、簡単にELB+EC2環境にローリングデプロイ

Python製のプロビジョニングツールであるFabricを使って、ELB + EC2環境にアプリケーションをローリングデプロイします。
ELBから1台ずつEC2インスタンスを切り離して、アプリケーションをデプロイしてリスタート、終わったら、ELBにEC2インスタンスを追加します。
なぜ、Fabricを使ったかというと、ほかのデプロイ自動化ツール、たとえばCapistranoやAnsibleだと、ELBのAPIを叩く処理を書くのがちょっと面倒そうだったからです。Fabricなら使いやすそうなPythonライブラリがあり、簡潔に書けるな、と考えたからです。
以下のFabricスクリプトは、ロールバックやヘルスチェックなどの処理を書いていません。もうちょっと高級なことがしたかったら、他の方法を考えたりするといいと思います。
※ ELBは、Classic load balancerを使っています。

Fabricのインストール
環境:Mac OS X
$ sudo easy_install fabric
$ sudo pip install boto
$ fab --version
Fabric 1.11.1
Paramiko 1.17.1
Fabricスクリプト
実行結果

Top image from msburrows roll