Upgrade to Pro — share decks privately, control downloads, hide ads and more …

はじめてのCloudFormation

Avatar for Koji Ishida Koji Ishida
February 10, 2017

 はじめてのCloudFormation

Avatar for Koji Ishida

Koji Ishida

February 10, 2017
Tweet

More Decks by Koji Ishida

Other Decks in Technology

Transcript

  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も滞在
  2. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5

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

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

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

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

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

    12 ・・・ 当時Ver.5系が AWSになかったので EC2インスタンスを利用
  8. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 13

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

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

    パッと考えた感じ ECSより CloudFormationかなぁ
  11. 調査ポイントを整理 1.  インスタンスの一斉立ち上げ ①  コマンド一発で(後々立ち上げはスケジューリング)。 ②  台数の指定は立ち上げ時に指定できるようにする →CloudFormationならできそうだ。 2.  S3へのアクセスパスは毎回異なる

    ①  EC2インスタンスが起動時にどこにアクセスするかを理解し ている必要がある。 – ECインスタンス立ち上げ時に自身の役割を理解させる?できる? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 16
  12. ゴールイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

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

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

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

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

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

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

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

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

    27 とりあえずわからないことだらけ Webでそれっぽいサンプル探して 改修しようかな 都合の良いサンプルなんか大体ない
  21. 本当にシンプルなサンプルが見つからなかった。。。 1.  VPC作成をするとか、新規にSG作るとかそういう Too muchなものばかり。 ①  VPCは最初から指定されたものを使いたい ②  SGも同様 ③ 

    画面から選択とかいらないから、まず最小構成でEC2イン スタンスを起動するようにしたい 2.  AWS CloudFormation Designerは、使い方を学ぶだけ で予定期間使っちゃいそう。。。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 29 このあたりから少しずつ焦り始める
  22. 必要そうな項目だけ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の模様。
  23. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 31

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

    ンスタンス数の動的変更難しい ですね。Terraform使えば・・・ 上司 CloudFormationだけで実現で きるといいよね。
  25. 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日足が出た
  26. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 36

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

    S3アクセスパス動的 割り当て調査
  28. Copyright © Acroquest Technology Co., Ltd. All rights reserved. どうやって自動起動したEC2

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

    せめて一斉起動時の 起動順番がわかれば 対応できるんだけど・・・
  30. 起動順番とパスを紐づけておけば対応できる 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 ① ② ③ ④ ⑤ ⑥
  31. ユーザデータに設定して解決! "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日遅れ
  32. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 48

    プロジェクトに報告入れて ミッション完了 ※1日遅れ
  33. 跳ね上がっていたコスト 1.  実施していたこと ①  ユーザデータの修正(起動 →失敗→再起動) ②  CloudFormationのテンプレ ート修正 2. 

    テンプレート適用後は確実 にスタックを削除、かつEC2 インスタンスも削除されてい ることは確認済。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 50
  34. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 51

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

    EBSの残骸に気を付けましょう ※監視するだろう普通、というのは置いておいて・・・。  時間なかったんで勘弁してほしい。
  36. 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日遅れ
  37. Copyright © Acroquest Technology Co., Ltd. All rights reserved. S3パスの対象が10を超えると

    対象パスが重複するんだけど。 プロジェクト メンバ
  38. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 57

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

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

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

    62 ① ② ③ ⑩ ⑪ ・・・ ⑫ ・・・ ←事前に処理の登録が必要 or
  42. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 64

    Infrastructures Evolution ご清聴ありがとうございました