Slide 1

Slide 1 text

AWS Step Functions上でエラーが発生した 場合の効果的な通知方法を検討してみた 2021-10-05 AWS事業本部 オペレーション部 サービスグロースチーム 筧 剛彰

Slide 2

Slide 2 text

どうもみなさん初めまして  筧 剛彰(かけい たかあき)と申します 2

Slide 3

Slide 3 text

エラー通知方法についてよく検討をされていますか? 私はサービスのメインロジックに焦点をあてがちで、 エラー通知方法について深く検討できていない状態でした 3

Slide 4

Slide 4 text

本セッションのゴール エラー通知方法を見直すきっかけとなり、 サービス品質向上につながれば幸いです! 4

Slide 5

Slide 5 text

5 おさらい ● サーバレスオーケストレーションサービス ● グラフィカルコンソールによる可視化 ● 各コンポーネントの状態を記録 https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html

Slide 6

Slide 6 text

6 通知先 ● セクションでエラー通知先のチャンネルを簡単にまとめれて見やすい ● スレッドでエラーについてコミュニケーションしやすい ● AWSサービスと親和性が高い

Slide 7

Slide 7 text

7 デプロイツール ● サーバレスアプリケーションのデプロイツール ● 構築や管理が簡単になる https://www.serverless.com/

Slide 8

Slide 8 text

8 ステートマシンの構成 ● 意図的にタイムアウトを発生する Lambda関数のステップ(TimeOut) ● 必要情報をまとめて Slack通知するLambda関数のステップ(NotifyError) ● 失敗で終わらせるための Failタイプのステップ(FailState)

Slide 9

Slide 9 text

9 完成形がこちらです ● 緊急度に応じて色とメンション有無変更 ● 調査に必要な情報を分かりやすく表示 ● タイトルリンクから対象のステートマシンの実 行ページにいける ※表示しているAWSアカウントIDはダミーです

Slide 10

Slide 10 text

各項目の取得方法は? 10 項目 取得元 ・Error(エラー名) ・Cause(エラー原因) 1.前のステップの出力 ・リージョン ・AWSアカウントID ・ステートマシン名 ・From Time(実行開始時間) ・Input(実行入力) ・対象のステートマシンの実行ページ URL 2.Contextオブジェクト

Slide 11

Slide 11 text

11 1.前のステップの出力から取得 ● TimeOutステップの出力にエラー内容が含まれる ● NotifyErrorステップのParametersフィールドで、paramキーに渡す ● Lambdaからは、event["param"]["Error"] などでアクセス https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/input-output-input path-params.html#input-output-parameters state-machines.yml slack.py

Slide 12

Slide 12 text

12 2. Context オブジェクトから取得 https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/input-out put-contextobject.html ● Context オブジェクトには、ステートマシンおよ び実行に関する情報 が含まれる ● ワークフロー上で各ステップからアクセスが可 能 Context オブジェクトの形式

Slide 13

Slide 13 text

13 2. Context オブジェクトから取得 ● Parametersフィールドで、Execution.$: $$Execution などで取得できる ● Lambdaからは、event["Execution"]["Id"] などでアクセス ● Context オブジェクトの情報をパース処理 state-machines.yml slack.py

Slide 14

Slide 14 text

各項目の取得方法は? 14 項目 取得元 ・Error(エラー名) ・Cause(エラー原因) 1.前のステップの出力 ・リージョン ・AWSアカウントID ・ステートマシン名 ・From Time(実行開始時間) ・Input(実行入力) ・対象のステップマシンの実行ページ URL 2.Contextオブジェクト

Slide 15

Slide 15 text

15 2. Context オブジェクトから取得 ● 対象ステップへの実行 URLは以下の形式 https://{リージョン}.console.aws.amazon.com/states/home?region={リージョ ン}#/executions/details/{実行ARN} ● Context オブジェクトから取得した項目(リージョンと実行 ARN) を組み合わせて作成

Slide 16

Slide 16 text

Slackへの通知方法は? ● エラー原因に応じて通知メッセージを変更 ● 緊急度中:alert_middle関数 緊急度高:alert_high関数 ● 翌日以降の対応でよいものは、 alert_middleで 通知されるようにチューニングする想定

Slide 17

Slide 17 text

17 通知内容の違い ● メンション有無 ● タイトルのアイコン ● カラー

Slide 18

Slide 18 text

Slackへの通知方法は? ● https://api.slack.com/reference/messaging/attachments

Slide 19

Slide 19 text

緊急度が低い通知はどうするの? ● 管理するサービスが増えるほど、エラー通知数は増加しが ちです ● 対応不要なエラーまで通知していると、エラー対応に追わ れてチームが疲弊します ● 新しい開発や重要なエラー対応に注力するためにも 不要な通知はコード上で抑制することを検討しましょう 19

Slide 20

Slide 20 text

まとめ ● AWS Step Funtionsのエラー通知には、前のステップ出力 やContextオブジェクトを活用 ● 緊急度を表現するには、色やメンション有無を変える ● チームが疲弊しない為に、不要な通知はコード上で抑制 20

Slide 21

Slide 21 text

No content