1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

氷河を目指してたのに、気づいたらCLIで毛刈りを始めてた話

Last updated at Posted at 2018-02-10
1 / 43

自己紹介

  • 夏目祐樹 (ナツメユウタ)
  • Twitter, GitHub: @sinofseven
  • 株式会社クリック
  • 好きなもの:
    • 物語、音楽、AWS、Ruby、サーバーレス
  • 最近やってるゲーム
    • .hack G.U. Last Record

アジェンダ

  1. ヤクの毛刈り
  2. そして氷河を目指すことにした
  3. 氷河を目指して
  4. 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パスなしで行くの面倒だし、お隣さんに借りよう
  • その前に息子が借りたクッションを返さないと
  • クッションの詰め物がとれちゃったから、ヤクの毛がいるな
  • 動物園でヤクの毛刈りをしてる

例について


そして氷河を目指すことにした


外付けHDDの容量が少なくなってきた


買い換える?
でも、前に二度故障を経験したしなぁ

  • 落としてから動きが悪くなった
  • Linux動かしてたら、一部データを破損した

Amazon Glacier

Untitled(1) (1).png


Amazon Glacier

  • データのアーカイブおよび長期バックアップを行うためのストレージ
  • Glacierは日本語で、"氷河"
  • $0.004 : GB あたり/月

Glacier was 破産メーカー

Amazon Glacierでクラウド破産しないために


Glacier is not 破産メーカー

2016年12月に料金体系が変更に
Screenshot 2018-02-10 at 13.14.06.png
Amazon Glacierで高額料金請求は「過去の話」になりました【2017年最新情報】


Glacierの使い方 (アップロード、リスト)

若干S3と似てる

  • S3:
    • 箱(バケット)を作って、もの(オブジェクト)を入れる
    • 箱の中身のリストは随時更新される
  • Glacier:
    • 箱(バケット)を作って、もの(アーカイブ)を入れる
    • 箱の中身のリスト(インベントリー)は毎晩(?)更新される

Glacierの使い方(ダウンロード)

  1. 取得Jobを発行する
  2. 取得Jobの完了を待つ
  3. 完了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の構成

Untitled.png


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オプションでリソースの作成/削除イベントを表示するようにする
  • スタック名などの設定をファイルからも取得できるようにする
    • 優先順位
      1. コマンド引数
      2. 設定ファイル
      3. 環境変数

言語選定

  • 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を知っている方がいれば教えてください
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?