あのにのに

僕の雑記

SERVERLESS FRAMEWORKが最高すぎる

最近SERVERLESS FRAMEWORKってのがリリースされました(v1) serverless.com

これなに

プログラムを書いてデプロイすると AWS LambdaとAPIGateway環境にデプロイされる。 ルーティングもYAMLで記述ができる。 基本的にはこれだけ。

動作イメージ

module.exports.piyo = (event, context, callback) => {
    const response = {
      statusCode: 200,
      body: JSON.stringify({
        message: 'おっけー!'
      }),
    };
    callback(null, response);
}
service: servicename
provider:
  name: aws
  runtime: nodejs4.3
  region: ap-northeast-1
functions:
  piyo:
    handler: handler.piyo
    events:
     - http:
         path: piyo
         method: get

これでデプロイすると、

$ serverless deploy

Serverless: Packaging service…
Serverless: Merged stage variables into ApiGateway Deployment
Serverless: Removing old service versions…
Serverless: Uploading CloudFormation file to S3…
Serverless: Uploading service .zip file to S3…
Serverless: Updating Stack…
Serverless: Checking Stack update progress…
..............
Serverless: Stack update finished…

Service Information
service: servicename
stage: dev
region: ap-northeast-1
api keys:
  None
endpoints:
  POST - https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/piyo
functions:
  servicename-dev-piyo: arn:aws:lambda:ap-northeast-1:000000:function:ms-servicename-dev-piyo

https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/piyo できた!(さんぷるなので動いてないです)

実用する

SERVERLESS FRAMEWORK本体の責務としては「デプロイするまで」というイメージです。 なので単体だと開発環境は全く用意されておらず、 開発環境を用意するには別途プラグインを入れていく必要があります。 中でも必須っぽいプラグインがいくつかあるので紹介すると、

serverless-run-function-plugin

書いたfunctionをローカルで実行する為のプラグイン

$ serverless run -f piyo

と叩けば実行される。

serverless-offline

Lambda環境をエミュレートしてくれて、ローカルでサーバを起動するプラグイン

$ serverless offline --port 3000

で立ち上がる。あとはhttpリクエスト送るだけ。

serverless-plugin-stage-variables

ステージ変数を定義出来る

(中略)
stageVariables:
  google_sheet_id: ===
  aws_access_key_id: ===
  aws_secret_access_key: ===

使ってみて

  • サーバレスのシステムがフレームワークに乗っかる形で書けるのでチームに共有しやすそう
  • ローカル環境で動作確認できるのがすごく良い
  • dev/prod環境わけられたり、とても実用的

結構本格的に使っていきそう。

webサイトを作った

Anomaly Animal

なにもないけど。

  1. Unityでそれっぽいグラフィカルな何かを作る
  2. WebGLで吐き出す
  3. 背景に組み込む
  4. S3でホスティングする
  5. 完成

です。f:id:anoChick:20161030005042p:plain

何に使うわけでもないwebサイトは好きにできるので実験的なことが出来て良い。 いろいろ追加していくかも。

かっこかわいいロゴ出来た。

f:id:anoChick:20161028032725p:plain ちっちゃい!!

anomalyanimal.comっていうドメインとってあるんだけどずっと使ってないやつ。

多分個人プロジェクト名だと思います。

Anomaly Animalって直訳すると "異常な動物" とかになるんじゃないかって思ってて、 イメージとしてはミュータントみたいな感じ。 「多様性こそ進化の可能性だよね。」とかそういう意味合い。 あとハンドルネームもじってる。

来年はちょこちょこ面白いこと出来たらいいなぁ。

Google Data Studioでプロジェクトの各指標の管理

sucrose.hatenablog.com ふむふむ。

f:id:anoChick:20161024012428p:plain こんな感じで、プロジェクトの進捗状況とか品質とかKPI指標とか見れたら良さそう。ちょっとやってみよう。

作ったものの概要

f:id:anoChick:20161024012545p:plain

1. githubやcodeclimate等、参照元サービスからデータを引っ張ってくるwebhookサーバを立てる

github.com こんな感じでSinatraで書いた。 サーバレスにやりたい人は www.github.com とか使うと良いと思います。

2. 受け取ったデータを加工してGoogleスプレッドシートに書き込む

