Slide 1

Slide 1 text

はじめてのCloudFormation
 〜動的スケールをやってみた内容とその注意点〜 2017/02/10 Acroquest Technology Co., Ltd. 石田浩司 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1

Slide 2

Slide 2 text

自己紹介 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2 •  石田浩司(@kojiisd) ‒  Acroquest Technology Co., Ltd. ‒  IoTプラットフォーム開発エンジニア ‒ 2012/10~2015/10 ミャンマー支社赴任 ‒ JavaOne 2015 スピーカー ‒ 2016/11 JAWS-UG 横浜支部 ‒ 2016/12 AWS re:Invent 2016 ※2017/01も滞在

Slide 3

Slide 3 text

作り側の人間です Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3

Slide 4

Slide 4 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4 ある日の作業中

Slide 5

Slide 5 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5 上司 XXX案件で、Logstashを複数台立てて、S3よりファイルを読み込み、 Elasticsearchにデータを投入したい。 たぶんこの辺がポイント。 ・データ投入時だけ、インスタンスを立てて、投入し終わったら停止。 ・インスタンスの台数は、毎回変わる。10台の日もあれば50台の日も。 ・S3のデータの読み込み対象は、毎回変わる。 ・データのキューとしてKafkaを使うかも。 そのため、ECSか、CloudFormationが有効ではないか、と思ってい ますが、このあたりの構築をヘルプして欲しい。 技術解は問わないけど、 今週中(5日)くらいで検証して欲しいかな。 ElasticsearchはVer.5系ね。

Slide 6

Slide 6 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6 Logstash Elasticsearch S3 Kafka ECS CloudFormation ← OK ← OK ← OK ← たぶん大丈夫 ← OK ← 知らん 4.5/6

Slide 7

Slide 7 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. はい、わかりました。

Slide 8

Slide 8 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8 きちんと言われた内容を 確認しようと後で 後悔しました。

Slide 9

Slide 9 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 9 ・・・ということを 学べた経験の共有

Slide 10

Slide 10 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10 いったんやりたいことを整理

Slide 11

Slide 11 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11 上司 XXX案件で、Logstashを複数台立てて、S3よりファイルを読み込み、 Elasticsearchにデータを投入したい。 たぶんこの辺がポイント。 ・データ投入時だけ、インスタンスを立てて、投入し終わったら停止。 ・インスタンスの台数は、毎回変わる。10台の日もあれば50台の日も。 ・S3のデータの読み込み対象は、毎回変わる。 ・データのキューとしてKafkaを使うかも。 そのため、ECSか、CloudFormationが有効ではないか、と思ってい ますが、このあたりの構築をヘルプして欲しい。 技術解は問わないけど、 今週中(5日)くらいで検証して欲しいかな。 ElasticsearchはVer.5系ね。

Slide 12

Slide 12 text

やりたいことを整理するとこんな感じ? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 12 ・・・ 当時Ver.5系が AWSになかったので EC2インスタンスを利用

Slide 13

Slide 13 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 13 上司 XXX案件で、Logstashを複数台立てて、S3よりファイルを読み込み、 Elasticsearchにデータを投入したい。 たぶんこの辺がポイント。 ・データ投入時だけ、インスタンスを立てて、投入し終わったら停止。 ・インスタンスの台数は、毎回変わる。10台の日もあれば50台の日も。 ・S3のデータの読み込み対象は、毎回変わる。 ・データのキューとしてKafkaを使うかも。 そのため、ECSか、CloudFormationが有効ではないか、と思ってい ますが、このあたりの構築をヘルプして欲しい。 技術解は問わないけど、 今週中(5日)くらいで検証して欲しいかな。 ElasticsearchはVer.5系ね。

Slide 14

Slide 14 text

調査ポイントを整理 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 14 ・・・ ECS? CloudFormation? 必要な時に必要な分だけ 立ち上がって処理開始 アクセスパスが毎回、 インスタンス毎に変わる

Slide 15

Slide 15 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 15 パッと考えた感じ ECSより CloudFormationかなぁ

Slide 16

Slide 16 text

調査ポイントを整理 1.  インスタンスの一斉立ち上げ ①  コマンド一発で(後々立ち上げはスケジューリング)。 ②  台数の指定は立ち上げ時に指定できるようにする →CloudFormationならできそうだ。 2.  S3へのアクセスパスは毎回異なる ①  EC2インスタンスが起動時にどこにアクセスするかを理解し ている必要がある。 – ECインスタンス立ち上げ時に自身の役割を理解させる?できる? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 16

Slide 17

Slide 17 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 17 ま、CloudFormationで

Slide 18

Slide 18 text

ゴールイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 18 ・・・ 検証するだけなので 一旦Kafkaは構成から抜く

Slide 19

Slide 19 text

ゴールイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19 ・・・ ※最終的にはEMRを使うようになります。

Slide 20

Slide 20 text

