Share
Embed
はじめてのCloudFormation
Koji Ishida
February 10, 2017
Transcript
64 slides
-
はじめてのCloudFormation 〜動的スケールをやってみた内容とその注意点〜 2017/02/10 Acroquest Technology Co., Ltd. 石田浩司 Copyright ©
Acroquest Technology Co., Ltd. All rights reserved. 1 -
自己紹介 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も滞在 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5
上司 XXX案件で、Logstashを複数台立てて、S3よりファイルを読み込み、 Elasticsearchにデータを投入したい。 たぶんこの辺がポイント。 ・データ投入時だけ、インスタンスを立てて、投入し終わったら停止。 ・インスタンスの台数は、毎回変わる。10台の日もあれば50台の日も。 ・S3のデータの読み込み対象は、毎回変わる。 ・データのキューとしてKafkaを使うかも。 そのため、ECSか、CloudFormationが有効ではないか、と思ってい ますが、このあたりの構築をヘルプして欲しい。 技術解は問わないけど、 今週中(5日)くらいで検証して欲しいかな。 ElasticsearchはVer.5系ね。 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6
Logstash Elasticsearch S3 Kafka ECS CloudFormation ← OK ← OK ← OK ← たぶん大丈夫 ← OK ← 知らん 4.5/6 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8
きちんと言われた内容を 確認しようと後で 後悔しました。 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 9
・・・ということを 学べた経験の共有 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11
上司 XXX案件で、Logstashを複数台立てて、S3よりファイルを読み込み、 Elasticsearchにデータを投入したい。 たぶんこの辺がポイント。 ・データ投入時だけ、インスタンスを立てて、投入し終わったら停止。 ・インスタンスの台数は、毎回変わる。10台の日もあれば50台の日も。 ・S3のデータの読み込み対象は、毎回変わる。 ・データのキューとしてKafkaを使うかも。 そのため、ECSか、CloudFormationが有効ではないか、と思ってい ますが、このあたりの構築をヘルプして欲しい。 技術解は問わないけど、 今週中(5日)くらいで検証して欲しいかな。 ElasticsearchはVer.5系ね。 -
やりたいことを整理するとこんな感じ? Copyright © Acroquest Technology Co., Ltd. All rights reserved.
12 ・・・ 当時Ver.5系が AWSになかったので EC2インスタンスを利用 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 13
上司 XXX案件で、Logstashを複数台立てて、S3よりファイルを読み込み、 Elasticsearchにデータを投入したい。 たぶんこの辺がポイント。 ・データ投入時だけ、インスタンスを立てて、投入し終わったら停止。 ・インスタンスの台数は、毎回変わる。10台の日もあれば50台の日も。 ・S3のデータの読み込み対象は、毎回変わる。 ・データのキューとしてKafkaを使うかも。 そのため、ECSか、CloudFormationが有効ではないか、と思ってい ますが、このあたりの構築をヘルプして欲しい。 技術解は問わないけど、 今週中(5日)くらいで検証して欲しいかな。 ElasticsearchはVer.5系ね。 -
調査ポイントを整理 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
14 ・・・ ECS? CloudFormation? 必要な時に必要な分だけ 立ち上がって処理開始 アクセスパスが毎回、 インスタンス毎に変わる -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 15
パッと考えた感じ ECSより CloudFormationかなぁ -
調査ポイントを整理 1. インスタンスの一斉立ち上げ ① コマンド一発で(後々立ち上げはスケジューリング)。 ② 台数の指定は立ち上げ時に指定できるようにする →CloudFormationならできそうだ。 2. S3へのアクセスパスは毎回異なる
① EC2インスタンスが起動時にどこにアクセスするかを理解し ている必要がある。 – ECインスタンス立ち上げ時に自身の役割を理解させる?できる? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 16 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 17
ま、CloudFormationで -
ゴールイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved.
18 ・・・ 検証するだけなので 一旦Kafkaは構成から抜く -
ゴールイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved.
19 ・・・ ※最終的にはEMRを使うようになります。 -
調査の流れをイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved.
20 DAY 1 • EC2インスタンスなどの起動対象を準備 • EC2インスタンスのユーザデータ設定 DAY 2 • CloudFormationでインスタンス立ち上げ用スタック作成 • EC2インスタンス数の動的変更調査 DAY 3 • S3アクセスパス動的割り当て調査 • 全体の疎通確認 ※残り2日は予備日で考える。 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 21
DAY 1 DAY 1 • EC2インスタンスなどの起動対象を準備 • EC2インスタンスのユーザデータ設定 DAY 2 • CloudFormationでインスタンス立ち上げ用スタック作成 • EC2インスタンス数の動的変更調査 DAY 3 • S3アクセスパス動的割り当て調査 • 全体の疎通確認 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 22
EC2インスタンスなどの起動対象を準備 EC2インスタンスのユーザデータ設定 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 23
特に問題なかったので SKIP (・ω<) -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 24
DAY 2 DAY 1 • EC2インスタンスなどの起動対象を準備 • EC2インスタンスのユーザデータ設定 DAY 2 • CloudFormationでインスタンス立ち上げ用スタック作成 • EC2インスタンス数の動的変更調査 DAY 3 • S3アクセスパス動的割り当て調査 • 全体の疎通確認 -
CloudFormationでインスタンス立ち上げ用スタック作成 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
26 とりあえずわからないことだらけ Webでそれっぽいサンプル探して 改修しようかな -
CloudFormationでインスタンス立ち上げ用スタック作成 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
27 とりあえずわからないことだらけ Webでそれっぽいサンプル探して 改修しようかな 都合の良いサンプルなんか大体ない -
本当にシンプルなサンプルが見つからなかった。。。 1. VPC作成をするとか、新規にSG作るとかそういう Too muchなものばかり。 ① VPCは最初から指定されたものを使いたい ② SGも同様 ③
画面から選択とかいらないから、まず最小構成でEC2イン スタンスを起動するようにしたい 2. AWS CloudFormation Designerは、使い方を学ぶだけ で予定期間使っちゃいそう。。。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 29 このあたりから少しずつ焦り始める -
必要そうな項目だけ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の模様。 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 31
EC2インスタンスの設定は 一つずつ記述が必要 毎回必要数分 インスタンス設定を書く必要有 動的にインスタンス数変更不可 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. CloudFormationだけでEC2イ
ンスタンス数の動的変更難しい ですね。Terraform使えば・・・ 上司 CloudFormationだけで実現で きるといいよね。 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 33
CloudFormationだけで -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 34
AutoScaling AutoScalingGroup -
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日足が出た -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 36
DAY 3 DAY 1 • EC2インスタンスなどの起動対象を準備 • EC2インスタンスのユーザデータ設定 DAY 2 • CloudFormationでインスタンス立ち上げ用スタック作成 • EC2インスタンス数の動的変更調査 DAY 3 • S3アクセスパス動的割り当て調査 • 全体の疎通確認 ※0.5日遅れ -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 37
S3アクセスパス動的 割り当て調査 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. どうやって自動起動したEC2
インスタンスに自分の役割を 認識させたらいいんだよ・・・。 無責任な 先輩Lambda信者 Lambda書けLambda。シュッ とやればOK。 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 42
せめて一斉起動時の 起動順番がわかれば 対応できるんだけど・・・ -
起動順番とパスを紐づけておけば対応できる 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 ① ② ③ ④ ⑤ ⑥ -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 44
ami-launch-index -
ユーザデータに設定して解決! "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日遅れ -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 48
プロジェクトに報告入れて ミッション完了 ※1日遅れ -
跳ね上がっていたコスト 1. 実施していたこと ① ユーザデータの修正(起動 →失敗→再起動) ② CloudFormationのテンプレ ート修正 2.
テンプレート適用後は確実 にスタックを削除、かつEC2 インスタンスも削除されてい ることは確認済。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 50 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 51
CloudFormationで 起動失敗した場合に EBSが残っていた -
原因は「起動失敗」→「再起動」時にEBSが残ったこと 1. 度重なるCloudFormation テンプレート修正(起動→失 敗→再起動)により、EC2 停止時にEBSが削除されて いなかった。 ① 100GB超のEBSが150以 上残っていた。
2. 即不要なEBSを削除して事 なきを得た。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 52 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 53
EBSの残骸に気を付けましょう ※監視するだろう普通、というのは置いておいて・・・。 時間なかったんで勘弁してほしい。 -
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日遅れ -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. S3パスの対象が10を超えると
対象パスが重複するんだけど。 プロジェクト メンバ -
11個目以降のアクセスパスが重複する Copyright © Acroquest Technology Co., Ltd. All rights reserved.
56 ※全体で1日遅れ ① ② ③ ⑩ ⑪ ・・・ ⑫ -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 57
調査したら確かに 11個目からパスが重複 ami-launch-indexが 11個目から”0”スタート -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 60
Auto Scaling 側の挙動で、 キャパシティが10以上に指定された 場合は10台ずつインスタンスを立ち 上げるようになってるよー。 サポート センター 無慈悲な仕様による制限 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 61
ただ救いの手が! ※この相談(待ち)の間にEMRにプロジェクト方針決定 案1: DynamoDB のアトミックカウ ンタを使って採番する 案2: SQS と組み合わせてワーカー のようなアーキテクチャを構成する 案3: Amazon EMR を使用する サポート センター -
こういうのも試してみたかった Copyright © Acroquest Technology Co., Ltd. All rights reserved.
62 ① ② ③ ⑩ ⑪ ・・・ ⑫ ・・・ ←事前に処理の登録が必要 or -
今回学んだこと 1. CloudFormationは本当に便利 2. 利用時に関連するサービスの監視(ゴミが残らないかな ど)は必須 3. メタデータを利用して効率的なEC2インスタンス運用 4. 何か困ったらすぐサポートセンターに助けを求めよう!
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 63 -
Copyright © Acroquest Technology Co., Ltd. All rights reserved. 64
Infrastructures Evolution ご清聴ありがとうございました