weblog of key_amb

主にIT関連の技術メモ

#HashiCode #1 HashiCorp 道場に入門してきました

今週も秋葉原のクリエーションラインさんのオフィスにお邪魔してきました。*1
今回は「HashiCorp道場〜入門編〜」ということで、HashiCorp 製品ラインナップの Overview と各製品の機能概要、既存の同種のツールとの比較について講演がありました。

HashiCorp 製品はいろいろと記事を読んだりはしていたものの、Vagrant ぐらいしかまともに使ったことがありませんでした。
そんな私にとっては Vagrant も含めて各製品の情報をまとめて得られるという、とてもありがたいセミナーでした。

講師は @zembutsu さんでした。

発表資料は下のスライドです:

以下、講演内容のメモになります。

Tao of HashiCorp (HasihCorp道)

※今日も10分ほど遅刻しました。。

元ネタは本家サイトの The Tao of HashiCorp - HashiCorp のようです。

  • Tao of HashiCorp
    • HashiCorp製品の特徴
    • Workflows, not Technologies
    • Simple, Modular, Composable
      • 個々の製品は1つの目的に特化
      • unix哲学
      • 学習コストが低い
    • Communicating Sequential Processes
    • Immutability
    • Versioning through Codification
      • コード化を通したバージョン管理
      • Infrastructure as Code
    • Automation through Codification
      • システム化・自動化しやすい
    • Resilient System
      • 予想外の Input/Output に耐えられる
      • リアルタイムに変化を検出して自動的に対応
      • 高い信頼性
    • Pragmatism - 実用主義
      • 現在の手法を利用者に押し付けるものであってはいけない

HashiCorp Tools HashiWares

  • それぞれの製品の役割を見ていく
    • 製品の特徴軸
      • 開発環境構築
      • デプロイ・本番環境構築
      • サービス運用
  • Vagrant
    • 開発環境構築ツール
    • ローカルに環境構築
    • Cloud 上のインスタンスも構築・操作・削除可能
    • box 管理
    • Atlas を経由して開発環境の共有
    • 自動プロビジョニング
    • ホスト <=> ゲスト間のディレクトリ共有が簡単
      • DigitalOcean の場合は rsync っぽい
    • Atlas 連携
      • Atlas と Vagrant の共有機能
      • vagrant share
        • リモートから http(s) や ssh でアクセスできる(vagrant connect)
    • vagrant push
      • FTP サーバへ転送
      • 任意コマンド実行
      • Atlas, Heroku などクラウド環境へ転送
    • Vagrant 対応環境
      • Provider: 仮想化・クラウドサービス
      • Provisioner: 環境構築の自動化
        • File, Shell Script
        • Ansible, CFEngine, Chef Solo
    • Q&A
      • ディレクトリ共有について
        • DigitalOcean だと rsync ベースのようだけど、どういう仕組みか?
          • ゲスト側で削除したらホストにも sync される?
        • A) 未検証とのこと
        • 参考
      • vagrant push について
        • 最近 Heroku が Docker で開発・デプロイできるようになったが vagrant で開発して vagrant push で Heroku にアップできるのか?
        • A) vagrant push ではファイルを送るだけなので、たぶんできないとのこと
  • Packer
    • 複数環境に対応した仮想マシン・イメージ作成
    • 生成作業をシンプル・自動化
    • Atlas 用のイメージ Artifact を生成
    • 利点
      • 素早い環境構築と並列処理
        • AWS だと Region ごとに手順を用意して環境構築しないといけない
      • マルチ・プロバイダ対応
      • 環境構築やテストと連携
    • ゴールデンイメージ作成・利用の流れ
    • Packer がやること
      • マシンイメージを元に仮想マシンを起動し、テンプレートを適用して、新イメージ作成
    • AWS で新しい AMI を作成する流れ
    • AWS + Packer
    • DigitalOcean にも対応
    • Packer 対応環境
      • Builder: マシン・イメージ環境
      • Provisioner: イメージ内のプロビジョニング
        • Ansible, Chef, ...
      • Post Processor: 環境操作
  • Terraform
    • インフラ環境をコードとして管理
    • クラウドの複雑な構成管理を自動化
    • コードで管理するので正確・迅速な構築
    • Atlas 上の Artifact を様々な環境にデプロイ
    • 使い方
      • .tf 設定ファイル
      • terraform plan ... 実行前確認
      • terraform apply ... 適用
      • terraform show ... 適用結果の参照
      • terraform destory ... 削除
    • AWS, DigitalOcean に対応
    • Provider:
      • Atlas, AWS, CloudFlare, CloudStack, Consul, DigitalOcean, DNSMadeEasy, Docker, GCP, Heroku, Mailgun, OpenStack
    • Provisioner
      • Chef
    • 他のツールとの比較
      • Chef, Puppet
        • Terraform は構成管理しない。あくまで構築のみ
      • CloudFormation
        • AWS 以外にも対応
    • Q&A
      • AWS の場合 CloudFormation を内部的に使ってるわけではなく、API を叩いている。
        • CloudFormation ほど多機能ではない
      • Provider ごとにコードのネームスペースは分かれている
        • AWS, DigitalOceanは設定キーが異なる
        • テンプレートのコードは使い回しできなさそう
  • Serf
    • 非中央集権型のクラスタ構成ツール
    • メンバ管理
    • parallel-ssh と Serf の違い
      • 誰でも命令を実行できる
    • イベントの情報をすぐに共有できる
    • クラスタ内の障害検知
    • ノード間で相互監視
    • クラスタ構成 => serf agent --join=<別のノードのIP>
    • メンバ管理系イベント
      • member-join
      • member-update
      • member-failed
      • ...
    • カスタムイベント
      • 任意のイベント発生時に何かの処理を実行
    • Serf 対応環境
    • 他のツールとの比較
      • ZooKeeper, doozerd, etcd
        • 同様の機能を提供するが、環境構築・運用が複雑になりがち
        • 高い可用性や高度な機能をもつ
      • Fabric
        • Serf と同じように使えるがより高度な機能をもつ
      • Consul
  • Consul
    • サービス監視
    • Consulサーバ
      • Consul Agent/Client
      • サーバに情報を集約
        • KVS
    • Consul サーバは冗長構成
      • master 1台、slave 複数台
    • consul client
    • 対応環境
    • 他のツールとの比較
      • ZooKeeper, doozerd, etcd
        • 強い一貫性を持つ似たような基盤だが、監視の仕組みが異なる
    • Q&A
    • Consul Template
      • サーバ内の定形作業を自動化
      • テンプレートを元に作業実行
      • ファイルの変更をフックに処理実行
      • consul-template という daemon
      • 設定ファイルを自動書き換え
      • 使い方
      • テンプレートの扱い方が重要
      • 例)
        • /etc/hosts 自動書き換え
        • Apache, Nginx の設定自動書き換え
      • 便利なところ
      • Serf との違い
      • Munin + Consul Template
    • Q&A
      • Serf は Consul の内部でしか使われなくなるのでは?
        • A) 残ると思う
          • Consul を立てるほどもない環境なら、Serf で十分なこともあるだろう
  • Vault
    • "シークレット"を管理するツール
      • トークンとか
    • 動的なシークレットの作成
      • 期限付き鍵
    • ログ保存機能
    • 使い方
      • KVS ライク
      • vault write secret/foo value=bar
      • vault read secret/foo
      • vault delete secret/foo
  • HashiCorp まとめ
    • オーケストレーションを実現する HashiCorp ツール群
    • 既存の業務フローを変えずに導入できる
    • 個々のツールを単体で使うことも、組合せも可

