ITと哲学と

IT系エンジニアによる技術と哲学のお話。

ELBがApplication層でのロードバランシングに対応したらしい

AWSのELBが、Application層でのロードバランシングに対応したらしいです。 Application層で動くロードバランサーということで、ALBと呼ぶらしいです。

Application層で動作するロードバランサー

通信機能を7つの階層に分割するOSI参照モデル(物理層データリンク層・・・などに分割するモデル)の最上層であるアプリケーション層で動作するロードバランサーです。

アプリケーション層で動作するため、この層で使われているHTTPというプロトコル等をもとに負荷分散をすることが可能になったようです。

現状(2016/08)のALBはHTTPリクエストのURLを用いてバランシングすることができます。

ELBでできなかったことと、ALBでできるようになること

ELBは通信を受け、処理を自身の配下のインスタンスに振り分けるという働きをしてくれていました。この際に、全ての処理を同一グループのインスタンスに負荷を分散しながら振り分けるというのがELBの挙動になります。

一方で、ALBではリクエストのURLに基づいて処理を割り振るグループを選択することができるようになります。

例えばhttp://example.com/*へのアクセスはデフォルトでGroup1に振り分けつつ、http://example.com/fugaへのアクセスのみGroup2に割り振るといったことが可能になります。

利点

これにより、より粒度の小さいサービスの組み合わせによるサービスの提供が可能になります。

例えば、ユーザーというドメインCRUDするようなアプリケーションがあったとします。

http://example.com/user/createでユーザーを作成し、http://example.com/user/delete/{id}でユーザーを削除することができるとします。

ELBでは、ユーザーのCRUD機能を全て実装したサーバーをグループに入れておいて、http://example.com/へのリクエストを各グループに負荷分散して処理を振り分けていました。

これがALBではユーザーのCRUD機能をモノリシックに用意する必要がなくなります。

CreateやDeleteなど機能を単体で用意しておき、それらをGroup1とGroup2にそれぞれ格納します。 そして、http://example.com/user/createへの通信はGroup1に処理を振り分け、http://example.com/user/delete/{id}への通信はGroup2に処理を振り分ければいいわけです。

これによって、よりマイクロなサービスの組み合わせでサービス全体を提供することが可能になるわけです。

ALBを使う上で気をつけたいこと

deployの話

アプリケーションのdeploy周りについては考える必要が出てくる気がします。

ELBを使っていた場合はユーザーのCRUD機能が一枚岩で提供されていたので、deploy時にはまるっと入れ替えることができました。

これがALBを使っている場合はCreate機能やUpdate機能が分割できてしまうので、新旧を無停止で入れ替えようとするとタイムラグが起きて問題になる気がします。

今回は例を示す際にユーザーのCRUD機能をあげましたが、分割の単位はドメインごとに切るなりなんなり、サービスにあった切り口を考える必要があるでしょう。

可用性の話

各グループにそれぞれ別の責務を負わせるわけで、それぞれのグループで可用性を確保する必要があると思われます。複数AZで各グループ用のインスタンスを起動してあげる必要があるでしょう。 結構構成が煩雑になりそうなので、CloudFormationによるコード化はしておいたほうがいいかもしれません。

CloudFormationにはすでにALBも対応しているようで、AWS::ElasticLoadBalancingV2::LoadBalancerというようにElasticLoadBalancingV2ってやつを使ってあげればいいみたいです。

CloudFormationでストリーム名を指定してKinesisストリームを作成することができるようになりました!

2016/06/09のアップデートでストリーム名を指定してKinesisストリームを作成することができるようになりました!

https://aws.amazon.com/about-aws/whats-new/2016/06/aws-cloudformation-adds-support-for-amazon-vpc-flow-logs-amazon-kinesis-firehose-streams-and-other-updates/

詳しい方法は下記をご参照ください。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html

ここでは簡単にCloudFormationに用いるJsonをご紹介します。 と言ってもかなり直感的にNameを指定してあげたらいけます。

{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Resources" : {
    "KinesisSample": {
       "Type" : "AWS::Kinesis::Stream",
       "Properties" : {
          "Name" : "Kinesisストリーム名",
          "ShardCount" : シャード数
       }
    }
  }
}

ストリーム名を指定するために、わざわざKinesisストリームを別の手段で作成していたケースにおいて、CloudFormationに集約することができるようになりました!

AWS Sysops Administratorを取ってきたのでお勉強メモを晒す02

前回から時間が空いてしまったが、メモのバージョン2をさらします。

Serverにログインできるサービス

以下の4つのみサーバーにログインできる * Elastic Beanstalk * Elastic MapReduce * OpsWork * EC2

Elastic Load Balancer Configurations

Sticky session types

2種類のスティッキーセッションタイプがある。 スティッキーセッションはCookieを用いて行うが、そのCookieを誰が管理するかが これらのオプションの違いになる。

Duration Based Session Stickiness

