自己紹介
- 夏目祐樹 (ナツメユウタ)
- Twitter, GitHub: @sinofseven
- 株式会社クリック
- 好きなもの:
- 物語、音楽、AWS、Ruby、サーバーレス
- 最近やってるゲーム
- .hack G.U. Last Record
アジェンダ
- ヤクの毛刈り
- そして氷河を目指すことにした
- 氷河を目指して
- CLIでヤクの毛刈り
ヤクの毛刈り
yak shaving
Yak shaving is the art of doing something that you have to do before you can do something that you have to do before you can do something that you have to do before you can do something important.
yak shaving
- 2000年にMITメディアラボのJeremy H. Brownという人が送ったメールで最初に使われたらしい
- やりたいこととは別の何かをしていること
- (極論)
例
車のワックスがけをしようとして、
動物園でヤクの毛刈りをしている状態
例 (正確には)
- 車のワックスがけをしよう
- ホースが壊れてるからホームセンターに行こう
- 途中に橋があって交通料がいるからEZパスなしで行くの面倒だし、お隣さんに借りよう
- その前に息子が借りたクッションを返さないと
- クッションの詰め物がとれちゃったから、ヤクの毛がいるな
- 動物園でヤクの毛刈りをしてる
例について
- アメリカで一般向けに説明された例文
- これで一般にも浸透したらしい
- あと詳しいことはBlogosの記事を見て欲しい
そして氷河を目指すことにした
外付けHDDの容量が少なくなってきた
買い換える?
でも、前に二度故障を経験したしなぁ
- 落としてから動きが悪くなった
- Linux動かしてたら、一部データを破損した
Amazon Glacier
Amazon Glacier
- データのアーカイブおよび長期バックアップを行うためのストレージ
- Glacierは日本語で、"氷河"
- $0.004 : GB あたり/月
Glacier was 破産メーカー
Glacier is not 破産メーカー
2016年12月に料金体系が変更に
Amazon Glacierで高額料金請求は「過去の話」になりました【2017年最新情報】
Glacierの使い方 (アップロード、リスト)
若干S3と似てる
- S3:
- 箱(バケット)を作って、もの(オブジェクト)を入れる
- 箱の中身のリストは随時更新される
- Glacier:
- 箱(バケット)を作って、もの(アーカイブ)を入れる
- 箱の中身のリスト(インベントリー)は毎晩(?)更新される
Glacierの使い方(ダウンロード)
- 取得Jobを発行する
- 取得Jobの完了を待つ
- 完了Jobからアーカイブをダウンロード
これ手動でやるの面倒じゃね?
- 設定していれば、取得Jobの完了はSNS Topicにメッセージが来る
- Amazon SNS: AWSのPub/Subメッセージサービス。
- SNS Topic: メッセージが飛んでくる先
- LambdaのトリガーイベントとしてSNS Topicを指定できる
サーバーレスのクライアント作れるかもしれない
Glacier Serverless Client
Glacier ServerLess client
Glacier SL
Glacier Express
Glacier Expressの構成
Fargate
- re:Invent 2017で発表された新サービス
- Dockerコンテナーのマネージド・サービス
- 仮想マシン? いえ、知らない子ですね
- 今まではEC2上で動いていて、課金もEC2ベース
氷河を目指して
基本方針
- サービス関して検証を行う
- 上手く行ったら、CloudFormationからやってみる
まずはFargate by CLI
- 新サービスで情報が少ないし、難易度高そう
- 実際、某ブログ(oo.IO)を見てCLI (tool)で動かしてみようとすると、CLI Toolのバージョンが変わっててできなかった
Fargate by Web Console
- Web Consoleからやってみる
- CLIで作った環境をベースにやってみる
- やっぱり失敗: docker pullができてない
- すべてWeb Consoleからやってみる
- 成功: どうも仮想ネットワークの設定が原因
- ECRを使っていれば外につながってなくてもできるかも
- 成功: どうも仮想ネットワークの設定が原因
CloudFormationでFargateを
- Fargateの環境をCloudFormationで構築してみよう
- CloudFormationで構築するのはちょっと面倒なので楽をするために Serverless Frameworkを使うことにする
- Serverless Framework: Lambdaなどのデプロイなどができるツール。CloudFormationだけを動かすこともできる
- Serverless FrameworkだとCloudFormationのYAMLを書くのに注意が必要
- じゃあ、CloudFormation用のCLI Toolを作るか
- これよりヤクの毛刈りを開始する!!
CLI でヤクの毛刈り
AWS CLIでCloudFormationをやるときに困ること
- (create|update|delete)-stackした時に、そのコマンドが正常に発行されたかしか取得できない
- 実際にリソースの作成や削除が進んでいるかは別のコマンドで取得することになる
- waiterを使えば終了の監視はできるかもしれない
- スタック名とか毎回コマンドのオプションとして書かないといけない
Serverless Frameworkで好きだったこと
- (deploy|remove)でverboseオプションを付けると、CloudFormationで作成/削除してるリソースを見ることができる
- スタック名とかを設定ファイルの中身から自動的に生成してくれる
何をできるようにするか
- スタックの作成/削除が終了するまでコマンドの実行が止まらない
- verboseオプションでリソースの作成/削除イベントを表示するようにする
- スタック名などの設定をファイルからも取得できるようにする
- 優先順位
- コマンド引数
- 設定ファイル
- 環境変数
- 優先順位
言語選定
- Rubyを選択
- 普段使いのNode.jsでもいいんだけど
- イベント取得部分でループを回すことになるから面倒
- v7.6のasync/awaitを使えば楽だけど、Lambdaがv6.10までだからそもそも勉強すらしてない
- イベント取得部分でループを回すことになるから面倒
- そして何よりも
- Rubyが好き
作成/削除イベントの取得 (1)
(create|update|delete)_stack && describe_stack_events
- そのスタックのイベントを時系列降順で取得できる
- 一度に取得できるのは合計サイズが1MBまで
- 超えるとnext_tokenなるものが発行され、それを使って取得する
- 今回は直前で実行したxxx-stackのイベントのみ取得できればいいから考えない
作成/削除イベントの取得 (2)
- xxx_stackのオプションでclient_request_tokenを指定すると、eventの情報の中に同名で表示される
- これを使って今回の作成/削除のイベントかを判断する
作成/削除イベントの取得 (3)
- イベント取得ループの終了条件
- リソースの論理名がスタック名と同じ名前のもので、ステータスの末尾が
COMPLETE
になっているものを取得できたら終了する - ただし、delete_stackの場合は注意が必要
- 論理名がスタック名のイベントがそもそも発行されない
- そのタイミングでスタックの完全削除がされてるらしく、describe_stack_eventsで例外が発生する
- リソースの論理名がスタック名と同じ名前のもので、ステータスの末尾が
RubyでCLI Toolを作る
- Thorというgemが便利そうなのは調べた
- オプションだとか、例外処理とかは未検証
- 今週Fukuoka.rbがあるはずだったからそこで聞く予定だった
さらなる問題: 名前
まとめ
- yak shavingという言葉があるよ
- Glacierはバックアップ用のストレージとして便利そうだよ
- こうやってヤクの毛刈りをして、目的と別のことするっていうのはどうなんだろうね? やっぱりやめた方がいいのかな?
- CloudFormationのCLI Toolを知っている方がいれば教えてください