Atlas

XaaS 的なサービス。
開発者と運用者が同じツールを使おうという思想

  • みんなばらばらなツールを使ってる状況
  • ATLAS を使えば ATLAS に統合される
  • ATLAS の概念図
    • Application Code
    • ATLAS
      • Build
        • packer
      • Artifact Registry
      • Deployment
        • terraform
    • Application
  • Vault はまだだけど、今後入りそう
  • 開発・デプロイ・運用を1つのフローで提供
  • 2014年発表、現在ベータ版として提供中
  • 全ての機能を使う必要はない
  • DEMO
  • Q&A
    • 環境が北米というのは日本から使う上ではデメリット

LT

  • TIS 森元さん
    • CloudConductor 作ってます
    • CloudFormation みたいな
    • AWS, OpenStack に環境構築できる
    • TIS とあくしゅの提携
      • 仮想データセンター構想
      • 同じサーバがどこでも動く
      • プレスリリース駆動開発w
    • Docker 遅いよという記事を書いたら識者にボコボコにされた
      • => リベンジ記事を書いた
        • ストレージの使い方が大事のようだ

所感

HashiCorp 製品といえば @zembutsu さんという印象を持っていました。
てっきり業務の一環でいろいろ調査・検証されてるのだろうなーと思っていたのですが、ほとんどは趣味で追いかけてらっしゃるという言があり、そこにびっくりしました。

Packer あたりは成果物がイメージしやすく、試しやすい気がします。
Serf や Consul は、上手く使えればインフラの管理をする上で便利で強力なツールになりそうなので、どこかに適用できたらいいな、と思います。

おまけ

こんなの(↓)見つけちゃいました(笑)