Slide 1

Slide 1 text

AWS障害で考えさせられた、 アプリケーションインフラ構成の注意ポイント

Slide 2

Slide 2 text

本⽇のスピーカー紹介 2 こっち

Slide 3

Slide 3 text

ビジョン

Slide 4

Slide 4 text

サーバーワークスのビジネス概要 2008年より、AWSに特化したインテグレーション事業を開始。 世界で20,000社を超えるAWSパートナーから上位0.3%のみが受ける最上 位資格 ”APN プレミアコンサルティングパートナー” に認定 4 AWS導⼊⽀援 AWS⾃動化ツール AWS運⽤サービス 導⼊コンサルティング AWS構築サービス 24時間365⽇の運⽤代⾏ 有⼈監視・障害対応 課⾦代⾏サービス Cloud Automator (運⽤業務⾃動化) ⽇本4拠点(+⼦会社1拠点) US1拠点

Slide 5

Slide 5 text

770社を超えるAWS導⼊実績 (2020年1⽉末現在)

Slide 6

Slide 6 text

本題に⼊ります 6

Slide 7

Slide 7 text

2019.8.23 AWS 東京リージョンにて障害発⽣ 7

Slide 8

Slide 8 text

障害発⽣時の状況 突如届き始めた、⼤量のEC2インスタンスのAutoRecovery通知 8

Slide 9

Slide 9 text

障害発⽣時の状況 どうやらEC2インスタンスが⼤量に落ちたようだ・・・ 9

Slide 10

Slide 10 text

障害発⽣時の状況 単⼀のAWSアカウントの問題ではなく、AWSの基盤障害の模様 10

Slide 11

Slide 11 text

障害発⽣時の状況 障害対応に追われる 11

Slide 12

Slide 12 text

障害の詳細 12

Slide 13

Slide 13 text

AWSからの障害報告(8/25初版) 単⼀アベイラビリティゾーンでの障害である 対象はEC2、及び、EBSである EC2 RunInstances APIにおけるエラー率の上昇 原因としてはAWSのデータセンターの制御に使われるシステムの複合的な障害 13

Slide 14

Slide 14 text

AWSからの障害報告(8/28続報) RDS、 Redshift、ElastiCache および WorkSpaces等、EC2を基盤として いるサービスについても影響 複数アベイラビリティゾーンで稼働している⼀部のケースで影響があったこ とにも触れられる 東京リージョン (AP-NORTHEAST-1) で発⽣した Amazon EC2 と Amazon EBS の事象概要 https://aws.amazon.com/jp/message/56489/ 14

Slide 15

Slide 15 text

実際に体験した障害による影響 15

Slide 16

Slide 16 text

とある運⽤案件にて サーバーワークスはAWS環境、EC2インスタンスのOS、ミドルウェアの⼀ 部を担当 アプリケーションやデータベースについてはお客様、別ベンダーが管理 レガシーな3層構造(ELB-EC2-RDS 等)のシステムやサーバーレス構成 (API Gateway-Lambda-DynamoDB 等)のシステムなど様々な環境があ り、規模については、EC2で⾔えば、数百台規模の環境を運⽤ 今回は3つの実際に発⽣したケースを紹介

Slide 17

Slide 17 text

冗⻑化してるから⼤丈夫・・・︖ 本番環境は複数アベイラビリティゾーンで冗⻑化されている為、サービスに 影響はなかった ・・・・はずだった 17

Slide 18

Slide 18 text

ケース① アプリケーションのDBの接続先設定の誤り RDS Aurora クラスターのフェールオーバーが発⽣ 18

Slide 19

Slide 19 text