f:id:anoChick:20161024013327p:plain こんなかんじ。 「この日誰がどのぐらいPRをCloseしたか」をみたいので、 PRがCloseされる度に1行書かれていくようにした。

3. Google Data StudioからGoogleスプレッドシートをデータソースに指定する

f:id:anoChick:20161024013451p:plain 指標が〜とかディメンションが〜とか諸々の設定もする。 GoogleAnalyticsとか使い慣れてる人は難なく設定できるはず。

できた!!

Google Data Studio、なかなか良さそうだ。 仕事でやってるプロジェクトではDatadogを使って管理しようと思ってたんですが、 カスタムメトリクス数に応じて料金が上がるのと、 データソースが柔軟でないので、 Googleスプレッドシートでゆるーくデータを扱えるのは凄い楽。 もっと厳密さが求められたり、レコード数が多いようなものだったらRDBをつかうとか、 BigQueryを使うとか、適宜やりようはありそうなので良い。

webhook最善の使い方を知りたい

anoninoni.hateblo.jp ↑の記事書いたのは、webhookされるサーバを用意しようと思ったからです。

Webサービス間連携って有名どころだとIntegrationsとして用意されてるじゃないですか。 Slack,TreasureData,Datadogとかとか。 ただ、Integrationsだけだと痒いところに手が届かない場合が多くて、webhook使って上手いことやるかーって思い立つんですけど、 結局どうやるのが最善なんですかね。 思いつくパターンとしては

1.がんばってGitHubを漁る

「何がしたいか」が明確になっている場合、同じようなことをしている人がいるとふんでGitHubから目的にあった何らかのリポジトリを探しに行く。運が良ければ最速だと思います。

2.時代はサーバレス

つい先日SERVERLESS Frameworkのv1が出たんで、使ってみようかなーと思ったんです。

serverless.com

そしたら、 APIGatewayをローカルでシミュレートするプラグインがまだv1に対応していなくて、 ローカルでの開発が結構しんどい感じでした。 なのでもうちょっとまってみようとおもいます。 SERVERLESSの発展に期待。 ちなみにSERVERLESSについては

qiita.com @horike37さんがきれいにまとめてくださっている。有り難し。

3.好きな言語で書いてサーバに乗せる

無難だけど最終手段ぽい。 サーバレスという選択肢があるのに今更サーバを立てるのがなんかね。 ちゃんとやるんならhttps対応も各々しないといけないわけだから、わりと面倒くさい。 ちょっとしたことをしたいだけなのにそんなに作りたくないよね。

どうしよ。今回は一旦3で。

AWS CerticateManagerとELBで無料ワイルドカード証明書を使う。

staging環境をポコポコ立てたいけど、httpsも使いたい。 そういう事を考えてやってみたやつです。 結論、ネタ構成だと思います。概要は下図のとおりです。 f:id:anoChick:20161022175116p:plain ポイントとしては

  • virtualhost設定以外はAWSの画面ポチポチだけで出来る。
  • AWS CerticateManagerはワイルドカード証明書も発行出来る。
  • 年間で料金計算するとELBがおよそ$216(+データ転送分)になるため 一般的な安いワイルドカード証明書よりお金がかかる
  • この構成だとELBがロードバランサの使い方がかなり限定的になりそうで微妙。

あまり実用イメージがないです。 AWS CerticateManagerで発行した証明書がELBなしでも使えるようにならないかな...

自分の脳みそは寝ているときが一番クリエイティブかもしれない。

夢を見た。

ゲームセンターのテトリスで、意図せず時空を分裂・多重化させてゲームをバグらせるお兄さん。

口喧嘩の合間に「OK,Google. それを質問して。」等と言い合うカップル。

 

たまに自分に未来予知の能力があるんじゃないかって本気で思うことがあります。

具体的なエピソードは全く覚えていないのだけれど、

夢の中では情報の整理だけではなく、ミーティングしたり、設計をしたり、何かをひらめいたりする事もあるんです。

いやまぁ、未来予知は言いすぎなんですけど、

「クリエイティブとはこういう事だ!」みたいな感じに、

自分が日常では考えつかなそうな事が夢の中では次々戸起こるので、自分の夢をかなり気に入っている。という話です。

 

何よりこの、浅い睡眠を終えた時の、脳内に麻薬物質が残ってるんじゃないかって感じモヤモヤ感。めちゃ好き。

 

もうひとねーむーり。