調査の流れをイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 20 DAY 1 •  EC2インスタンスなどの起動対象を準備 •  EC2インスタンスのユーザデータ設定 DAY 2 •  CloudFormationでインスタンス立ち上げ用スタック作成 •  EC2インスタンス数の動的変更調査 DAY 3 •  S3アクセスパス動的割り当て調査 •  全体の疎通確認 ※残り2日は予備日で考える。

Slide 21

Slide 21 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 21 DAY 1 DAY 1 •  EC2インスタンスなどの起動対象を準備 •  EC2インスタンスのユーザデータ設定 DAY 2 •  CloudFormationでインスタンス立ち上げ用スタック作成 •  EC2インスタンス数の動的変更調査 DAY 3 •  S3アクセスパス動的割り当て調査 •  全体の疎通確認

Slide 22

Slide 22 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 22 EC2インスタンスなどの起動対象を準備 EC2インスタンスのユーザデータ設定

Slide 23

Slide 23 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 23 特に問題なかったので SKIP (・ω<)

Slide 24

Slide 24 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 24 DAY 2 DAY 1 •  EC2インスタンスなどの起動対象を準備 •  EC2インスタンスのユーザデータ設定 DAY 2 •  CloudFormationでインスタンス立ち上げ用スタック作成 •  EC2インスタンス数の動的変更調査 DAY 3 •  S3アクセスパス動的割り当て調査 •  全体の疎通確認

Slide 25

Slide 25 text

CloudFormationでインスタンス立ち上げ用スタック作成 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 25 とりあえずわからないことだらけ

Slide 26

Slide 26 text

CloudFormationでインスタンス立ち上げ用スタック作成 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 26 とりあえずわからないことだらけ Webでそれっぽいサンプル探して 改修しようかな

Slide 27

Slide 27 text

CloudFormationでインスタンス立ち上げ用スタック作成 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 27 とりあえずわからないことだらけ Webでそれっぽいサンプル探して 改修しようかな 都合の良いサンプルなんか大体ない

Slide 28

Slide 28 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28 エンジニアあるある

Slide 29

Slide 29 text

本当にシンプルなサンプルが見つからなかった。。。 1.  VPC作成をするとか、新規にSG作るとかそういう Too muchなものばかり。 ①  VPCは最初から指定されたものを使いたい ②  SGも同様 ③  画面から選択とかいらないから、まず最小構成でEC2イン スタンスを起動するようにしたい 2.  AWS CloudFormation Designerは、使い方を学ぶだけ で予定期間使っちゃいそう。。。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 29 このあたりから少しずつ焦り始める

Slide 30

Slide 30 text

