jtwp470’s blog

日記とかプヨグヤミングとか

SRE NEXT 2020 の参加と登壇してきました

ブログを書くのは久々です。

先日、2020年1月25日 に行われた SRE NEXT 2020 に参加と、プラチナスポンサーセッションとして今仕事でしていることをSREと絡めてお話しさせていただきました。

sre-next.dev

まずこの場を用意してくださったスタッフの方々、そして機会を用意してくださった会社の皆様、またスライドを前日遅くまでレビューと意見を盛り込んでくれた同僚に感謝いたします。

SRE NEXT 2020 に登壇のきっかけ

今も相変わらず株式会社ミクシィに所属しており、今まではモンスターストライクのSREをしておりましたが、2019年の4月より異動をし、新規決済系サービスである、「6gram」(ろくぐらむ) の開発と運用をしておりました。10月か、11月の終わり頃、せっかくだからやっていることをSREと絡めて話してくれないか、というお誘いをいただき、スポンサーセッションの20分の枠をいただきました。

話したネタなどについて

最初は、1月までの期間の間で発生した運用の問題などをどうSREと絡めて解決していったかを話そうかなと考えていたのですが、ぶっちゃけていえばそこまで運用面で大きな問題は起きず、ちょうど2月初旬にかけてPCI DSS の監査も重なり、我々のアプリケーションががんばって準拠しつつ、運用を楽にする工夫をしている、この辺りの工夫やハックをSREと絡めれば何か考え方などを聴衆の方々に持ち帰ってもらえるのではないか。あわよくばせっかく作っているアプリも使ってくれるといいな。という気持ちで書き始めました。

speakerdeck.com

  • Keep
    • 20分枠をはみ出さずしっかり話すことができた
    • コンテナセキュリティやサーバーレスなど伝えたいことを伝えられた (気がする)
    • 何人かに発表よかったといってもらえた
  • Problem
    • SRE の話題感がCFPのテキストから全く読み取れない感じだったからか人がほとんどいなかった (´・ω・)
  • Try
    • SRE NEXT を意識するようなスライドにすべきだった
    • 次もこういうイベントに登壇していきたい

登壇後、ブースにきて同じような悩みを持っていると教えてくれた方、発表後すぐによかったですよ。と声をかけてくれた方など、聞いてくださった方々、本当にありがとうございました。 SREネタもそのほか、決済系周りのネタもちょこちょこ溜まってきているのでどこかいいタイミングでまた登壇したいと思います。

参加記

お昼

お昼は豊洲の「いちむら」というところでご飯を。刺身より肉料理の方が人気なのかも...

ヨガ体験

ちょっと早めについたので気になっていたヨガをやりました。座りながらでもできるヨガということで20分くらい。とても気持ちよかったですしよかったです。 こういう健康増進法みたいなのがテックカンファレンスには求められているのかも!

基調講演

speakerdeck.com

「自動化の皮肉」というワードを知らなかったので勉強になりました。あとはエッジコンピューティングなど5Gが出てくるとエッジでよしなにできる環境が必要となってきそうなのでさらに分散コンピューティングの知識や考え方が必要だろうなぁと考えさせられる講演でした。

仕事でもよく、DynamoDBをよく使っていて、個人的には結構好きなソリューションなのですが、やはり分散環境にしたおかげで出てくるRDBMSとは異なる特性などには悩んでいて難しいものだなぁと感じたところでした。

絶え間なく変化するメルカリ・メルペイにおけるSREの組織と成長

speakerdeck.com

メルカリ、メルペイSREの組織の成長と取り組みについて。 メルカリさんでは、SREをさらに細分化しているということで、最後のパネルディスカッションでもあったように、SWEの中の専門職で信頼性を担うものがSREなのであればさらにその領域の中で細分化されていくのはある程度大きな組織であると当然なのかもなぁ。と感じました。ちょっと大変だろうなぁと思うのはこういう凄腕エンジニアをまとめるEMの方はどうやったらそういう立場になれるのでしょうね...

