Glide Note

glidenote's blog

CircleCIのProjectページの移動が簡単になるAlfred Workflowを作った

実はCircleCI Advent Calendar 2015 - Qiitaにエントリするために、 結構前にAlfred Workflowを作っていたんですが、当時多忙でブログに書くのを忘れていました sweat

CircleCIで利用するProject数が増えると、それぞれのページに移動するのが めちゃくちゃ面倒なので、CircleCIのProject移動が簡単になるAlfred Workflowを作りました。

インストール方法、使い方はREADMEを見ていただくことにして、 どんな感じで動作するのかgif animationにしてみました。

Projectページを開く

URL情報をcacheしているので、サクサク動作します。

各Projectのmasterブランチのstatusを確認する

その都度APIを叩いて確認しているので、レスポンスが遅めです。

CircleCIとAlfredを利用している方は是非ご活用ください。

「サーバ/インフラエンジニア養成読本 DevOps編」にて[CircleCIによる継続的インテグレーション入門]を執筆しました

サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)

2016/02/26 に出版される「サーバ/インフラエンジニア養成読本 DevOps編」というムック本にて、特集「CircleCIによる継続的インテグレーション入門」を執筆しました。

CircleCIによる継続的インテグレーション入門

私が現在所属するKaizen Platform, Inc.でもCircleCIをヘビーユーズしており、サーバ/インフラ部分においても、

  1. インフラCI
  2. 稼働中サーバへのプロビジョニング
  3. DNSレコードの管理
  4. Terraformを用いたAWSリソースの管理
  5. Packerを用いたAMI作成
  6. 稼働中サーバのセキュリティアップデート
  7. メトリクスグラフの取得&slackへの投稿

などにCircleCIを利用しており、今回はその中のインフラCI稼働中サーバへのプロビジョニング 部分を入門用に噛み砕いて書いてます。

Kaizen Platform, Inc.におけるインフラの継続的デリバリー、インテグレーションについては技術顧問である伊藤直也[email protected][email protected]理解が深まるかと思います。

既存環境に組み込みやすいように

本特集では下記のサービス、ツールを利用しています。

ツール名 役割
VirtualBox ローカル環境にテスト用VMを起動
Vagrant テスト用VMの管理とssh接続情報の生成
knife-solo プロビジョニングの実行
Serverspec テスト用VMのプロビジョン結果のテスト
Terraform DigitalOcean上へのテスト用VM作成
CircleCI GitHubと連携しビルド/CIを実行
GitHub インフラコードの管理
DigitalOcean インフラCIのテスト用VMの作成環境


特集内でも説明をしていますがそれぞれを疎な状態を保つように利用しているので、組み替えやすく、別のサービス、ツールを利用していても取り入れやすいのでは無いかと思います。

HashiCorp tools

今回VagrantTerraformを利用し、ローカルでのテスト環境、インフラCIを実現しています。Vagrantはすでに定番ツールとなっておりますが、Terraformについてはまだまだの印象がありますので、インフラCI用の使い捨てVM管理を通じ、Terraformの感触を掴んでいただければ幸いです。

目次

それぞれの特集が独立しており、好きなところから読んで、手を動かして試せる内容となっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
巻頭企画 DevOpsとInfrastructure as Codeの概要
吉羽 龍太郎
第1章 DevOpsとは?
第2章 Infrastructure as Codeとは?

特集1 最速攻略!Ansible 2によるサーバ構築
新原 雅司
第1章 Ansibleの基本
第2章 Playbookの基本
第3章 Ansible[実践]
第4章 Playbookベストプラクティス

特集2 CircleCIによる継続的インテグレーション入門
前田 章
第1章 インフラのテスト入門
第2章 ローカル上でのテスト駆動インフラ
第3章 インフラCIの準備
第4章 CircleCIを利用した継続的インテグレーション
第5章 継続的インテグレーションから継続的デリバリーへ

特集3 Dockerによる仮想環境構築とKubernetesによるDockerクラスタ管理
馬場俊彰
第1章 Dockerの基本
第2章 Dockerを使ってみよう[基礎編]
第3章 Dockerを使ってみよう[応用編]
第4章 クラスタ管理ツールとは
第5章 Kubernetesの基本
第6章 Kubernetesクイックスタート
第7章 Kubernetesを詳しく見てみよう

正誤表

TerraformのDownload URLが発売直前のこのタイミングで変更になってしまい(泣)、一部コードがそのままでは動かなくなっております。詳しくは技術評論社様のサイトでご確認ください

最後に

担当した特集で利用しているServerspecの作者であるmizzyさんの紹介で特集が実現し感謝です。 担当した特集部分のレビューにご協力頂いた @tnmtさん、@kenjiskywalkerさん、@satoryuさん、ありがとうございました。

