Ansible + Packer + CloudFormationでらくらく構築・運用

37
Developer Day Ansible + Packer + CloudFormation で らくらく構築・運用 1 H-3 望月 政夫, AWSコンサルティング部 クラスメソッド株式会社 Ⓒ Classmethod, Inc. 2015年03月29日 #cmdevioH

Transcript of Ansible + Packer + CloudFormationでらくらく構築・運用

Page 1: Ansible + Packer + CloudFormationでらくらく構築・運用

Developer Day

Ansible + Packer + CloudFormation で らくらく構築・運用

1

H-3

望月 政夫, AWSコンサルティング部 クラスメソッド株式会社

Ⓒ Classmethod, Inc.

2015年03月29日

#cmdevioH

Page 2: Ansible + Packer + CloudFormationでらくらく構築・運用

自己紹介• 望月 政夫 • Twitter: @Canelmo • @Classmethod 2013.10~ • AWS環境構築・その他諸々担当 • DeNA Baystars 2007.04~

2Ⓒ Classmethod, Inc.

Page 3: Ansible + Packer + CloudFormationでらくらく構築・運用

おしながき• 今日話す技術について • 利用してみた感想 • 今後の展望について

3Ⓒ Classmethod, Inc.

Page 4: Ansible + Packer + CloudFormationでらくらく構築・運用

本題

4

Page 5: Ansible + Packer + CloudFormationでらくらく構築・運用

Developer Day

Ansible + Packer + CloudFormation で らくらく構築・運用

5

A-1

望月 政夫, AWSコンサルティング部 クラスメソッド株式会社

Ⓒ Classmethod, Inc.

2015年03月29日

Page 6: Ansible + Packer + CloudFormationでらくらく構築・運用

Developer Day

Ansible + Packer + CloudFormation で らくらく構築・運用

6

A-1

望月 政夫, AWSコンサルティング部 クラスメソッド株式会社

Ⓒ Classmethod, Inc.

2015年03月29日

Page 7: Ansible + Packer + CloudFormationでらくらく構築・運用

「らくらく」とは

7

Page 8: Ansible + Packer + CloudFormationでらくらく構築・運用

人によって観点はちがう• 構築が楽 • 自動化 • テスト • ドキュメント

• 運用が楽 • 障害対応 • 監視 • 定常作業

8Ⓒ Classmethod, Inc.

Page 9: Ansible + Packer + CloudFormationでらくらく構築・運用

個人的には• 楽したいポイントがある • SSHでログインしたくない • SSH鍵管理めんどう

• 何度もManagement Consoleを開きたくない • アクセスキー管理めんどう • EC2の設定ミスした時にもう一回同じ操作をしたくない

9Ⓒ Classmethod, Inc.

Page 10: Ansible + Packer + CloudFormationでらくらく構築・運用

個人的な「楽したい」を 満たすための 環境を作ればよい

10

Page 11: Ansible + Packer + CloudFormationでらくらく構築・運用

個人的には• 楽したいポイントがある • SSHでログインしたくない • SSH鍵管理めんどう

• 何度もManagement Consoleを開きたくない • アクセスキー管理めんどう • EC2の設定ミスした時にもう一回同じ操作をしたくない

11Ⓒ Classmethod, Inc.

Page 12: Ansible + Packer + CloudFormationでらくらく構築・運用

Ansible• 構成管理ツール • Chef, Puppetと同等 • YAMLで管理 • Dynamic Inventory機能による動的ホスト一覧生成 • AutoScaling環境に有用

12Ⓒ Classmethod, Inc.

Page 13: Ansible + Packer + CloudFormationでらくらく構築・運用

動的ホスト一覧生成• インベントリファイル(ホスト一覧)不要 • タグやセキュリティグループで絞り込み可能 • 数百台単位でも利用できる • https://raw.githubusercontent.com/ansible/ansible/devel/plugins/inventory/ec2.py

13Ⓒ Classmethod, Inc.

Page 14: Ansible + Packer + CloudFormationでらくらく構築・運用

Packer• AMI作成補助ツール • Vagrant等のHashicorp製 • 新規にEC2を起動し、Ansibleで設定を流し込んだものをAMI化する • 常に初期状態からAMIを作ることができる