計画的に負荷リスクを排除するためのキャパシティプランニング

speakerdeck.com

キャパシティプランニングを適切に行うために負荷環境をきちんとつくっている。とのことで、自分も仕事で散々作りたいと思いつつ全然できていないことなので素直に素晴らしい取り組みだ。と感じました。さらにプランニングなどのビジネスサイドにわざと遅い環境で操作をしてもらい、どこから許容できないか、不快な環境というものを数値化してきちんとしたSLOを設定できているところも素晴らしいですし、真似したいと強く感じました。 結構負荷環境その物を作るのが苦労しそうな気がするのですがそこら辺はどうやって作っているのか、もちょっと聞いてみたかったですね。

Webサービスを1日10回デプロイするための取りくみ

speakerdeck.com

カヤックfujiwaraさん。初めて実物をみましたw。1日10回デプロイする (しかも営業時間内に) というのはどれくらいの頻度でするものなのか、というのを改めて数値化されていたことがよかったです。10回くらいデプロイできるんじゃね。って軽く思っていたのが恥ずかしいくらいです💦

やはり、テストが遅いということがイライラするというのはみんな共通ですね。そしてCircleCIで殴るという。仕事でCodeBuildを使っているのですが、CircleCIのようなお気軽分散環境が提供されたらもっといいのになぁと恨めしく思いながら聞いていましたw

まとめ

上に書いた講演以外にも並行していろいろな講演があり、全部聞くことができなかったのであとで復習したいですね。 久々にこういうイベントに行き刺激をもらえました。 またあったら行きたいと強く思えるイベントで最高でした。イベントを作ってくれた皆様、本当にありがとうございました!

追記

6gr.am

いまちょうどこういうアプリケーションをつくっています。iOSも本当にもう間も無く (数日以内) に出る予定だと思います。 具体的には、一人でJCBカードの番号を最大30枚! 発行できたり、複数人でグループを作ってそこで出資しあってお金を使う、みたいな今までにない面白い使い方ができるアプリです。 実は中身もほぼすべて自分たちで実装しているので、日本国内のカードネットワークで流れの仕組みや、どういう応答をすればいいか、などなどいろんなことに詳しくなりました。 今は還元施策とかはありませんが、将来的にはそういうのもあるかもですねw

てなわけで興味のある方、ぜひ使ってみてください。招待制なので使ってみたければ私にぜひDM などでお声掛け頂ければ!よろしくお願いします

追起その2

iOS 版リリースしました🍻

Dropboxの2段階認証キーにTouch IDが使えるようになってたのでその設定など

こんにちは。最近会社でYubikey 5Cを買ってもらい、AWSやら何やらにセキュリティキーとして登録しまくっています。 そんなさなかに見つけてしまったのですが、表題の通り Dropboxで2段階認証のキーにTouch IDが使えるようになってました

基本的に役立たないTouch Barと超便利なTouch IDくんですが、今回もTouch IDが大活躍しますw

いらすとや - 指紋認証

前提条件

前提条件といいますかこれが再現したのは以下の環境です。

もしかすると環境によってまだしっかり動かない場合もあると思います。

まずはじめに2段階認証を有効にする

Dropboxでは物理キーを登録するためには物理キー以外の2段階認証の設定をまずする必要があります。まぁみんなよく知っているGoogle AuthenticatorやAuthyなどを使って登録します。

help.dropbox.com

続いて、物理キーとしてTouch IDを登録

個人アカウントのセキュリティタブ を開き、セキュリティキーの項目をクリックします。

以下の画面のようになるので、「新しいキーを追加」をクリックします。

新しいキーを登録する

続いて、特に何も考えずに、「設定を開始」します。

設定を開始

キーは何も差し込んでいませんが、「キーが差し込まれました」をクリック。

キーを差し込まずに差し込まれました

