jtwp470’s blog

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

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 までご連絡を!

Certified Kubernetes Application Developer 試験を受験してきました

Certified Kubernetes Application Developer (CKAD) - Cloud Native Computing Foundation

多分、日本人では2番めのベータテスター*1になったのではないでしょうか? CKADのベータ試験を先程受験してきました。

https://www.cncf.io/wp-content/uploads/2018/04/kubernetes-ckad-color.png

あんまり資格試験とか興味がなかったのですが最近kubernetesに興味を持ち始めていろいろ使うようになってからもっと理解を深めたいけど学ぶ題材がないなぁという状態でした。そこで聞いたCKADのベータ試験が始まると聞いてせっかくだから受験してどういう問題が出るか見てみよう、勉強しようという気持ちで受験してきました。 出題内容もCKAと違ってkubernetesの利用者向けの試験ですので使う私からしたら勉強になるな、という決意です。

受験について

現在はベータ試験のため、ベータ試験に申し込みます。ただし書いている現在 (4/30) で消えているのでもうベータ試験の募集は終了してしまったようです。 受験料は$1000 と書かれていましたがベータ試験のクーポンコードを入力すると$100 となりました。クレジットカードで決済します。

The passing score for the CKAD exam has now been set to 66%. After you receive your score, and if you do not pass, you will have a free retake eligibility for twelve months.

送られてきたメールにはこのように書いてあります。合格点は66%以上なようです。また試験を受けて不合格だった場合には12ヶ月の間であれば1回は無料で再受験できるようです。

その他

その他細かいことですが受験の際に疑問になったことが2つほどあり、解消したので一応情報として掲載しておきます。

ID について

Candidates are required to provide a means of photo identification before the Exam can be launched. Acceptable forms of photo ID include current, non-expired: passport, government-issued driver's license/permit, national ID card, state or province-issued ID card, or other form of government issued identification. If acceptable proof of identification is not provided to the exam proctor prior to the exam, entry to the exam will be refused. Candidates who are refused entry due to lack of sufficient government issued ID will not be eligible for a refund or rescheduling. Please also note that the presented international Passport or government issued form of identification must contain Western (English) characters.

メールにて受験の必須要項としてこのようなものが送られてきます。簡単に訳すと次のようになります。

受験者は試験が始まる前に写真付きのIDが必要です。受理される形式のものとしては期限内で有効なパスポート、政府発行の運転免許証、国民IDカード、州政府発行なIDか、そのほか政府の発行するIDとなります。試験の前に受理できる受験証明書が提出されない場合、試験を受験することは出来ません。政府発行によるIDを試験前までに用意できず受験拒否となった受験者は払い戻し、または試験の日にちの再設定の対象となりません。さらにパスポートや政府発行のIDには西洋の(英語)文字が書かれている必要があります。

私は日本政府発行のパスポートを所持しているためそれを用いました。おそらく日本国内発行の写真付きIDのうち英語が書かれているものはパスポートかアマチュア無線従事者免許証くらいしか存在しないと思います。 さて、用意はしたのですが提出先はどこなのでしょうか? 調べても見当たらず結局受験日になってしまいました。結論を言うと提出先があるのではなく受験前にWebcamの前に提示して見せるというものでした。なのでそこはあんまり心配するものではないです。

英語について

日本人、英語力低いですよね。私もその一人で英語力ダメダメです。私の英語力はTOEICで700点くらいしかないクソ雑魚なので割と英文読むのがしんどいです。一応チャットで試験中に英語を日本語に翻訳するためにGoogle Translateを用いてもいいか? と質問してみたところ、Extensionをつかうならいいよ、と言われたので、英語に関しては心配しないでもいいかと思います。 ただ、心配ならk8s.ioのドキュメントが大体辞書なしでサラッと読めるくらいの英語力はほしいところです。

f:id:jtwp470:20180430220140p:plainGoogle Chrome の翻訳Extension

出題内容について

  • 13% – Core Concepts
  • 18% Configuration
  • 10% Multi-Container Pods
  • 18% – Observability
  • 20% – Pod Design
  • 13% – Services & Networking
  • 8% – State Persistence

割と受験範囲がほぼこれどおりでます。

kubernetes.io

は一通り舐めておいたほうが無難です

感想

とにかく2時間で20問は量が多かったです。なので何問かは解かずに捨ててしまいました。意味がわからんな、と思ったら落として言ってもいいと思います。 あとWebコンソールのエディタが貧弱なので書くのがしんどくなります。この辺エディター使っていいよとかになってくれればいいんですけどね。 更にググるのが禁止になり公式ドキュメントしか参照が許されないので2時間英語と格闘が続いて疲弊しますw k8s.io のドキュメントに検索機能があるため、そこの検索で何とかしましたが英語だったのがちょっとしんどくなりましてw

ひとまず、Kubernetesを勉強してみて、自分の能力を確認してみるならうってつけの試験かなと思いました。

結果