ELBがCookieを払い出す方式。 リクエストに対してまずELBがCookieの有無を確認する。 Cookieがなければ既存のELBの振り分けアルゴリズムに従ってロードバランシングする。 その後、clientにCookieを渡す。このCookieには処理を行ったインスタンスを特定する何かが含まれる。 Cookeiがあれば、そのCookieに基づいて以前処理を行ったインスタンスに処理を流す。

Cookieが有効である限りStickyセッションは継続される。 Cookieの有効期間はStickiness Policyの設定によってコントロールされる。 また、処理するサーバーに問題があった場合もCookieがなかった場合と同様に処理が委譲される。

Application-Controlled Session Stickiness

アプリケーションが指定したCookieを使う。 Cookie名をELB側に教えてあげる必要がある

有効時間が来るまでは、AutoScalingしてインスタンスを増やしても すでに確立されたセッションに従って処理を振り分けるので、 有効時間が長いとなかなかスケールしない問題があるので注意。

ELBでバランシングしているASGroup内部のEC2インスタンスが、処理メトリクスを超えたので スケーリングが走って、EC2が正しくプロビジョニングされても、新しく作成したEC2に負荷が分散されない場合は スティッキーセッションを疑いましょう。 ちなみに、EC2がプロビジョニングされずに落ちている場合はEC2のコンフィグ設定が正しいか?プロビジョニングされ切る前に ヘルスチェックに引っかかってないか?を疑ってみてください。

僕はEBS最適化をサポートされてEC2インスタンスにつけようとしてEC2が永遠に立ち上がらなかったことがあります。

今日はここまで

AWS Sysops Administratorを取ってきたのでお勉強メモを晒す01

先日、AWS Sysops Administratorに合格してきました。

結果は70%と結構ギリギリな感じでした。

具体的な問題については規約上発信はできないので、学習時のメモを晒します。 受験直前とかに見てもらえると復習にはなるかも?

あ、ちなみに下記のcloudguruのコースを受けました。

https://acloud.guru/learn/aws-certified-sysops-administrator-associate

モニタリングに関するトピックス

AWSサービスの監視が行える。 HostLevelMetricsをデフォルトで監視可能。それ以外はカスタムメトリクスが必要になる。 デフォルトで監視可能なのは以下。

  • CPU
  • Network
  • Disk
  • Status Check

メモリ使用率はカスタムメトリクスであり、デフォルトでは提供されていないので注意。

デフォルトでは5分間隔で詳細モニタリングにすると1分間隔で取得。 デフォルトでは2週間データが保管される。 ターミネートされたEC2のメトリクスも同様に保管される。

カスタムメトリクスは最小で1分間隔まで。

EC2 Status TroubleShootings

StatusCheck 2/2 checks passedってEC2のコンソールに出るけどそれについて。

System Status Checks

物理的なホストで問題が生じた場合、System Status Checkに失敗する。

EC2を提供する端末のハードウェアの問題とかソフトウェアの問題。

このエラーが出た場合は、EC2インスタンスを一度停止して起動し直すことで解決出来る。

インスタンスは停止して起動すると別の物理端末上でホストされることになるので、

問題が生じたホスト以外のホストで起動し直すことができるからだ。

Instance Status Checks

VM自体の問題が生じた場合、Instance Status Checksに失敗する。 要するにEC2インスタンス自体のこと。

インスタンス自体で問題が起きているので、この問題が起きた場合はアプリケーションの設定を見直したり、 インスタンスを再起動することで解決出来る。

EBS

General Purpose SSD

  • 1GiB-16TiB
  • Maximum throughtput => 160 MiB/s
  • IOPS => 最大10kまででる

Provisioned IOPS SSD

  • 4GiB-16TiB
  • Maximum throughtput => 320 MiB/s
  • IPOS => 最大20kまででる

10k以上のIPOSが欲しかったらProvisionedの方に移りましょう

ちなみにEBSボリュームを作ると初めに5.4MのIOCreditがもらえる。これは30分間3000IOPSまでバーストできる量。

暖気運転

EBSボリュームを新しく作ったりスナップショットを適用して、初めにアクセスすると初回処理が走ってIOPSの5-50%が失われる。

事前に全領域をまずは舐めるなどして暖気しておくことで性能を発揮できる。

暖機運転としては全領域に一旦データを書きに行くことが望ましい。

が、これは新規作成したボリュームなら可能だが、スナップショットから復活させたボリュームにデータを書きに行くと消えてしまうため、スナップショットから作成したボリュームでは全てのデータを読み込むことで暖機運転を行う。

今日はここまで

CloudWatchにおけるEC2のStatusCheckについて

EC2の一覧画面に行くと、StatusCheck 2/2 checks passedとか書かれているのですが、それってなんなの?ということで調べてみた。

クリックするとSystem Status ChecksとInstance Status Checksの二つがそれぞれ成功したというふうに書かれている。

ではそれらは何なのか?そしてそれらが失敗していたらどうしたらいいのか?をいかにまとめてみた。

System Status Checks

物理的なホストで問題が生じた場合、System Status Checkに失敗する。 EC2を提供する端末のハードウェアの問題とかソフトウェアの問題。 このエラーが出た場合は、EC2インスタンスを一度停止して起動し直すことで解決出来る。 インスタンスは停止して起動すると別の物理端末上でホストされることになるので、 問題が生じたホスト以外のホストで起動し直すことができるからだ。