そうするとこのような画面が出てくるので、「Built-in Sensor」を選択してTouch IDに指を置きます。

ビルトインセンサーを選択してTouch IDに指を載せる

問題なく指紋が読み取られると、Chromeが許可して〜と言ってくるので許可してあげます。 許可する

あとは適当にMacBook Pro - TouchID とかと名付けておきましょう。

ログインを試してみる

2段階認証が有効になっているのであれば一度ログアウトして再度ログインすると2段階認証の入力が求められるはずです。問題なくいけば、指紋をTouch IDに置くだけで2段階認証を突破できます。

指紋認証で2段階認証を突破

今までのようにAuthyなどでいちいち6桁の番号を読みとって入力する手間が省け超便利なのでおすすめです。

ちなみに

ChromeではTouchIDを利用することができましたが、Firefox Quantum 65.0.2 (執筆時の最新バージョン) では指紋のようなマークは出てきますがTouch IDに指をおいても反応しませんでしたorz Firefoxの場合

まとめ

というわけで WebAuthnのデモサイト以外でU2FのトークンとしてTouch IDを使える場所を見つけたのははじめてだったので驚いて記事にしてしまいました。もし他のWebサイトでも使えるよーという情報を御存知の方がおりましたら教えて下さーい

終わりだよー(●・▽・●)/

ちなみに、Chrome は 70 から Touch ID が使えるように実装が入っているようです。

AWS App Mesh を触ってみる

AWS App MeshというAWS上のマイクロサービスのアプリケーション間の通信を監視、制御できるサービスメッシュがパブリックプレビューとしてリリースされていましたので簡単に触ってみました。

App Meshでは、アプリケーションの可視化や通信制御などにはオープンソースで開発されていて、最近CNCFから卒業したEnvoyを利用しているようです。

www.cncf.io

blog.envoyproxy.io

App Mesh を触ってみる

今回は
github.com に則ってApp Meshを触ってみます。

準備

最新版のAWS CLIをインストールしてきます。この記事を執筆した際は、後に利用する aws appmesh というサブコマンドがHomebrewで入る最新版の 1.16.60 には入っていなかったため、pip でその時の最新版 1.16.68 をインストールしました。

You must use at least version 1.16.65 of the AWS CLI with App Mesh. To install the latest version of the AWS CLI, see Installing the AWS Command Line Interface in the AWS Command Line Interface User Guide. (とあるのでAWS CLIが1.16.65 以上であれば入っているそうです)

つづいて、App Meshを触るためにAWSの情報を設定します。

export AWS_PROFILE=<aws-profile for aws-cli>
export AWS_REGION=<aws-region for aws-cli>
export AWS_DEFAULT_REGION="$AWS_REGION"

App Meshは

  • us-west-2
  • us-east-1
  • us-east-2
  • eu-west-1

でのみサポートされているようなのでそのうちの一つのリージョンを選びましょう。私はオレゴンリージョンを選びました。

次に、以下の環境変数を設定します。

export ENVIRONMENT_NAME=appmesh-example
export MESH_NAME=default
export KEY_PAIR_NAME=default
export ENVOY_IMAGE="111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.8.0.2-beta"
export CLUSTER_SIZE=5
export SERVICES_DOMAIN=default.svc.cluster.local

こんな感じ。特にキーペアの部分だけはきちんと存在するやつを登録すればokかと思います。

ここまでできたら次はVPCを作成します。今回はありがたい事にCloudformationによるテンプレートがすべて用意されていたためコマンド1発で完了します。

$ ./infrastructure/vpc.sh create-stack

つづいてApp Meshをセットアップします。

$ ./infrastructure/mesh.sh create-mesh

最後にECSクラスターを作成してみます。(EKSでも良かったのですがちょっと面倒臭そうだったので一旦ECSで)

デプロイするアプリケーションの用意

example のリポジトリには、ColorAppというアプリケーションが用意されています。それぞれ、apps/colorapp/src/{colorteller,gateway} と用意されているため、ECRのリポジトリを作成しておき、イメージを作成しECRにプッシュしておきます。