ケース① アプリケーションのDBの接続先設定の誤り アプリケーションのデータベースの接続先にAurora クラスターの中の Writerであった特定のDBインスタンスが指定されていた アプリケーションのエラーが発⽣ 利⽤していたDNSレコードをクラスターエンドポイントに書き換えることで復 旧 インスタンスエンドポイントはフェールオーバーが発⽣しても対象インスタンスのIP アドレスを返し続ける クラスターエンドポイントはフェールオーバーの際にポイントするIPアドレスがプラ イマリのインスタンスに⾃動で切り替わるので、通常はこちらを利⽤する 19

Slide 20

Slide 20 text

ケース② 過去の構築時、設定変更時のミス 障害を受けたEC2インスタンスの中には、これまでにほぼ停⽌していないよ うなものが含まれていたため、過去の設定ミスが炙りだされることになった /etc/fstabの記載ミス ⇒ディスクマウントがされなかった サービス⾃動起動設定の不備 ⇒必要なサービスが起動せず 20

Slide 21

Slide 21 text

ケース③ プレイスメントグループ とあるデータウェアハウス(DWH)のシステムでEC2、3台並列構成 低レイテンシーを⽬的にクラスタープレイスメントグループを利⽤ 1台のEC2インスタンスに複数のEBSがアタッチされ、Raid 0を組んでいた 21

Slide 22

Slide 22 text

ケース③ プレイスメントグループ 全台どこかしらのEBSが障害ステータスの状況 EC2インスタンス3台のうち、2台復旧することが出来れば、システム全体を復 旧できる Raid 0を組んでいたため、1台復旧するためには、Raid構成のEBS全てを復旧す る必要があった 直近のEBSのスナップショットは2017年のものだった DWHで停⽌不可のシステムであったため、各インスタンスのバックアップボ リュームへのソフトウェアによるバックアップに頼ったリストア計画だった もちろんバックアップボリュームも障害ステータス スナップショットを取ろうとしても失敗する状況 22

Slide 23

Slide 23 text

途⽅に暮れるSlackチャンネル 23

Slide 24

Slide 24 text

SHD(ServiceHealthDashboard)の復旧報に殺伐とするSlackチャンネル 24 ※Service Health DashboardはAWSのサービスの状態についてお知らせしてくれるダッシュボードです

Slide 25

Slide 25 text

翌⽇へ持ち越し Service Health Dashboardの復旧報はあったものの、取り残される ⼀部はEBSの障害としてPersonal Health Dashboardに記載 On August 22 we experienced a cooling failure in a single Availability Zone in the Tokyo (AP- NORTHEAST-1) Region, which has caused one or more of your volumes listed in the 'Affected Resources' tab, to be inaccessible. The cooling failure resulted in hardware failure on one or more storage servers that store your volume(s). We are working to resolve the hardware failures; however, if you have the ability to restore your volume(s) from a recent スナップショット, we recommend that you do so. Given the nature of the hardware failures, we anticipate that recovery will be prolonged as we work to replace the failed components in the affected servers. 訳)8⽉22⽇、東京(AP-NORTHEAST-1)リージョンの単⼀のアベイラビリティーゾーンで冷却障害が発⽣ し、「影響を受けるリソース」タブにリストされている1つ以上のボリュームにアクセスできなくなりました。 冷却障害により、ボリュームを保存する1つ以上のストレージサーバーでハードウェア障害が発⽣しました。 ハードウェア障害の解決に取り組んでいます。 ただし、最新のスナップショットからボリュームを復元できる 場合は、復元することをお勧めします。 ハードウェア障害の性質を考えると、影響を受けるサーバーの障害の あるコンポーネントを交換するために作業するため、復旧が⻑くなることが予想されます。 25 ※Personal Health Dashboardは特定のリソースの状態についてお知らせしてくれるダッシュボードです

Slide 26

Slide 26 text

結末 8/24 お昼過ぎに⼀部のEBSのスナップショットが取れるようになる EBSのサイズが⼤きかったため、取得に翌⽇までかかった 8/25 取得したスナップショットからリストアしたEBSをEC2にアタッチ 3台中2台のEC2インスタンスが復旧でき、システムとしても復旧させることができた ⾊々と対応はしたものの、結果としてAWSの復旧頼みであった 26

