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

はじめてのCloudFormation

7082ac9c4be7588ac197ba17d0972242?s=47 Koji Ishida
February 10, 2017

 はじめてのCloudFormation

7082ac9c4be7588ac197ba17d0972242?s=128

Koji Ishida

February 10, 2017
Tweet

Transcript

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

    Acroquest Technology Co., Ltd. All rights reserved. 1
  2. 自己紹介 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も滞在
  3. 作り側の人間です Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    3
  4. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4

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

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

    Logstash Elasticsearch S3 Kafka ECS CloudFormation ← OK ← OK ← OK ← たぶん大丈夫 ← OK ← 知らん 4.5/6
  7. Copyright © Acroquest Technology Co., Ltd. All rights reserved. はい、わかりました。

  8. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8

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

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

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

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

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

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

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

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

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

    ま、CloudFormationで
  18. ゴールイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

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

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

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

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

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

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

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

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

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

    27 とりあえずわからないことだらけ Webでそれっぽいサンプル探して 改修しようかな 都合の良いサンプルなんか大体ない
  28. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28

    エンジニアあるある
  29. 本当にシンプルなサンプルが見つからなかった。。。 1.  VPC作成をするとか、新規にSG作るとかそういう Too muchなものばかり。 ①  VPCは最初から指定されたものを使いたい ②  SGも同様 ③ 

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

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

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

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

    AutoScaling AutoScalingGroup
  35. 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日足が出た
  36. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 36

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

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

    これが大変だった・・・
  39. 1回目の起動はこうでも・・・ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

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

    40
  41. Copyright © Acroquest Technology Co., Ltd. All rights reserved. どうやって自動起動したEC2

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

    せめて一斉起動時の 起動順番がわかれば 対応できるんだけど・・・
  43. 起動順番とパスを紐づけておけば対応できる 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 ① ② ③ ④ ⑤ ⑥
  44. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 44

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

    45
  46. ユーザデータに設定して解決! "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日遅れ
  47. 一通り通った! Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    47 ※全体で1日遅れ
  48. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 48

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

    と、思いきや
  50. 跳ね上がっていたコスト 1.  実施していたこと ①  ユーザデータの修正(起動 →失敗→再起動) ②  CloudFormationのテンプレ ート修正 2. 

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

    CloudFormationで 起動失敗した場合に EBSが残っていた
  52. 原因は「起動失敗」→「再起動」時にEBSが残ったこと 1.  度重なるCloudFormation テンプレート修正(起動→失 敗→再起動)により、EC2 停止時にEBSが削除されて いなかった。 ①  100GB超のEBSが150以 上残っていた。

    2.  即不要なEBSを削除して事 なきを得た。 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 52
  53. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 53

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

    対象パスが重複するんだけど。 プロジェクト メンバ
  56. 11個目以降のアクセスパスが重複する Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    56 ※全体で1日遅れ ① ② ③ ⑩ ⑪ ・・・ ⑫
  57. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 57

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

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

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

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

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

    62 ① ② ③ ⑩ ⑪ ・・・ ⑫ ・・・ ←事前に処理の登録が必要 or
  63. 今回学んだこと 1.  CloudFormationは本当に便利 2.  利用時に関連するサービスの監視(ゴミが残らないかな ど)は必須 3.  メタデータを利用して効率的なEC2インスタンス運用 4.  何か困ったらすぐサポートセンターに助けを求めよう!

    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 63
  64. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 64

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