それぞれ環境変数

export COLOR_GATEWAY_IMAGE=<image location for colorapp's gateway>
export COLOR_TELLER_IMAGE=<image location for colorapp's teller>

を設定して ./deploy.sh を実行するとプッシュまでしてくれます。

アプリのデプロイ

ECSの準備まで終わったら、virtual nodeとvirtual routerとrouteをセットアップします。

$ ./servicemesh/deploy.sh

つづいて先程用意した2つのアプリケーションをECSにデプロイします。

$ ./ecs/ecs-colorapp.sh

アプリへアクセスしてみる

適当に1台踏み台インスタンスをECSクラスターのVPC上に作成しておきます。そこにSSHしてさらにノードのどれかにSSHしてみると

<ec2-bastion-host>$ curl -s http://colorgateway.${SERVICES_DOMAIN}:9080/color

で動いている様子がわかります。

で?

App Meshもとい、Envoy Proxy を用いるとマイクロサービス間の通信の制御等ができるのでマイクロサービス毎にカナリアリリースなどができるそうですが、私自身Envoyをほとんど触ったことがなくどうやったらそれができるのかよくわかりませんでしたorz

また、メトリクスやログ、追跡といったこともできるのですが、現状ではAWS CloudWatchやX-Rayのサポートはされておらずこれから始まるようだったので特に何もできませんでしたorz

ということで現状ではできた〜(完) という全く役に立たない記事になってしまいましたがもしAWS App Meshに触れてみようという方がいたらまず先にEnvoy とそれらの可視化を先に学んでくると良さそうですw

もし、X-RayやCloudWatchで可視化できるようになったら続きを書くかもです。

Google Cloudの障害レポートを読んだ

つい最近、Google Cloudを利用しているサービスで大きな障害が発生していました。有名なサービスとしてはポケモンGoSpotifyなどがサービス不可の状況になっていたようです。日本国内ではインシデント発生時刻が早朝のためあまり大きな障害はなかったようですが、米国時間ではちょうどお昼ごろのため大きな影響があったと推測されます。

障害と影響範囲

障害自体は2018/07/17 12:17 - 12:55 (PDT) です。日本時間だと 7/18 の早朝 5時台に障害が発生した模様です。

当該時刻にはその他のサービスもエラーを上げていたようで、珍しくステータスダッシュボードが燃えていました。

f:id:jtwp470:20180722184006p:plain

Service Outageになっているサービスは、

の4つでインシデントレポートによると、

  • App Engine にデプロイされているサービス
  • Cloud Functions
  • Stackdriver の Web UI
  • Dialogflow
  • Cloud Support Portal/API

が影響を受けていたようです。

根本的な原因

この障害の根本的な原因はGoogle Cloud Load Balancingの障害によるものでした。 Networkingの障害レポートにROOT CAUSEというセクションがあったため読んでみました。

まず前提としてGoogle Cloudのロードバランサ(Google Front End: GFE)は2層の階層構造を持っているそうです。第1層目がユーザーからのリクエストを直接受けつけ、続いてサービスのデプロイされているリージョンか、アベイラビリティゾーンに存在する2層目のロードバランサーに振り分けられるような構成だそうです。この構成になっていることでエンドユーザーが世界のどこにいてもそのユーザーの一番近い第1層のGFEに接続に行き内部でルーティングされ第2層のGFEを経由してバックエンドサービスに繋がってレスポンスを返すとなっている。とのことです。

f:id:jtwp470:20180722191440p:plain GFEの構成図 (想像)

The GFE development team was in the process of adding features to GFE to improve security and performance. These features had been introduced into the second layer GFE code base but not yet put into service. One of the features contained a bug which would cause the GFE to restart; this bug had not been detected in either of testing and initial rollout. At the beginning of the event, a configuration change in the production environment triggered the bug intermittently, which caused affected GFEs to repeatedly restart. Since restarts are not instantaneous, the available second layer GFE capacity was reduced. While some requests were correctly answered, other requests were interrupted (leading to connection resets) or denied due to a temporary lack of capacity while the GFEs were coming back online.