必要そうな項目だけWebから引っ張ってきた { "AWSTemplateFormatVersion": "2010-09-09", "Description": "s3 to Elasticsearch template", “Mappings”: {}, "Parameters": { # 基本的にDefault値を設定しておく “ImageId”: {}, "InstanceType" : {}, "Name": {}, "KeyName": {}, "EBSVolumeSize" : {}, "CapacitySize": {}, "S3PathPrefix": {}, "Resources": {}, "Outputs": {} } Copyright © Acroquest Technology Co., Ltd. All rights reserved. 30 必要な項目は こんな感じだった ここにEC2インスタンス の設定を書けば OKの模様。

Slide 31

Slide 31 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 31 EC2インスタンスの設定は 一つずつ記述が必要 毎回必要数分 インスタンス設定を書く必要有 動的にインスタンス数変更不可

Slide 32

Slide 32 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. CloudFormationだけでEC2イ ンスタンス数の動的変更難しい ですね。Terraform使えば・・・ 上司 CloudFormationだけで実現で きるといいよね。

Slide 33

Slide 33 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 33 CloudFormationだけで

Slide 34

Slide 34 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 34 AutoScaling AutoScalingGroup

Slide 35

Slide 35 text

AutoScalingしか対応できないの? 1.  AutoScalingAutoScalingGroupのMaxSizeとMinSizeを 一緒にすれば、起動時のインスタンス数を指定可能。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 35 “AutoScalingAutoScalingGroup” : { “Type” : “AWS::AutoScaling::AutoScalingGroup”, “Properties” : { “DesiredCapacity” : { “Ref” : “CapacitySize” }, “LaunchConfigurationName” : { “Ref” : “AutoScalingLaunchConfig” }, “MaxSize” : { “Ref” : “CapacitySize” }, “MinSize” : { "Ref" : "CapacitySize" }, "AvailabilityZones" : [] } } 0.5日足が出た

Slide 36

Slide 36 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 36 DAY 3 DAY 1 •  EC2インスタンスなどの起動対象を準備 •  EC2インスタンスのユーザデータ設定 DAY 2 •  CloudFormationでインスタンス立ち上げ用スタック作成 •  EC2インスタンス数の動的変更調査 DAY 3 •  S3アクセスパス動的割り当て調査 •  全体の疎通確認 ※0.5日遅れ

Slide 37

Slide 37 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 37 S3アクセスパス動的 割り当て調査

Slide 38

Slide 38 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 38 これが大変だった・・・

Slide 39

Slide 39 text

1回目の起動はこうでも・・・ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 39

Slide 40

Slide 40 text

2回目はこうなるかもしれない Copyright © Acroquest Technology Co., Ltd. All rights reserved. 40

Slide 41

Slide 41 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. どうやって自動起動したEC2 インスタンスに自分の役割を 認識させたらいいんだよ・・・。 無責任な 先輩Lambda信者 Lambda書けLambda。シュッ とやればOK。

Slide 42

Slide 42 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 42 せめて一斉起動時の 起動順番がわかれば 対応できるんだけど・・・

Slide 43

Slide 43 text

起動順番とパスを紐づけておけば対応できる Copyright © Acroquest Technology Co., Ltd. All rights reserved. 43 1st -> 01/xxx
 2nd -> 02/xxx
 3rd -> 03/xxx
 4th -> 04/xxx
 5th -> 05/xxx
 6th -> 06/xxx ① ② ③ ④ ⑤ ⑥

Slide 44

Slide 44 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 44 ami-launch-index

Slide 45

Slide 45 text

ami-launch-indexとは? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 45

Slide 46

Slide 46 text

ユーザデータに設定して解決! "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", “curl http://169.254.169.254/latest/meta-data/ami-launch-index > /home/ ec2-user/MyIndex.txt\n”, (諸々初期設定スクリプト呼び出し) ]]} }, Copyright © Acroquest Technology Co., Ltd. All rights reserved. 46 下記に併せて起動時のスクリプトも修正 ※さらに0.5日遅れ

Slide 47

Slide 47 text

一通り通った! Copyright © Acroquest Technology Co., Ltd. All rights reserved. 47 ※全体で1日遅れ

Slide 48

Slide 48 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 48 プロジェクトに報告入れて ミッション完了 ※1日遅れ

Slide 49

Slide 49 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 49 と、思いきや

Slide 50

Slide 50 text

跳ね上がっていたコスト 1.  実施していたこと ①  ユーザデータの修正(起動 →失敗→再起動) ②  CloudFormationのテンプレ ート修正 2.  テンプレート適用後は確実 にスタックを削除、かつEC2 インスタンスも削除されてい ることは確認済。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 50

Slide 51

Slide 51 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 51 CloudFormationで 起動失敗した場合に EBSが残っていた

Slide 52

Slide 52 text

原因は「起動失敗」→「再起動」時にEBSが残ったこと 1.  度重なるCloudFormation テンプレート修正(起動→失 敗→再起動)により、EC2 停止時にEBSが削除されて いなかった。 ①  100GB超のEBSが150以 上残っていた。 2.  即不要なEBSを削除して事 なきを得た。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 52

Slide 53

Slide 53 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 53 EBSの残骸に気を付けましょう ※監視するだろう普通、というのは置いておいて・・・。  時間なかったんで勘弁してほしい。

Slide 54

Slide 54 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 54 まだあった DAY 4 DAY 1 •  EC2インスタンスなどの起動対象を準備 •  EC2インスタンスのユーザデータ設定 DAY 2 •  CloudFormationでインスタンス立ち上げ用スタック作成 •  EC2インスタンス数の動的変更調査 DAY 3 •  S3アクセスパス動的割り当て調査 •  全体の疎通確認 DAY 4 ※1日遅れ

Slide 55

Slide 55 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. S3パスの対象が10を超えると 対象パスが重複するんだけど。 プロジェクト メンバ

Slide 56

Slide 56 text

11個目以降のアクセスパスが重複する Copyright © Acroquest Technology Co., Ltd. All rights reserved. 56 ※全体で1日遅れ ① ② ③ ⑩ ⑪ ・・・ ⑫

Slide 57

Slide 57 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 57 調査したら確かに 11個目からパスが重複 ami-launch-indexが 11個目から”0”スタート

Slide 58

Slide 58 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 58 嫌な予感

Slide 59

Slide 59 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 59 助けてサポートセンター!

Slide 60

Slide 60 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 60 Auto Scaling 側の挙動で、 キャパシティが10以上に指定された 場合は10台ずつインスタンスを立ち 上げるようになってるよー。 サポート センター 無慈悲な仕様による制限

Slide 61

Slide 61 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 61 ただ救いの手が! ※この相談(待ち)の間にEMRにプロジェクト方針決定 案1: DynamoDB のアトミックカウ ンタを使って採番する 案2: SQS と組み合わせてワーカー のようなアーキテクチャを構成する 案3: Amazon EMR を使用する サポート センター

Slide 62

Slide 62 text

こういうのも試してみたかった Copyright © Acroquest Technology Co., Ltd. All rights reserved. 62 ① ② ③ ⑩ ⑪ ・・・ ⑫ ・・・ ←事前に処理の登録が必要 or

Slide 63

Slide 63 text

今回学んだこと 1.  CloudFormationは本当に便利 2.  利用時に関連するサービスの監視(ゴミが残らないかな ど)は必須 3.  メタデータを利用して効率的なEC2インスタンス運用 4.  何か困ったらすぐサポートセンターに助けを求めよう! Copyright © Acroquest Technology Co., Ltd. All rights reserved. 63

Slide 64

Slide 64 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 64 Infrastructures Evolution ご清聴ありがとうございました