余談ですが今回の執筆にあたり、CircleCIにいろいろと問い合わせをしていたところステッカーとTシャツが送られてきて、CircleCIにも感謝です! / Thanks CircleCI !!

A photo posted by Akira Maeda (@glidenote) on


本書がビジネスに貢献するITインフラの役に立つ1冊になれば幸いです。

追記 2月26日追記

本日2016年2月26日(金)発売で、今現在カテゴリー別1位になっているようで、ありがとうございます!

Webサービス開発徹底攻略 Vol.2 を読んだ

Webサービス開発徹底攻略 Vol.2 (WEB+DB PRESS plus)

技術評論社様、特別企画「継続的Webサービス改善」執筆陣のGMOペパボのみなさんからご恵贈いただきましてありがとうございます。

『WEB+DB PRESS』の掲載記事をテーマ別に厳選、再編集とのことで、LINE、ドラゴンクエストX、freeeの事例などは 2015年のものが掲載されており、その他は2013年と3年前の事例なので多少古さがあるが、現在でも有益な情報には変わりない感じ。

LINE、ドラゴンクエストX、DMM.com などの大規模トラフィックを関する知見が参考になるのはもちろんですが、 特にGMOペパボの特別企画「継続的Webサービス改善ガイド ── 複雑性の増大と環境の変化に対応する」に関しては、 2013年当時私も在職しており、10年続くサービスをいかに改善していくかということに取り組み始めた頃で、 それから約3年経過し、最近のGMOペパボのエンジニアの勉強会での発表資料を見ると、 この本に書かれている通りに、その後サービス改善に取り組んでいることがよくわかって素晴らしい。

特にDB周りは鬼門だったので、それに関する発表資料を見ると、技術力の高さを感じる。

ほとんどのWEBサービスが10年も続かずにサービスを終了してしまうのを考えると、 長年続いているサービスの改善に関するGMOペパボの取り組み、知見は非常に希少度が高いし、 その元となっている考え方の基礎となっている部分が書かれており、2016年も必読の内容かと思います。

p.165のコードレビューの画像は、確か私のコードに対する指摘だなーと思い出して懐かさと汗が。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
■特集1:LINE ── 1日100億メッセージをさばくサービスの裏側
・第1章:LINEの歴史と開発体制
・第2章:LINEのサーバサイドアーキテクチャ
・第3章:LINEのメッセージング基盤
・第4章:LINEのストレージ
・第5章:スタンプショップの舞台裏

■特集2:ドラゴンクエストX ── 国民的RPGオンライン化へのチャレンジ
・第1章:ドラゴンクエストXとは何か
・第2章:開発・運営体制
・第3章:開発の舞台裏
・第4章:サーバプロセス構成
・第5章:1つの世界

■特集3:クラウド会計ソフトfreee ── 急成長を支えたコードとプロセスの改善
・第1章:クラウド会計ソフトfreeeの全体像
・第2章:急成長するシステムの課題と処方箋
・第3章:フロントエンド開発の複雑化への取り組み
・第4章:規模の拡大に伴う開発プロセスの変遷
・After That:freeeの現在

■特集4:DMM.com ── 動画配信に耐えるインフラ、好機を逃さない高速開発
・第1章:システムの全体像
・第2章:変化しつづけるインフラ
・第3章:負荷対策とパフォーマンス改善
・第4章:動画配信の裏側
・第5章:好機を逃さない高速開発
・第6章:多様なサービスはいかに作られるか
・After That:DMM.comの現在

■特別企画:継続的Webサービス改善ガイド ── 複雑性の増大と環境の変化に対応する
・第1章:なぜ「継続的Webサービス改善」が必要なのか
・第2章:開発環境の改善
・第3章:パフォーマンスの改善
・第4章:インフラ構成管理の改善
・第5章:ビジネス視点の改善
・第6章:これからも続く「改善」へのとりくみ

■一般記事:社内の情報共有・情報発信 ── クックパッドはいかにして場を築いたか

Roost Laptop Standで肩こりが解消した

Kickstarterで注文していた新しいRoost Laptop Standが昨年末に届いて、最近は下のような形で作業している。

2016年に向けた作業環境が整った

A photo posted by Akira Maeda (@glidenote) on


1ヶ月半くらい、この状態で過ごしてみての感想は、

  • 真っ直ぐを向く姿勢になるので、肩こりが解消した
  • 姿勢が楽なので集中力が長時間持続する
  • イヤホンを接続するとケーブルが邪魔
  • Roostは持ち運びを想定した設計だが、キーボードとかも一緒に持ち歩かないといけないので、持ち運びには適さない(と思う)