今回はGFEの開発チームが第2層のロードバランサーにセキュリティと性能の向上する機能を追加しているときに起きた。と書かれています。この機能はコードベースにはマージされていますがサービスインはしていなかったそうです。またこの機能の一部にGFEを再起動させるバグが混入されていましたが、テストや初期のデプロイでは検知できなかったとも書いてあります。実際にこの設定を本番環境に適用したところ、GFEが一気に再起動していき、ロードバランサーの容量不足になり処理ができなくなってしまった。というのが今回のインシデントにつながった。とあります。 f:id:jtwp470:20180722192506p:plain

テストを網羅しているつもりでもテストでカバーできていなかったところのバグが世界的な障害の起因となるというのは怖い話ですがあのGoogleでもやるときはやるんだなー(笑)とも思いました。

まとめ

こういう前段の障害をどう回避するか結構難しい問題かな?と思います。もしやるとすると、GCP以外の他のクラウドにもサービスを投入しておいて障害が出次第、DNS等の設定でGCP側に振り分けないようにするくらいしか対応ができないかなーと思います。もし良さげな方法を知っている方がいたら教えてください。

Publickeyにも情報が日本語で出てきました。 www.publickey1.jp

空港のラウンジを使うために知っておきたいこと

最近友人によくサクララウンジにチェックインしてるけど、どうやって行けるの? みたいなことを質問されて、ラウンジとはなんぞやという話をしました。 せっかくなのでブログ記事にまとめて書いちゃおうかな〜と思いましたので空港のラウンジに興味のある方、または航空会社の上級会員システムとは何なのか? ということに興味のある方の参考になれば幸いです。

なお、本記事内は基本的に国内線に限定して話をします。国際線の場合はちょっと異なることをご了承ください。& もしかすると正しくない情報があるかもしれません。その際はコメントください。

TL; DR

ラウンジとは?

ラウンジ - Wikipedia によれば、

ラウンジ (Lounge) とは待合室のひとつで、公共の休憩室やロビー、家庭内の居間や客間など、寛げるスペース。または換気扇の下。

と書かれています。空港の場合は待合室にフリードリンクとお菓子等がある場所。と考えておけばいいでしょう。

JALサクララウンジ JALサクララウンジ

地上交通と違い飛行機に搭乗するには結構待ち時間が多いものです。もちろんボーディングブリッジの前のベンチで待つのもいいと思いますがせっかくの旅なのでもっとゆっくりしたいと思いませんか? こんなときとかにラウンジを使えるようにしておくと便利です。

ラウンジにも2種類ある!

実はラウンジというものは空港の場合、2種類あります。

クレジットカードラウンジ

クレジットカードラウンジ、または有料ラウンジというものです。クレジットカードラウンジは、いわゆるゴールドカードなどを持っていると無料で入れるラウンジになります。

福岡空港のカードラウンジに行った際は、フリードリンク、またはビール缶1つ、どちらかを選べというようなシステムでした。 また、割と世の中にゴールドカード以上のクレジットカードを持っている方は多く、時期によってはファミレスのような混み具合だったりします。 更に国内線の場合、多くの空港で保安検査の手前にあります。つまり保安検査場が混んでいることを見越して早めにラウンジを出ないといけないというデメリットがあります。ただ、もちろんゴールドカード等を作るだけで無料で入れるというのは非常に魅力的ですね。

航空会社ラウンジ (エアラインラウンジ)

日本国内では大手航空会社としてJAL(日本航空)とANA(全日本空輸) の2社があります。 航空会社ラウンジはクレジットカードのゴールドカードといったようなものでは入れず、例えばJALサクララウンジでは次のような方が入ることが出来ます。

