Slide 1

Slide 1 text

1 AWS事業本部 コンサルティング部 菊池 聡規 AWS Healthの通知の実装について 考えてみた

Slide 2

Slide 2 text

● 【名前】 菊池 聡規 ● 【所属】 AWS 事業本部 コンサルティング部 ● 【キャリア】 金融機関向けオンプレのインフラエンジニア10年ほど→ 自社Webサービスをもつ企業で3年ほど→ クラスメソッドにジョイン ● 【Blog】 https://dev.classmethod.jp/author/tooti/ ● 【好きなAWSサービス】 Amazon EventBridge, AWS Step Functions, ECS 2 自己紹介

Slide 3

Slide 3 text

3 AWSからの通知、どう管理してます?

Slide 4

Slide 4 text

1. AWS通知実装の選択肢 2. AHAで実装した例 4 アジェンダ

Slide 5

Slide 5 text

5 1. AWS通知実装の選択肢

Slide 6

Slide 6 text

6 1. AWS通知実装の選択肢 ● AWS Healthイベント通知に関する悩み ○ 複数AWSアカウントのイベントを集約して管理したい ○ AWSアカウントが増えたときに自動で通知の仕組みが設定さ れるようにしたい ○ 通知をフィルタリングして必要なものだけ受け取るようにしたい

Slide 7

Slide 7 text

7 1. AWS通知実装の選択肢 ● 各アカウントにEventBridgeとSNSをデプロイ ● EventBridgeを使った組織内イベントの集約 ● AWS Health Aware (AHA)

Slide 8

Slide 8 text

8 1. AWS通知実装の選択肢 ● 各アカウントにEventBridgeとSNSをデプロイ ○ CloudFormation StackSets等を使ってAWSアカウントがOUに参加し たときに通知の仕組みをデプロイする

Slide 9

Slide 9 text

9 1. AWS通知実装の選択肢 ● EventBridgeを使った組織内イベントの集約 ○ 最近出たアップデート(2023/10/5) ○ 元々、AWS HealthのOrganizations連携はあった ○ マネージメントコンソールから組織内のイベントを集約して確認すること はできていた ○ しかしEventBridgeに組織内のイベントを連携することができなかった ⇒ これが出来るようになった

Slide 10

Slide 10 text

10 1. AWS通知実装の選択肢 ● 実装イメージ

Slide 11

Slide 11 text

11 1. AWS通知実装の選択肢 ● AWS Health Aware (AHA) ○ AWSから提供されているソリューション ○ CloudFormationやTerraformを使ってデプロイ ○ slack等多様な通知先 ○ 大まかなフィルタリングが可能 ※https://github.com/aws-samples/aws-health-awareより画像引用

Slide 12

Slide 12 text

12 2. 通知の実装

Slide 13

Slide 13 text

13 2. 通知の実装 ● 要件 ○ AWSアカウントは30個程度 ○ Organizationsで管理されている ○ AWSアカウントごとに管理者が異なる ○ 各アカウントの通知は各アカウントの管理者が受け取りたい ○ AWS全体障害の場合は全体に対して周知したい ○ 特定リージョンの通知だけ受け取りたい

Slide 14

Slide 14 text

14 2. 通知の実装 ● AWS Healthのイベント種別について ○ ヘルスイベントの種別 ■ 公開: リージョン単位での障害等、AWS全体に渡って影響があるも の。アカウントでそのサービスを使用していなくても通知される ■ アカウント固有:対象のアカウントに固有のイベント

Slide 15

Slide 15 text

15 2. 通知の実装 ● AWS Healthのイベント種別について ○ イベントカテゴリコードの種別 ■ issue:これらのイベントは、AWS のサービスまたはリソースに影響 を与える予期しないイベントです。(いわゆる障害) ■ accountNotification: アカウントとサービスの管理またはセキュリ ティに関する情報を提供(EOLの通知やアカウント料金未払いによ るアカウント停止など様々な通知) ■ scheduledChange:サービスとリソースに対する今後の変更に関す る情報を提供します。(EC2にて再起動が必要となるメンテナンス通 知等)

Slide 16

Slide 16 text

16 2. 通知の実装 ● 実装イメージ

Slide 17

Slide 17 text

17 2. 通知の実装 ● StepFunctionsの部分

Slide 18

Slide 18 text

18 2. 通知の実装 ● メッセージ整形の部分 # AHAからのメッセージを整形 ShapingAWSHealthMessage: Type: Pass Parameters: Subject.$: "States.Format('{}-{}-{}', $.detail.eventTypeCode, $.region, $.account)" Message.$: "States.Format('AWSHealth Event\n\nAccountID: {}\nRegion: {}\nServiceName: {}\neventScopeCode: {}\neventTypeCategory: {}\neventTypeCode: {}\nstartTime: {}\nlastUpdatedTime: {}\nDescription: {}', $.account, $.region, $.detail.service, $.detail.eventScopeCode, $.detail.eventTypeCategory, $.detail.eventTypeCode, $.detail.startTime, $.detail.lastUpdatedTime, $.detail.eventDescription)" ResultPath: $.generate Next: ChoiceHealthEventScopeCode

Slide 19

Slide 19 text

19 2. 通知の実装 ● 各アカウント用SNSトピックに通知の部分 # ヘルスイベント種別がアカウント固有の場合は各アカウント用の SNSトピックに通知 SendAcctHealthEventMessage: Type: Task Resource: arn:aws:states:::aws-sdk:sns:publish Parameters: Subject.$: $.generate.Subject Message.$: $.generate.Message TopicArn.$: !Sub "States.Format('arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${TopicNamePrefix}-{}', $.account)"

Slide 20

Slide 20 text

20