Instance Status Checks

VM自体の問題が生じた場合、Instance Status Checksに失敗する。 要するにEC2インスタンス自体のこと。 インスタンス自体で問題が起きているので、この問題が起きた場合はアプリケーションの設定を見直したり、 インスタンスを再起動することで解決出来る。

なのでもしもこれらのStatusCheckに失敗していたら、まず落ち着いてどちらの原因で失敗しているかを確認し、 Systemの方なら停止=>起動で、Instanceの方なら再起動をするということをまずは試してみましょう。

AWSの認定試験2つ取ってみた

仕事上AWSを使うことが増えており、どうせなのでお勉強がてら資格を取ってみた。

Solution architect associate

とりあえずAWSのサービスでどんなものがあって、どんなことができるかはすべて押さえてみた。 サービスの名前と、それらがどんなことを叶えてくれるのかが1行で説明できるようなレベルでまずは浅〜くお勉強した。

そのあとはデザインパターン本(設計と実装)を読んででてきたサービスについてホワイトペーパーを読んで自分なりにまとめた。 さらにAmazon Web Services パターン別構築・運用ガイドも最後まで目を通した。

で、模擬試験を一旦受けてみたところ6割くらいで不合格。。。

VPCやEC2の深い部分への理解が足りていなかったのでそこら辺を再度洗い直した。

合格したのは1/29だった。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services クラウドデザインパターン設計ガイド 改訂版

Amazon Web Services クラウドデザインパターン設計ガイド 改訂版

Amazon Web Services クラウドデザインパターン実装ガイド 改訂版

Amazon Web Services クラウドデザインパターン実装ガイド 改訂版

Developer associate

こちらは本やホワイトペーパーでの学習は行わなかった。

ちょうど英語の勉強をしていること、Udemyが大幅なディスカウントをしていたこともあってこれを受講した。

www.udemy.com

10時間くらいの動画講義だったので朝ちょっと早く会社に行って動画見てというのをちまちま積み重ねてお勉強してみた。 最後まで通して見て、模擬試験を受けたところ9割ほど取れていたので、速攻で予約して受験した。

結果3/12に89%で合格することができた。

日本語ではこういう動画見つけられなかったので英語できると色々と捗るなと感じた。

次は今年新しく始まる情報セキュリティマネジメント資格を取って、それからSysAdminを受けようと思う。

AWS Cloud Roadshow

KeyNote1 普及期に来たクラウド。安心して企業に導入するためのポイント

去年は大阪で1000人のエントリ。今回は1300人を超えるエントリ。

クラウドとはIT利用の新しい形

キャズムを超えて普及期に入ったAWS=>2014年時点で25%の企業が利用中

Amazonのサービスを以下の観点から支えるために生まれたのがAWS

  • スケール
  • スピード
  • UX

AWSと同じことはやろうと思えば自前でもできる。 でも皆さんのやりたいことはそんなことじゃないはず。=>「価値をお客様に届ける」ことにAWSの顧客を集中させる

クラウドに踏み出せない方々の声

ICT白書によるとクラウドサービスを利用しない理由として以下の3つがよく挙げられる。

  • 必要がない(今のままで回ってるし業務)
  • セキュリティに不安(どうなの?)
  • クラウドへの移行コスト(どうなの?)

必要がないと思う人たちへ

2つのアプローチでAWSの利用を促進している。

カイゼン的アプローチ

御社のITを楽に早く安く実現できますよ

イノベーション的アプローチ

今までできなかったことができるようになりますよ

例えばソラコム

ソラコムはAWSを使ってフルクラウドな通信事業基盤を作っているので、他の通信事業者よりも格安なSIMが提供できている。 =>AWSを使うことで安くサービスが提供できるようになった。

セキュリティに不安を感じている人たちへ

導入後企業の多くがクラウド化することでセキュリティが向上するという感想を持つことが多いことがアンケートで分かっている。

なぜ?

災害対応などのために冗長化は必須だが自社でやろうとすると複数のDC契約して、それぞれを管理するというのはとっても面倒だし大変。

脆弱性対応のパッチをAWSのエンジニアが当ててくれるので早期対応ができ、自分でやる必要がない。

第三者認証もこれだけのものを自社で取得するのは大変だ。

移行コストが大変と思っている人たちへ

VPCを使って閉域網を構築できるし、専用物理サーバーを提供することもAWSではできるようになった。 すぐに試せる仕組みがあるので、とりあえず試してみましょうよ。

AWSのソリューションアーキテクトや多数のパートナーがお手伝いできます。

最後に

なぜクラウドにするとコストが下がるのか?

Sony銀行の公開している資料で詳しく説明がされているのでオススメ。

クラウドは失敗のコストを低減できる

オンプレミスでハードウェア買ってとかやってたら失敗した時に大きな損失につながる。

クラウドであれば最小限のコストで済む。

失敗のコストが下がれば挑戦のコストが下がるのでビジネスを加速させることができる!