DevOpsを支える今話題のHashiCorpツール群について メモ

# DevOpsを支える今話題のHashiCorpツール群について

## 19:00 - 19:15	ご挨拶、HashiCorpについてご紹介とツール解説
**森 英悟,　HashiCorp Japan株式会社　ソリューションエンジニア**

HashiCorpはVagrantで有名になった。
https://www.hashicorp.com/

### Vagrant
https://www.vagrantup.com/
VMのラッパーツール。

### Packer
https://www.packer.io/
クラウド上のマシンイメージを簡単に作成できるツール。

### Terraform
https://www.terraform.io/
クラウドをコード化。
マルチクラウドで利用可能。
GUIコンソールで操作するのではなく、コンフィグをコード化してそこから構築できる。

### Vault
https://www.vaultproject.io/
クラウド・コンテナ向けのセキュリティ。
AWSやMySQLなどへのアクセス権をダイナミックに提供できる。

### Nomad
https://www.nomadproject.io/
k8sのリソースマネージャー。
Dockerだけでなく、VMやシェル・バッチなどへ実行も高速で可能。

### Consul
https://www.consul.io/
サービス間の連携をサポート。
サービス間のネットワークはConsul Connectでセキュリティ（自動的にTLSコネクションを張る）を担保する。

### 提供方法
* オープンソース版

* エンタープライズ版
  企業向け。
  クラスタのレプリケーション機能を提供。
  サポートを提供。

## 19:15 - 19:35	「DeNA AIインフラでのTerraform活用について(仮)」
**松木 秀憲 様,　株式会社ディー・エヌ・エー　システム本部　AIシステム部**

https://dena.com/jp/

AI・分析基盤で活躍。
AI研究開発エンジニア向けにインフラを提供。
ゲーム・スポーツなどの事業部のデータアナリスト向けに分析基盤を提供。

https://speakerdeck.com/mazgi/hashicorp-products-on-dena-ai-and-analytics-infra

### AIインフラの課題
AIプロジェクトでは小規模（2,3人）のプロジェクトが秘匿性の高いデータ、膨大なデータ（動画など容量の大きいデータも含む）を扱う。
AWS、GCP環境をすばやく用意しなければならない。

→マルチクラウドに対応したTerraformでインフラプロビジョニングする。

インスタンスの起動までをTerraformで、その後はItamaeでプロビジョニングしている。

http://itamae.kitchen/

### Packerによる解決
DeNA AIインフラではDocker化を進めている。
→Packerを利用し、AWS、GCPへのDockerリポジトリへデプロイできるようにしたい。
 開発者にはDockerを教育している。

### 分析インフラの課題
サービス（ゲームなど）からログをHadoopへデータレイクし、
EmbulkでBigQueryかHP Verticaへ置き、内製ダッシュボードツールでクエリを投げている。

http://hadoop.apache.org/
http://www.embulk.org/docs/
https://cloud.google.com/bigquery/
https://www.vertica.com/

Hadoopのバージョンアップが大変なので無くしたい…。

### Vangrantによる解決と残課題
Hadoopのバージョンアップ等を検証中。


## 19:35 - 19:55	「コンテナ基盤を支えるHashiCorpソフトウェア」
**小田 知央 様,　GMOペパボ株式会社　技術部技術基盤チーム　プリンシパルエンジニア**　

https://pepabo.com/

linyowsさん。
ペパボ研究所と九州大学が共同研究中。
FastContainerによるメール基盤研究開発、実装例をGitHubに公開中。
ペパボテックブログで社内向けVaultのワークショップについて公開中。


https://speakerdeck.com/matsumoto_r/fastcontainer-at-iot38

https://speakerdeck.com/linyows/hashicorp-softwares-on-container-base

### コンテナ基盤
k8sやDockerを利用していない。
独自コンテナ環境（Oohori,FastContainer,Haconiwa）

https://rand.pepabo.com/article/2017/06/28/iot38-matsumotory/
https://rand.pepabo.com/article/2018/03/19/ipsj-taikai-80th-udzura/

### Oohori,FastContainer,Haconiwa
ペパボ社開発コンテナ管理基盤。

### ロリポップ！マネージドクラウド
コンテナベースのPaaS。
コンテナ管理の面倒なところをペパボ社がしてくれるサービス。

https://mc.lolipop.jp/

なぜ独自開発なのか？
* 安価なコンテナ環境の提供のため。（高集積してコストを下げる）
* ユーザー管理のコンテナが継続的に安全である必要がある。（FastContainerでは定期的にコンテナが再作成される）
* コンテナリソースへの権限が柔軟である。（柔軟で動的なリソース変更が必要だった）

### ロリポップ！マネージドクラウドを支えるHashiCorpソフトウェア
#### デプロイフロー
Vagrant→CI→Knife-Zero（chefプラグイン）→OpenStack・Baremetal

https://circleci.com/
https://www.chef.io/
https://www.openstack.org/

#### 特徴
Packerで最小限のイメージを作成し、それを共通化して使い回す。
Terraformでサーバを用意し、Knife-Zeroでプロビジョニングする。

### Terraform
可能な限りModuleを分割。

### Consul
Mackerelで外形監視。内部はConsulで監視。
踏み台サーバで名前解決し多段SSHできるようにしている。
https://mackerel.io/

### Vault
PKIを利用。


## 20:00 - 20:15	「ApplibotのDevOpsを支えるTerraform/Packer(仮)」
**西村 遊 様,　株式会社アプリボット（サイバーエージェントグループ）**
**企画・開発Div.　システムオペレーションエンジニア**