Slide 27

Slide 27 text

改めて気づかされたこと 27

Slide 28

Slide 28 text

改めて気づかされたこと AWSといえども障害は起きるので、過信は禁物 Design for Failureの重要性 障害は起こるものとして、システムを設計、運⽤しなければならない バックアップ超⼤事 今回のケース③で⾔えば、データボリュームについては難しかったかもしれない が、Rootボリューム、及び、バックアップボリュームのSnapshotを書き込みの 無いタイミングにて取得しておくべきだった 28

Slide 29

Slide 29 text

ここからは、今後どうすれば良いのか サーバーレスだったらどうなのか、話していきます

Slide 30

Slide 30 text

本⽇のスピーカー紹介 30 こっち

Slide 31

Slide 31 text

今後、どうすれば良いのか

Slide 32

Slide 32 text

ビジネス要件の確認 システムがビジネス要件にマッチしているか RPO(⽬標復旧時点) バックアップの取得タイミングが適切か レプリケーションは必要か RTO(⽬標復旧時間) レプリケーションやMulti-AZ構成、データの保管先の検討をしていきます 重要度の低いサービスで過剰な構成はコストの無駄となる 32

Slide 33

Slide 33 text

既存システムの評価 AWS Well-Architected Frameworkを元にAWSアーキテクチャのレ ビューを実施 ⽅法としては以下 AWS Well-Architected Framework Toolの利⽤ 2019/9に⽇本語対応 AWS Well-Architected パートナー、AWS SAへ相談 単発での実施ではなく、継続的な改善を⾏っていくことが重要 33

Slide 34

Slide 34 text

バックアップの重要性

Slide 35

Slide 35 text

バックアップ⼤事 運の悪かった⼀部のEBSが壊れました。 これによって⼀部EC2のステータスが0/2となった 35

Slide 36

Slide 36 text

バックアップが必要なワケ EBSは同⼀AZにしかレプリケートされない https://aws.amazon.com/jp/ebs/features/ 36

Slide 37

Slide 37 text

EBS Snapshot AZ障害への対策としてはEBS Snapshotが有効。 とにかくSnapshotを取りましょう︕︕ 場合によっては別リージョンにコピーする 37

Slide 38

Slide 38 text

Snapshot取得忘れがち、そんなあなたに

Slide 39

Slide 39 text

EBS Snapshot作成(AMI作成)のお勧め 具体的な実現⽅法 AWS Backup AWS提供のバックアップサービス 2019/7/2に東京リージョンにも対応 3rd Party Tool Cloud Automator(https://cloudautomator.com/ ) サーバーワークスが提供するAWSの運⽤を⾃動化するサービス EBS Snapshot作成(AMI作成)の定期実⾏するジョブがGUIで可能です 39

Slide 40

Slide 40 text

Multi-AZの重要性

Slide 41

Slide 41 text

Multi-AZの重要性 今回のケースでMulti-AZ構成は⼤きな影響を受けないケースが⼤半 AutoRecoveryですぐに復旧 AutoRecoveryでループするも別AZのEC2でサービス継続 RDSでFailover発⽣するも別AZでサービス継続 しかし、ダメなケースも Multi-AZでもALBでWAFやスティッキーセッションつかった構成 Single-AZでは負荷に耐えきれなかったケース 設定ミス、設計時の考慮漏れ →マルチリージョン、マルチクラウドという話に 41

Slide 42

Slide 42 text

Multi-AZの重要性 今回のケースでMulti-AZ構成は⼤きな影響を受けないケースが⼤半 AutoRecoveryですぐに復旧 AutoRecoveryでループするも別AZのEC2でサービス継続 RDSでFailover発⽣するも別AZでサービス継続 しかし、ダメなケースも。 Multi-AZでもALBでWAFやスティッキーセッションつかった構成 Single-AZでは負荷に耐えきれなかったケース 設定ミス、設計時の考慮漏れ →マルチリージョン、マルチクラウドという話に 42

Slide 43

Slide 43 text

マルチリージョン、マルチクラウドの前に 考慮すべきこと

Slide 44

Slide 44 text

EC2をWebサーバとして利⽤している場合 ELB配置、 EC2はAutoScalingを有効にする セッション情報はキャッシュサーバやDBに持たせる 44

Slide 45

Slide 45 text

AZ障害を考慮したインスタンス数 インスタンス障害のみを考慮したインスタンス台数ではなく、AZも考慮し て台数設計を⾏う 45

Slide 46

Slide 46 text

そもそもMulti-AZにできないケース オンプレミスからそのまま移⾏したためELBが存在しない コールドスタンバイの⽤意 直近AMIから復旧を⾃動で実施してくれるスクリプトの適⽤ 低レイテンシーが求められる環境 Amazon RedshiftもSingle-AZサポートのため、移⾏できない。 プレースメントグループを以下から適切なものを選択する クラスター︓⼀番⾼スループット パーティション︓EC2インスタンスを論理的なパーティションに配置してパーティ ションが異なるインスタンスはハードウェアを共有しない スプレット︓EC2インスタンスを別々のハードウェアに分散配置 46

Slide 47

Slide 47 text

RDSのMulti-AZ対応 基本的にはMulti-AZ配置の有効化を実施 ライセンスコストも2倍になるのでデーターベースエンジンによっては注意 スループット向上のためにリードレプリカ作成している場合 リードレプリカもMulti-AZ化実施する必要あり 接続先は、エンドポイント指定する IPアドレス直指定は、切り替わりしません システムリリース前に切り替わりテストの実施は必須 47

Slide 48

Slide 48 text

サーバーレスアーキテクチャ

Slide 49

Slide 49 text

サーバーレス構成の有効性 2019年8⽉23⽇の障害において影響 49 https://aws.amazon.com/jp/message/56489/

Slide 50

Slide 50 text

サーバーレス構成の有効性 サーバーレス構成の環境でサービス断となったケースは少なかった マネージドサービスを組み合わせたよくあるサーバーレス構成 API Gateway + Lambda + DynamoDB CloudFront + S3 50

Slide 51

Slide 51 text

サーバーレス構成の有効性 サーバーレス構成の環境でサービス断となったケースは少なかった マネージドサービスを組み合わせたよくあるサーバーレス構成 API Gateway + Lambda + DynamoDB CloudFront + S3 51 今回のケースでは助かったケースが多かったが 正解とは⾔いがたい

Slide 52

Slide 52 text

理由 今回はEC2、EBS周りの障害だった Lambda、DynamoDB、CloudFrontでも障害は起きている アプリケーションの作りによっては今回も影響があった可能性 マネージドサービスはコントロール不能になりがち 復旧対応をAWSさんに任せるしかない 障害が起きている最中で突発的に構成変更するのが⼤変

Slide 53

Slide 53 text

当時のCloudWatchメトリクス 障害時間帯にLambdaでErrorが発⽣していた 53

Slide 54

Slide 54 text

サーバーレスで考慮しておくべきこと アプリケーション全体で障害が発⽣した際の対処⽅法を⽤意しておく サーバーレス = 安全ではないことを理解する

Slide 55

Slide 55 text

最後に

Slide 56

Slide 56 text

最後に ビジネス要件にマッチした構成 構築時点でわからない場合はAWS推奨構成とする 最後は神頼み

Slide 57

Slide 57 text

最後に ビジネス要件にマッチした構成 構築時点でわからない場合はAWS推奨構成とする 最後は神頼み エンジニアとして 稼働率100%を追い求める強いハート

Slide 58

Slide 58 text

最後に AWS障害に関するホワイトペーパーをダウンロードいただけます 58

Slide 59

Slide 59 text

No content