結果が来ました。残念ながら不合格でしたorz

f:id:jtwp470:20180501114914p:plain

2週間程度で適当にk8sを触っている分だと半分くらいしか理解できていないということがわかりましたw もう一度再挑戦ができるので再度勉強をし直して再受験したいと思います! 後受かったら何を勉強したかざっとまとめようかとおもいますw

*1:1番目はおそらくCAの青山さんです。https://developers.cyberagent.co.jp/blog/archives/15383/

はてなブログがSSL対応されたのでこちらを技術ブログとしようと思います

表題のとおりです。今結構前からmediumをブログとして使っていたのですが、はてなブログを使わない理由の1つにSSL対応されていないということがあったのですが、先日公式からアナウンスが有りました。

staff.hatenablog.com

本ブログもSSL化に対応されたので早速SSLを有効化しました。

挙動について

ちょいっと技術的な話ですが、curl で自分のブログにSSLでアクセスしてみます。

% curl -I https://jtwp470.hatenablog.jp/
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 11 Mar 2018 02:59:30 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: User-Agent, X-Forwarded-Host, X-Device-Type
Access-Control-Allow-Origin: *
Content-Security-Policy-Report-Only: block-all-mixed-content; report-uri https://blog.hatena.ne.jp/api/csp_report
P3P: CP="OTI CUR OUR BUS STA"
X-Cache-Only-Varnish: 1
X-Content-Type-Options: nosniff
X-Dispatch: Hatena::Epic::Web::Blogs::Index#index
X-Frame-Options: DENY
X-Page-Cache: hit
X-Revision: bfbec940d94e11790280484f3b97149a
X-XSS-Protection: 1
X-Runtime: 0.047087
X-Varnish: 432949723
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS
Cache-Control: private

こんな感じ。HTTP/2 には対応してないみたいです。ちなみにこのcurl は HTTP/2 をビルドオプションにつけているため、対応しているサイトであれば自動的にHTTP/2になります。

% curl --version
curl 7.58.0 (x86_64-apple-darwin16.7.0) libcurl/7.58.0 OpenSSL/1.0.2n zlib/1.2.8 libidn2/2.0.4 nghttp2/1.31.0
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy

% curl -I https://jtwp470.net/
HTTP/2 200
server: nginx/1.10.3 (Ubuntu)
date: Sun, 11 Mar 2018 03:02:27 GMT
content-type: text/html
content-length: 6328
last-modified: Mon, 24 Jul 2017 14:31:33 GMT
etag: "597604c5-18b8"
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
strict-transport-security: max-age=31536000
accept-ranges: bytes

セキュリティ的な面ではどうなのか

% curl -I https://jtwp470.hatenablog.jp/
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 11 Mar 2018 02:59:30 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: User-Agent, X-Forwarded-Host, X-Device-Type
Access-Control-Allow-Origin: *
Content-Security-Policy-Report-Only: block-all-mixed-content; report-uri https://blog.hatena.ne.jp/api/csp_report
P3P: CP="OTI CUR OUR BUS STA"
X-Cache-Only-Varnish: 1
X-Content-Type-Options: nosniff
X-Dispatch: Hatena::Epic::Web::Blogs::Index#index
X-Frame-Options: DENY
X-Page-Cache: hit
X-Revision: bfbec940d94e11790280484f3b97149a
X-XSS-Protection: 1
X-Runtime: 0.047087
X-Varnish: 432949723
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS
Cache-Control: private

もう一度これを見てみましょう。よくある、Strict-Transport-Security ヘッダがついていないですね。もしかするとはてなブログの前段はみんな同じロードバランサーを経由しているのかもしれませんね。もしこれを設定してしまうと全はてなブログに対してSSLでアクセス行ってしまいますからねw

結構いろんなドメインでいろんなサイトをホスティングしている影響がこんなところに出ているのかなと思います。

ということで特筆して何かしているわけではなく、ただただHTTP over SSLが使えるようになったと考えるといいかなと思います。

Mixed Content を潰す

SSL化すると http で利用しているCSS、JS、画像などが含まれていると mixed contentという警告が出てしまいます。なるべく潰すために片っ端から潰します。 基本的に http から https へ書き換えるだけで大丈夫です。

ただ、今使っているテンプレートの一部にhttpが残っているようでどうやって潰すか考えています。何かいい方法を思いついたら投稿します。

何か致命的にヤバイところを見つけましたらTwitterか、コメント欄で教えてもらえると助かります。

最後に

ひとまずはてなブログSSL化されて良かったです。ただ、個人的にはブログを書くのにいちいちMarkdownを書いてプレビューみて確認っていうのはもう面倒極まりないことで可能であればDropbox Paperのような雰囲気で書けると非常に重宝するなと言う気持ちなので早くそういうのに対応してほしいです。 ひとまずMediumにある技術ネタはこちらに移動して、Mediumの方はオタク旅行記などジャンルを変えていこうかなと思います。

medium.com