ステップ関数SNS SDK統合によるエラー処理
20266 ワード
AWS Step Functions いくつかのサーバーレスワークフローのオーケストレーションを設計する方法です.
異なる状態で統合すると、状態が失敗したときに完全な実行が失敗する可能性があります.プログラム言語のエラー処理技術のように、ステップ関数を使用すると、特定のエラー処理技術に従って実行を終了または再試行することもできます.
このブログ記事では、SNS SDKインテグレーションを持っている状態で、どのようにSTEP機能のエラー処理技術を使用できるかを見ていきます.
ステップ関数のエラー処理
AWS Step Functions ネイティブのエラー処理をサポートします
例外は、状態がこのように失敗する可能性がある様々な理由で発生する可能性があります 状態は前のステップまたは呼び出しイベントJSONから渡されたイベントからパラメーターを取得/読み取りできません. SDK統合を使用している状態は、それぞれのSDK APIを呼び出すために必要なアクセス許可を欠くことができます. 状態の処理時間はタイムアウトすることができます. エラー名
ステップ関数でのエラー処理についての詳細を読むことができますhere .
ワークフローの理解
このワークフローでは、複数の状態を使用します.これらの状態は、
パラレル状態はラムダFN呼び出しを実行します、そして、GetBuckeTacl、ListObjectSv 2と3番目の平行流のためにS 3 SDK統合は説明可能なDynamodb SDK統合を使用しています.
The
パラレル状態に基づいて、エラーが発生した場合は、エラーをSNSトピックに通知するか、並列状態を
このワークフローを使用して、実行が例外に遭遇した場合、SNS SDKの統合で処理され
さまざまなワークフローの実行
実行1 : IAMロールがない場合
パラレル状態はすべての3つのサブプロセスの実行を開始し、
実行2 : IAMロールがS 3許可を持たない場合.
パラレル状態はすべての3つのサブプロセスの実行を開始し、S 3として
実行3 : IAMロールがないとき
パラレル状態はすべての3つのサブプロセスの実行を開始し、S 3プロセスが流れたとき、それは正常に実行される
実行4 :すべてのパーミッションが追加されました.
すべてのアクセス許可を使用して、状態が正常に実行され、例外がないため、エラーがSNSトピック状態に通知されません.
実行5 :ラムダ関数がエラーをスローするとき.
すべてのアクセス許可を使用して、ラムダ関数コードからのプログラムエラーも処理されます
結論
ステップ関数によってプロビジョニングされたエラー処理技術を使用すると、エラーを正しく処理できます.これらのエラーは、より自動化されたエラー処理のサポートされている200 +サービスと異なるAWS SDK統合で解決できます.
異なる状態で統合すると、状態が失敗したときに完全な実行が失敗する可能性があります.プログラム言語のエラー処理技術のように、ステップ関数を使用すると、特定のエラー処理技術に従って実行を終了または再試行することもできます.
このブログ記事では、SNS SDKインテグレーションを持っている状態で、どのようにSTEP機能のエラー処理技術を使用できるかを見ていきます.
ステップ関数のエラー処理
AWS Step Functions ネイティブのエラー処理をサポートします
catch
定義.例外は、状態がこのように失敗する可能性がある様々な理由で発生する可能性があります
DataLimitExceeded
, Timeout
, and Permissions
例外の理由とそれを解決するために必要な手順を定義します.エラーに基づいて、ワークフローデザイナーとしてretry
エラー名に基づいて処理するか、catch
. ステップ関数でのエラー処理についての詳細を読むことができますhere .
ワークフローの理解
このワークフローでは、複数の状態を使用します.これらの状態は、
Parallel
. サービスのいずれかがエラーになった場合、並列状態も停止します.catch
SNS SDKを統合してエラー情報に関する特定のトピックに発行する状態で実行します.パラレル状態はラムダFN呼び出しを実行します、そして、GetBuckeTacl、ListObjectSv 2と3番目の平行流のためにS 3 SDK統合は説明可能なDynamodb SDK統合を使用しています.
The
catch
は、catch
次にステップを実行し、エラーをSNSトピックに通知します.これは、並列状態からの入力として完全なエラーを受け取り、input
SDN SDKへPublish
APIのMessage
パラメータパラレル状態に基づいて、エラーが発生した場合は、エラーをSNSトピックに通知するか、並列状態を
Success state
. このワークフローを使用して、実行が例外に遭遇した場合、SNS SDKの統合で処理され
success
. すべてがうまくいけば、並列状態のすべての状態も成功状態になります.{
"Comment": "State machine to demonstrate error handling with SNS SDK integration",
"StartAt": "Parallel",
"States": {
"Parallel": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Lambda Invoke",
"States": {
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:us-east-1:xxxxxxxx:function:ErrorSNSDemo:$LATEST"
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"End": true
}
}
},
{
"StartAt": "GetBucketAcl",
"States": {
"GetBucketAcl": {
"Type": "Task",
"Parameters": {
"Bucket": "textract-sample-bucket"
},
"Resource": "arn:aws:states:::aws-sdk:s3:getBucketAcl",
"Next": "ListObjectsV2"
},
"ListObjectsV2": {
"Type": "Task",
"Parameters": {
"Bucket": "textract-sample-bucket"
},
"Resource": "arn:aws:states:::aws-sdk:s3:listObjectsV2",
"End": true
}
}
},
{
"StartAt": "DescribeTable",
"States": {
"DescribeTable": {
"Type": "Task",
"Parameters": {
"TableName": "TextractKeywordsDB"
},
"Resource": "arn:aws:states:::aws-sdk:dynamodb:describeTable",
"End": true
}
}
}
],
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Next": "Notify Error to SNS topic",
"ResultPath": "$"
}
],
"Next": "Success"
},
"Success": {
"Type": "Succeed"
},
"Notify Error to SNS topic": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:sns:publish",
"Parameters": {
"TopicArn": "arn:aws:sns:us-east-1:xxxxxxxx:ErrorNotification",
"Message.$": "$"
},
"Next": "Success"
}
},
"TimeoutSeconds": 20
}
Note :ステートマシンを作成するとき、IAMロールが作成されますが、自動作成されたポリシーは現在SDKベースのAPIポリシーを含んでいません.作成したときにポリシーをIAMロールに追加する必要があります.さまざまなワークフローの実行
実行1 : IAMロールがない場合
dynamodb:DescribeTable
許可.パラレル状態はすべての3つのサブプロセスの実行を開始し、
DescribeTable
APIが起動すると、IAMポリシーはそれを許可しません.エラーが発生しました.DynamoDb.DynamoDbException
. そして、パラレル状態はそれをキャッチし、SNSトピック状態に通知エラーを実行する.トピックには、次のJSONベースの電子メールを受信する電子メールベースの加入者があります.実行2 : IAMロールがS 3許可を持たない場合.
パラレル状態はすべての3つのサブプロセスの実行を開始し、S 3として
GetBucketAcl
APIは実行を開始します.エラーが発生しました.S3.S3Exception
. パラレル状態はそれをキャッチし、SNSトピック状態に通知エラーを実行します.トピックには、次のJSONベースの電子メールを受信する電子メールベースの加入者があります.実行3 : IAMロールがないとき
s3:ListObject
許可はあるがs3:GetBucketAcl
.パラレル状態はすべての3つのサブプロセスの実行を開始し、S 3プロセスが流れたとき、それは正常に実行される
GetBucketAcl
API.それから、それは反応を示しますListObjectv2
API、IAMポリシーはそれを許可しません.エラーが発生しました.S3.S3Exception
. そして、パラレル状態がそれをキャッチし、SNSトピック状態に通知エラーを実行します.また、DynamoDB操作も同様に成功しました.トピックには、次のJSONベースの電子メールを受信する電子メールベースの加入者があります.実行4 :すべてのパーミッションが追加されました.
すべてのアクセス許可を使用して、状態が正常に実行され、例外がないため、エラーがSNSトピック状態に通知されません.
実行5 :ラムダ関数がエラーをスローするとき.
すべてのアクセス許可を使用して、ラムダ関数コードからのプログラムエラーも処理されます
catch
. ラムダ関数では、nodejsランタイムはエラーをスローするようにスニペットを追加しました.exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
throw new Error("An Error occured in Lambda function code!!!")
// return response;
};
このエラーは、電子メールを介して通知されるSNSのトピックの状態に通知エラーでキャッチされ、優雅に処理されます.結論
ステップ関数によってプロビジョニングされたエラー処理技術を使用すると、エラーを正しく処理できます.これらのエラーは、より自動化されたエラー処理のサポートされている200 +サービスと異なるAWS SDK統合で解決できます.
Reference
この問題について(ステップ関数SNS SDK統合によるエラー処理), 我々は、より多くの情報をここで見つけました https://dev.to/aws-builders/handling-errors-with-stepfunctions-sns-sdk-integration-34g8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol