Slide 1

Slide 1 text

Copyright © SCSK Corporation ECS/FargateとAWS App Meshで サービスメッシュにしたお話 JAWS-UG朝会 2022/2/25

Slide 2

Slide 2 text

1 Copyright © SCSK Corporation 今日お話しすること Part.1 AppMeshを使うにあたって Part.2 AppMeshでできること

Slide 3

Slide 3 text

2 Copyright © SCSK Corporation 川本 遼 / Ryo Kawamoto 3年目(25歳) SCSK株式会社 金融事業グループ 金融システム第二事業本部 総合金融システム第二部 第二課 ANGEL Dojo Season.1 ANGEL賞 好きなAWSサービス AppMesh、Lambda 今日お話をする人 保田 信長 / Nobunaga Yasuda 18年目(42歳) SCSK株式会社 金融事業グループ 金融システム第二事業本部 総合金融システム第二部 第二課 シニアプロフェッショナル ITスペシャリスト 好きなAWSサービス ECS/Fargate、AppMesh、X-Ray、CDK

Slide 4

Slide 4 text

3 Copyright © SCSK Corporation おことわり 本日お話する内容ならびに資料に記載の内容(以下、本内容)は発表者自身の理解によるものであり、所属組織を代表す るものではございません。また、コミュニティでの情報共有を目的としたものであり、本内容により発生する如何なる事項 についても、発表者ならびに所属組織は一切の責任を負わないものとします。 本内容は発表者が2021年7月から10月頃に調査、検証した情報に基づいています。 極力正確にお伝えする所存ですが、情報のアップデートも含め、より正確には公式ドキュメントの参照ならびにテクニカル サポートをご利用ください。

Slide 5

Slide 5 text

4 Copyright © SCSK Corporation Part.1 AppMeshを使うにあたって

Slide 6

Slide 6 text

5 Copyright © SCSK Corporation AppMeshとは? --参照: https://aws.amazon.com/jp/app-mesh/

Slide 7

Slide 7 text

6 Copyright © SCSK Corporation AppMeshとは? なるほど、完全に理解した! ・・・

Slide 8

Slide 8 text

7 Copyright © SCSK Corporation AppMeshとは? ざっくり言うと サービスメッシュを構成するために Envoyを制御するサービス ※Istioのマネージドサービスではない

Slide 9

Slide 9 text

8 Copyright © SCSK Corporation サービスメッシュとは? 複数のサービスをメッシュ状につないだ状態 GW ハブ&スポーク サービスはゲートウェイ(GW)を介してやり取り。 サービス間通信の制御をGWで一括管理できる。 反面、GWがボトルネックになるリスクあり。 サービスメッシュ サービス同士が直接やり取りする。 GWがボトルネックになることがない。 反面、サービス間通信の管理が大変。 これだけを見ると嫌な予感しかしない... ALBにぶら下げるパターンはコチラ

Slide 10

Slide 10 text

9 Copyright © SCSK Corporation Envoyとは? サービス間の通信を行う軽量なプロキシ アプリケーション Envoy request response request response request response アプリケーション Envoy request response request response サービス サービス クライアント Envoyの主な役割 ルーティング制御 サービスディスカバリ ヘルスチェック サーキットブレーカー タイムアウト リトライ サービスはHTTP以外にもgRPC やTCPでの定義も可

Slide 11

Slide 11 text

10 Copyright © SCSK Corporation AppMeshとは? サービスメッシュを構成するために Envoyを制御するサービス Envoy Envoy Envoy Envoy これならいけそうな予感!

Slide 12

Slide 12 text

11 Copyright © SCSK Corporation AppMeshの構成要素 概念の理解が最初のハードル 『呼び出す側の振る舞いを、 呼び出される側が定義』 アプリケーション Envoy アプリケーション Envoy サービスA サービスB クライアント Envoy ゲートウェイ サービスAに紐づくタスク を呼出すための定義 メッシュ外からサービス を呼出すための定義 仮想ゲートウェイ 非Envoy環境からのプロキシ 仮想サービス サービスの名前 仮想ルータ リクエストのルーティング 仮想ノード サービスの実体との紐付 サービスBに紐づくタスク を呼出すための定義

Slide 13

Slide 13 text

12 Copyright © SCSK Corporation 問い サービスメッシュは必要なのか? 参考 サービスメッシュは本当に必要なのか、何を解決するのか AWS Summit Tokyo 2019 https://www.youtube.com/watch?v=ZwfdLAClzsc

Slide 14

Slide 14 text

13 Copyright © SCSK Corporation 将来への備え的理由 マイクロサービスアーキテクチャを目指す、という方向性 小規模で採用してノウハウを得ていく

Slide 15

Slide 15 text

14 Copyright © SCSK Corporation 技術的な理由 ❶ELBの性能や運用管理面のリスク A B C クライアント ELB 例)サービスA→B→Cの順で呼び出す場合 A B C 呼出し順序 ELB構成 A B C クライアント GW A B C 「長い/短い」ではなく、1リクエストで同じ場所を何度も通ることをリスクと捉えるか、 Envoy層が加わることによる障害ポイントの追加をリスクと捉えるか。 今後サービスが追加されていく構想においては前者をリスクとし、後者を許容。 メッシュ構成 ELB 呼出し順序

Slide 16

Slide 16 text

15 Copyright © SCSK Corporation 技術的な理由 ❷ライブラリ依存のリスク アプリケーション Envoy アプリケーション Envoy サービス サービス Envoy構成 アプリケーション アプリケーション サービス サービス ライブラリ構成(Javaの場合) SpringCloud サービスディスカバリやクライアントロードバランサなど、どちらの構成でも実現可。 アプリケーション開発の立場からは、ライブラリ依存は極力少ない方が嬉しい。

Slide 17

Slide 17 text

ビジネス要求、将来の技術戦略、 チームのスキル、現状の課題、 などなど アーキテクチャの決定には様々な要素が関連します 調査・検証・議論を通じてより合ったものをご選択ください

Slide 18

Slide 18 text

AppMeshの情報源 2021年度版 設定方法や構築方法は上記でおおよそ把握できます。 振る舞いに関する仕様は確たる情報がないので地道な検証とサポート問合せで把握しました。 AWS公式ドキュメント https://docs.aws.amazon.com/app- mesh/latest/userguide/what-is-app-mesh.html AWS Black Belt Online Seminar https://aws.amazon.com/jp/aws-jp-introduction/aws-jp- webinar-service-cut/ サンプルソース https://github.com/aws/aws-app-mesh-examples Envoy公式ドキュメント https://www.envoyproxy.io/docs.html AWSサポート ご契約により

Slide 19

Slide 19 text

Part.2 AppMeshでできること

Slide 20

Slide 20 text

本構成を用いて下記5つの観点で検証を実施。 ❶ ルーティング制御 ❸ ヘルスチェック ❺ リトライ ❷ サーキットブレイカー(流量制御) ❹ タイムアウト ❻ 外れ値検知 AppMesh 仮想サービス AppMeshでできること 仮想ノード DB Envoy 仮想ルーター 仮想ゲートウェイ アプリ 今回未使用

Slide 21

Slide 21 text

ルーティング制御 サービス間の呼出を柔軟に制御する。Blue/Greenデプロイメントやカナリアリリースを実現できる。 DB ECSタスク ECSタスク ECSタスク 仮想ルーターは、仮想サービス用のハンドラーとなっており、 ヘッダー等を用いてルーティングを行う。 また、仮想ノードは紐づくECSタスクの中で正常なタスクに対してトラフィックを伝播させる。

Slide 22

Slide 22 text

サーキットブレーカー(接続プール) アプリケーションへの流量を制御し、過負荷から保護する。 DB ECSタスク CP CP 主な設定項目は「最大接続数・最大保留数」の2つ。 最大接続数を超過した場合は、タイムアウトまで待機する。 最大接続数+最大保留数を超過した場合は、503 Service Unavailable が発生する。

Slide 23

Slide 23 text

ヘルスチェック アプリケーションの正常性を監視しトラフィックの制御を行う。 DB ECSタスク HC ECSタスク HC HC ECSタスク ECSタスク ECSのHCではコンテナのリカバリを、EnvoyのHCではEnvoyの通信制御を行う。 仮想ゲートウェイのECSタスクにおけるHCはALBのHCで代用する。 ※EnvoyのHC サービス検出方法によってはヘルスチェックが実施されない。 CloudMapもしくはDNS(ENDPOINTS)に設定する必要がある。

Slide 24

Slide 24 text

タイムアウト サービス間の呼出のタイムアウトを制御する。 DB ECSタスク TO TO 主な設定項目は「アイドルタイムアウト・リクエストタイムアウト」の2つ。 アイドルタイムアウトを超過した場合は、504 Gateway Timeout が発生する。 リクエストタイムアウトを超過した場合は、408 Request Timeout が発生する。

Slide 25

Slide 25 text

リトライ アプリケーションへの通信がエラーになった場合の再試行を行う。 デフォルトの再試行ポリシーを設定。 503エラー発生時には2回リトライされる。 なお、リトライ中にタイムアウトに引っかかった場合は504 Gateway Timeoutとして返却される。 DB ECSタスク TA

Slide 26

Slide 26 text

25 Copyright © SCSK Corporation EnvoyProxyを用いて以下のような機能を実現。 ❶ ルーティング制御 ❸ ヘルスチェック ❺ リトライ ❷ サーキットブレイカー(流量制御) ❹ タイムアウト ❻ 外れ値検知 AppMesh 仮想サービス AppMeshでできること 仮想ノード DB Envoy 仮想ルーター 仮想ゲートウェイ アプリ 今回未使用

Slide 27

Slide 27 text

No content