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

はじめてのCloudFormation

Koji Ishida
February 10, 2017

 はじめてのCloudFormation

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 ご清聴ありがとうございました