f:id:jtwp470:20180513002457p:plain

簡単にまとめると、

  • 高いお金を払って上級クラスに搭乗してくれる人
  • 何度も搭乗してくれる上客

であるとこのようなサービスを受けることができるのです。

またラウンジは保安検査場を超えた制限エリアに存在するため飛行機が飛ぶギリギリまでラウンジでゆっくりすることができます。

更に航空会社ラウンジではアルコール類も大変充実しています。 f:id:jtwp470:20180513000821j:plain新千歳空港国内線サクララウンジ (ビールが4種類もある)

f:id:jtwp470:20180513001148j:plain

福岡空港国内線サクララウンジ (焼酎が置いてある。黒霧島と黒白波)

f:id:jtwp470:20180513001243j:plain

↑成田空港国内線サクララウンジでビールとおつまみとともに

f:id:jtwp470:20180513001347j:plain

新千歳空港にて、ウイスキーがおいてありました (名前を忘れた)

酒好きなら本当に最高です。搭乗時間まで無限に酒を飲んでしまいますw

ちなみに国際線のラウンジでは食事もついてきますが、国内線ラウンジにはありません。あるといっても柿ピー程度のビールのおつまみと飴玉くらいです。食事にはあまり期待しない方がいいかと思います。

ここまでのまとめ

ここまでのまとめとして、ひとまず何でもいいからラウンジに入りたい!という方はゴールドカードを作りましょう。年会費5000円程度ですよ

ゴールドカード

ちなみに個人的なおすすめですが、20代なら三井住友Visaプライムゴールドカードがおすすめです。

おすすめポイントは

  • 世界で使える安心のVISAブランド
  • 年会費が激安。5000円だが、割引サービスを使うと1800円程度で持てます。しかも初年度年会費無料。
  • デザインがかっこいい! (クソダサクレジットカードってあんまり使いたくなくないですか?)

(ちなみにもしこの記事を読んでこのカードに入会しようかなーという人がいたら連絡してくださいw 友達紹介特典がつくかもしれませんw)

しかし、航空会社ラウンジに入るにはどうすりゃええんやという疑問が残りますね。そこで僕がやっている裏技を紹介します。

JAL CLUB EST に入会しよう

JALには20代限定でJAL CLUB ESTという会員サービスがあります。通常のJALカードに + 5400円で加入できるすぐれものです。

JAL CLUB EST では、 f:id:jtwp470:20180527154214p:plain

というような特典がついています。中でも、

  • 年間5回国内線サクララウンジの利用
  • マイル有効期限の延長
  • e JALポイント 年間5000円分積算
  • 搭乗ボーナスマイル FLY ON ポイントの優遇

というものです。例えば帰省などで年1回飛行機に乗れば全て元が取れるというすぐれものだと思います。年会費は5400円もしますが、そもそも航空券に充当できるe JALポイントが5000円分つくのでそもそもほぼ0円みたいなものですし、サクララウンジも使えて上級会員の気持ちを味わえますw

ちなみに私はこれに味をしめてすでに現時点で4回もサクララウンジに入っています

f:id:jtwp470:20180527154625p:plain f:id:jtwp470:20180527154639p:plain

さらに、実はこのカードを持っているとサクララウンジに入れるのは紹介しましたが同行者も無料でサクララウンジに入ることができます。とても優秀ですね。通常ならJMBサファイア以上じゃないと同行者は無料で入れません。

ANAに同じようなサービスはないの?

ANAの場合は、スターアライアンスの上級会員になるか、SFC(スーパーフライヤーズカード) を持つ必要があります。ちなみに20代向けのCLUB ESTのようなサービスは現状ないようです。

最後に

本記事を読んでJALカード会員になろうかな〜と思った方、かつ僕に友達紹介マイルをあげてやってもいいぞという方、ぜひ友達紹介させてください。友達紹介リンクを送るのでコメントか、TwitterのDM (@jtwp470 までご連絡を!