単に目の高さにディスプレイがくるようになれば良いのかと思って、それまで使っていた外部ディスプレイ(27インチ)を目線の高さにくるようにしてみたけど 外部ディスプレイだと画面が広いせいか、首は動かないけど視線(眼球)がよく動いて、目の疲れは軽減されないことがわかった。

MacBook Pro Retina 15くらいだと視線ほぼ動かないので、目が疲れず、それが肩こり軽減にも一役買っている。

これまで肩こりで集中力が切れることが結構あったが、Roostを使いだしてからそれが無くなって劇的に快適になった。 作業環境において、ここ数年で一番良い買い物をした感じがする。

参考

Let’s Encryptで証明書を作ってみた

社内向けのリバースプロキシを構築中に、まだ証明書を用意していないドメインで、Let’s Encryptを試す機会があったのでメモ。

去年アメリカに行ったタイミングから完全にブログ書く習慣がなくなってしまったので、リハビリも兼ねて。

前提

  • Port 80が空いている。外部からアクセスできる。
  • DNSが引けて、名前解決ができるようになっている

作業環境

  • CentOS 7.0, Amazon Linux
  • Nginx 1.9.10

Let’s Encryptのインストール

1
2
3
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/
./letsencrypt-auto --help --debug

./letsencrypt-auto --help --debug のタイミングで依存パッケージがインストールされる。 無事インストールが完了するとヘルプが表示される。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Updating letsencrypt and virtual environment dependencies......
Requesting root privileges to run with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt --help

  letsencrypt-auto [SUBCOMMAND] [options] [-d domain] [-d domain] ...

The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates.  By
default, it will attempt to use a webserver both for obtaining and installing
the cert. Major SUBCOMMANDS are:

  (default) run        Obtain & install a cert in your current webserver
  certonly             Obtain cert, but do not install it (aka "auth")
  install              Install a previously obtained cert in a server
  revoke               Revoke a previously obtained certificate
  rollback             Rollback server configuration changes made during install
  config_changes       Show changes made to server config during installation
  plugins              Display information about installed plugins

Choice of server plugins for obtaining and installing cert:

  --apache          Use the Apache plugin for authentication & installation
  --standalone      Run a standalone webserver for authentication
  (nginx support is experimental, buggy, and not installed by default)
  --webroot         Place files in a server's webroot folder for authentication

OR use different plugins to obtain (authenticate) the cert and then install it:

  --authenticator standalone --installer apache

More detailed help:

  -h, --help [topic]    print this message, or detailed help on a topic;
                        the available topics are:

   all, automation, paths, security, testing, or any of the subcommands or
   plugins (certonly, install, nginx, apache, standalone, webroot, etc)

証明書を作る際に、letsencryptが80番を利用するので、nginxを一時的に落とす

1
sudo service nginx stop

下記コマンドを実行して証明書を作成する。

1
./letsencrypt-auto certonly --standalone -d webapp.glidenote.com

キー紛失時の復元用のメールアドレスを入力

規約の同意画面

完了すると下記のようにメッセージが表示される。証明書の期限は90日。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to [email protected]
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/webapp.glidenote.com/fullchain.pem. Your cert
   will expire on 2016-05-02. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

下記のような感じでファイルが出来上がる。

1
2
3
4
/etc/letsencrypt/live/webapp.glidenote.com/fullchain.pem
/etc/letsencrypt/live/webapp.glidenote.com/cert.pem
/etc/letsencrypt/live/webapp.glidenote.com/chain.pem
/etc/letsencrypt/live/webapp.glidenote.com/privkey.pem

nginxで利用するのは fullchain.pemprivkey.pem なので、nginxのconfを修正。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
  listen 443 ssl http2;

  server_name         webapp.glidenote.com;

  ssl_certificate     /etc/letsencrypt/live/webapp.glidenote.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/webapp.glidenote.com/privkey.pem;

  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;


~ snip ~~

}

nginxを起動させてみる。

1
2
sudo nginx -t
sudo service nginx start

ちゃんとエラーが出ない証明書が出来上がっている。

更新については公式ドキュメントにあるように、下記のようのあスクリプトを用意してcronで回しておけばOKの模様。(検証用途でしか利用していないので、更新作業はまだやってないです)

1
2
3
4
5
6
7
8
#!/bin/sh
service nginx stop  # or whatever your webserver is
if ! /path/to/letsencrypt-auto certonly -tvv --standalone --keep -d webapp.glidenote.com > /var/log/letsencrypt/renew.log 2>&1 ; then
    echo Automated renewal failed:
    cat /var/log/letsencrypt/renew.log
    exit 1
fi
service nginx start # or whatever your webserver is

参考