https://www.applibot.co.jp/

「FGOなど大規模ゲームの課題から学ぶゲームサーバ・インフラ勉強会」のLTにも登壇して下った西村さん。

https://speakerdeck.com/gacharu/packer

### 過去にあった課題をTerraform・Packerで解決
#### Image作成
RUNDECK Ansible Packerを利用。
AMI・GCPImage・ContainerImageの作成。

https://www.rundeck.com/open-source
https://www.ansible.com/

Packerを入れる前は、
EC2起動→Ansibleでプロビジョニング→AMI作成→サーバ作成 を手動で行っていた。

Packerを使うことで、上記作業をコマンド1発で完了できるように。

詳細は技術ブログ「てっくぼっと！」

https://blog.applibot.co.jp/

#### 負荷試験
サーバエンジニアが負荷試験のシナリオ作成・試験実行・結果をまとめ、
インフラが環境作成・結果レビューする。

環境構築に3日かかっていた。（サーバエンジニアから遅いと思われているのでは）

そもそも負荷試験は、新規イベント前・サーバ構成変更・CM放映前に実施している。

* 本番同等環境（本番と同じ構成だがインスタンスクラスが小さいもの、夜間は最小化）
* 負荷をかけるサーバ（JmaterをEC2でMaster-Slave構成で作成）
* モニタリングツール

を準備しなければならない。

AWSCLIで構築順に作成していく。

* 管理が大変。
* 他のプロジェクトで再利用できない。

→秘伝のタレ化

Terraformにすることで、起動管理が集約できた。
構成要素がわかりやすくなった。

HubotでSlackから1発構築が可能になった。

→インフラ負荷削減しスピーディーに構築が可能に。

#### 新規サービスの構築
AWSアカウントを取得した際のお約束。
rootアカウントの封印など

→自動化によりAWSアカウントのスピーディーな提供が可能に。

GitLabのベースリポジトリから新規サービス毎にForkする。
設定変更はMRから行う。

https://about.gitlab.com/

### まとめ
管理・共有しやすいインフラの構築が可能に。
提携作業のテンプレ化大事。


## 20:15 - 20:30	「tfnotify - Show Terraform execution plan beautifully on GitHub」
**b4b4r07 様,　株式会社メルカリ　ソフトウェアエンジニア**

https://about.mercari.com/

社内マイクロサービス化の基盤構築を担当。

https://speakerdeck.com/b4b4r07/tfnotify-show-terraform-execution-plan-beautifully-on-github

### tfnotifyとは？
GO製CLIツール
Terraformの実行結果をパースし、SlackやGitHubにPOSTする。

https://github.com/mercari/tfnotify

https://slack.com/intl/ja-jp/
https://github.com/

### なぜ作ったのか？
モノリシックPHPアプリケーションを分割中。
マイクロサービス化のインフラにTerraformを利用しており、そこで利用するため。
Infrastructure as Codeのため、実行結果を見る習慣づけ・CircleCIが見づらいことが切欠。

### メルカリでのHashiCorpツール
メルカリ内の70以上のマイクロサービスでTerraformを利用。
プラットフォームチームとサービスチームがナレッジを共有できレビューしやすい。

サービス毎にtfstateを分け、影響範囲を限定化している。

### ツールの特徴
go言語。
GitHubだけでなくCIのConsole出力にも対応。

出力結果に重複部分がある場合、古いものが削除される。
表示は必要な部分だけハイライトして簡略化している。


## 20:30 - 20:45	「dwangoでのHashiCorp OSS活用について(仮)」
**鈴木 栄伍 様,　株式会社ドワンゴ　第二サービス開発本部　Dwango Cloud Service部**
**Consultingセクション　第二プロダクト開発部　第一セクション**

http://dwango.co.jp/

### HashiCorp OSS in dwango

ニコニコ動画・ニコニコチャンネルなどを担当。
最近ではニコニコアンケート・Mastodon・社内AWSコンサルティングを担当。

### dwangoインフラ
* VMware vSphere
* AWS
* ベアメタル

### Packer
* VagrantのBOX作成
* AMI作成

### Consul
* サービスティスカバリ
* KVS・ヘルスチェック
  社内のDBマネジメントサービスに利用

### Terraform
* AWS環境の構成管理
  ニコニコアンケート・Mastodon・ニコナレ・N予備校などの一部で利用。
  ニコニコアンケートのテンプレートを基に2日ぐらいでMastodonを作成。

### 活用事例
#### CI
本番環境で障害を出さないか心配…。

Github Jenkins Terraformなどを使用。

https://jenkins.io/

1. PRが出る
2. Jenkinsでpr_test環境でplan→Apply→Destroy
3. Sandbox環境（起動しっぱなし）にPlan→Apply
4. 全て通ったらMergeする

ステップ毎に結果をSlackへ通知するので進捗がわかる。
完了はメンション付きで通知する。

Github上に✅ ❌が付き、環境を壊す・壊さないがわかる。

### CD
CIが通ったらDEVへデプロイしたいが手動は面倒。

Jenkinsでジョブ化して自動デプロイできるように実装。
Jenkins上の「ビルド実行」をクリックすることで自動実行される。

Slackに通知するので成否を簡単に確認できる。

### これから期待したいこと
* Consul Connect
* sentinelをOSS化してほしい
* Vault導入、便利そうだが運用設計パターンを作るのが難しい