14Ⓒ Classmethod, Inc.

Page 15: Ansible + Packer + CloudFormationでらくらく構築・運用

CloudFormation• AWSのサービス管理ツール • 利用するサービスをJSONで定義 • 一度書いたテンプレートファイルは再利用可能 • 他のリージョンでも動く(動くように書いていれば!) • http://dev.classmethod.jp/tag/cloudformation/

• 便利に使うためのツールもある • kumogata(https://github.com/winebarrel/kumogata)

15Ⓒ Classmethod, Inc.

Page 16: Ansible + Packer + CloudFormationでらくらく構築・運用

組み合わせて使う• CloudFormationでAWSの構築 • Packer + AnsibleでAMI作成 • CloudFormationのパラメータ(AMI ID)を変更 • 変更が入ったらAnsibleを再度適用 • PackerでAMIの作成

• それぞれ違ったレイヤでの活用 • CloudFormation: AWS部分 • Ansible: AWSに依存しないOS上設定 • Packer: AWSに依存しない仮想イメージ

16Ⓒ Classmethod, Inc.

Page 17: Ansible + Packer + CloudFormationでらくらく構築・運用

活用事例をいくつか

17

Page 18: Ansible + Packer + CloudFormationでらくらく構築・運用

とあるイベントのお仕事で• EC2数百台を利用するアプリケーション基盤の構築 • マルチリージョン • アプリケーション(node.js)は数種類 • DynamoDB, SNS, S3, Route53…

• CloudFormationで一発構築・削除 • AMIのコピー(Packerの機能)

18Ⓒ Classmethod, Inc.

Page 19: Ansible + Packer + CloudFormationでらくらく構築・運用

Packerの実行時間が長い• node.jsのコンパイルに時間がかかりストレス • PackerのAMI作成のプロセスを分離することにした

19Ⓒ Classmethod, Inc.

Amazon Linux Base AMI Golden AMI

・App配備 ・App設定変更

・OS基本設定 ・ミドルインストール

Page 20: Ansible + Packer + CloudFormationでらくらく構築・運用

Packerの実行時間が長い• node.jsのコンパイルに時間がかかりストレス • PackerのAMI作成のプロセスを分離することにした

20Ⓒ Classmethod, Inc.

Amazon Linux Base AMI Golden AMI

・App配備 ・App設定変更

・OS基本設定 ・ミドルインストール

・AMI作成時間の短縮 ・変更箇所の局所化

Page 21: Ansible + Packer + CloudFormationでらくらく構築・運用

Packerの実行時間が長い• node.jsのコンパイルに時間がかかりストレス • PackerのAMI作成のプロセスを分離することにした

21Ⓒ Classmethod, Inc.

Amazon Linux Base AMI Golden AMI

・App配備 ・App設定変更

・OS基本設定 ・ミドルインストール

・AMI作成時間の短縮 ・変更箇所の局所化

Page 22: Ansible + Packer + CloudFormationでらくらく構築・運用

AMIが複数作成されると• AMIが大量に作成されてよくわからないことに…

22Ⓒ Classmethod, Inc.

Page 23: Ansible + Packer + CloudFormationでらくらく構築・運用

AMIが複数作成されると• AMIが大量に作成されてよくわからないことに… • 方針を変えた • アプリケーションごとにAMIを作成していたがそれを廃止。AMIを1種類にしてCloud DI を活用

23Ⓒ Classmethod, Inc.

Page 24: Ansible + Packer + CloudFormationでらくらく構築・運用

Cloud DIパターン• CDPの一つ • EC2タグの値に応じてふるまいを変える • Environmentタグ • production • dev • staging

• Roleタグ • main • batch…

24Ⓒ Classmethod, Inc.

Page 25: Ansible + Packer + CloudFormationでらくらく構築・運用

使ってみた感想• 設定が秘伝のタレ化することが少なくなった • だれでもいつでも、どの環境でも再現することができる • 簡単に手を加えることができる

• 他リージョンへのAMIコピーが容易 • Cloud DIはPackerに関わらずオススメ

• AMIの作成はそれなりに時間が掛かる • 時間がかかるプロセス(e.g. ミドルウェアのコンパイル)とアプリケーションのビルドは別段階にしたほうがよい

25Ⓒ Classmethod, Inc.

Page 26: Ansible + Packer + CloudFormationでらくらく構築・運用

活用事例その2• 社内で利用するAtlassian環境のリプレース • Confluence : 情報共有(Wiki) • JIRA : チケット管理 • Stash : ソースコード共有(Git) • Crowd : ID管理

• EC2一台で稼働 • 抱えていた問題点 • EC2障害発生時の手動対応 • バージョンアップ時の対応

26Ⓒ Classmethod, Inc.

Page 27: Ansible + Packer + CloudFormationでらくらく構築・運用

構成図

27Ⓒ Classmethod, Inc.

DNS管理

Page 28: Ansible + Packer + CloudFormationでらくらく構築・運用

特徴• Auto Healingパターンを採用 • 起動時にData Volumeの自動マウント • Jenkinsによる簡易CI環境

28Ⓒ Classmethod, Inc.

Page 29: Ansible + Packer + CloudFormationでらくらく構築・運用

Auto Healingパターン• 別名アンデッドパターン • 詳細は

29Ⓒ Classmethod, Inc.

Page 30: Ansible + Packer + CloudFormationでらくらく構築・運用

Auto Healing• AutoScalingの特殊な形 • min = n • max = n • desired = n

• 障害が発生したら • 一台Stop • 新しいインスタンスが起動 • もとどおり!

30Ⓒ Classmethod, Inc.

Page 31: Ansible + Packer + CloudFormationでらくらく構築・運用

障害発生時• AutoScalingで最新のAMIから起動 • 起動後にイメージの初期化処理 • EBSのマウント • DNSの登録 • 最新アプリケーションのデプロイ • 各サーバ間での連携登録

31Ⓒ Classmethod, Inc.

Page 32: Ansible + Packer + CloudFormationでらくらく構築・運用

EBSの自動マウント• Atlassian製品はローカルディスクにファイルを作成する -> AutoScalingには本来不向き

• Root Volumeとは別のEBSに置いておこう • Cloud DIを活用し、マウントするEBS IDをタグに記載

• CloudFormationでEBSも作成する

32Ⓒ Classmethod, Inc.

Page 33: Ansible + Packer + CloudFormationでらくらく構築・運用

Jenkinsによる自動化• Packer + AnsibleによるAMI作成 • 作成されたイメージのServerspecによるテスト • AutoScalingのAMI切替 • AMIの世代管理 • etc…

• 定形作業は基本的にお任せします

33Ⓒ Classmethod, Inc.

Page 34: Ansible + Packer + CloudFormationでらくらく構築・運用

AMIの世代管理• AMIが増えすぎるのを防ぐ • Jenkinsで、日次で世代数を指定してAMI削除 • AMIにタグ「Persistent」をつけたものは削除されない

• 特定のバージョン・既存LaunchConfigurationのものは残す

34Ⓒ Classmethod, Inc.

Page 35: Ansible + Packer + CloudFormationでらくらく構築・運用

運用してみた感想• Auto Healingは本当に楽 • メンテナンスの心配がいらない安心感 • AutoScalingでインスタンスが変わった通知は必要かも

• アプリケーションの制約を知る必要がある • データがどこに書かれるのか • アプリケーションの起動時にどのような処理が走るか

35Ⓒ Classmethod, Inc.

Page 36: Ansible + Packer + CloudFormationでらくらく構築・運用

今後は• CloudFormationの実行自動化 • 現状はDry-runができない • CloudFormationに関するテスト • ツールを作る・・・? • CloudFormationのCI

• AMI管理のベストプラクティス確立 • CloudFormation -> Terraform?

36Ⓒ Classmethod, Inc.

Page 37: Ansible + Packer + CloudFormationでらくらく構築・運用

Developer Day

(サンプル)ご静聴ありがとうございました。 スライドは後日ブログで公開します。

37

A-1

Ⓒ Classmethod, Inc.

#cmdevio2015