Amazon S3 イベント発生時にステートマシンの実行を開始する - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 イベント発生時にステートマシンの実行を開始する

Amazon EventBridge を使用して、イベント発生時またはスケジュールに従って AWS Step Functions ステートマシンを実行できます。

このチュートリアルでは、Amazon EventBridge ルールのターゲットとしてステートマシンを設定する方法を説明します。ファイルが Amazon S3 バケットに追加されると実行が開始されます。

実際のアプリケーションでは、バケットに追加したファイルに対してオペレーションを時刻するステートマシンを起動できます。イメージやビデオファイルに対するサムネイルの作成や Amazon Rekognition 分析の実行などです。

このチュートリアルでは、シンプルなHelloworldステートマシンを使用するには、Amazon Simple Storage Service (Amazon S3) バケットにファイルを追加します。次に、その実行のサンプル入力を確認して、AWS CloudTrail からの入力にどのような情報が含まれているかを確認します。

前提条件: ステートマシンの作成

Amazon EventBridge ターゲットを設定する前に、ステートマシンを作成する必要があります。

  • 基本的なステートマシンを作成するには、入門チュートリアルを使用します。

  • 既に Helloworld ステートマシンがある場合は、次のステップに進みます。

ステップ 1: Amazon S3 でのバケットの作成

今、あなたは持っていることHelloworldステートマシンを使用するには、Amazon S3 バケットが必要です。このチュートリアルのステップ 3 で、バケットにファイルが追加されると、Amazon EventBridge によってステートマシンの実行がトリガーされるようにルールを設定します。

  1. に移動します。Amazon S3 コンソール[] を選択してから、[バケットを作成する

  2. [バケット名] を入力します (例: username-sfn-tutorial)。

    注記

    バケット名は必ず、Amazon S3 内のすべての AWS リージョン内の既存バケット名の中で一意になるようにします。自分の username この名前を一意にします。すべてのリソースは同じ AWS リージョン内に作成する必要があります。

  3. [Create] を選択します。

ステップ 2: AWS CloudTrail でトレイルを作成する

Amazon S3 バケットを作成したら、CloudTrail に証跡を作成します。

Amazon S3 の API イベントが Amazon EventBridge ルールを満たすには、これらのイベントを受信するように CloudTrail に証跡を設定する必要があります。

  1. を開くAWS CloudTrail コンソール

  2. [Trails (証跡)] を選択し、[Create trail (証跡の作成)] を選択します。

  3. [証跡名] に、S3Event と入力します。

  4. 選択既存の S3 バケットの使用

  5. を使用する場合トレイルログバケット名に、作成した Amazon S3 バケットの名前を入力します。username-sfn-tutorial(ステップ 1: Amazon S3 でのバケットの作成).

  6. Select有効ログファイルの SSE-KMS 暗号化暗号化を無効にします。

    注記

    オプションで、暗号化を有効にすることもできます。ログファイルの SSE-KMS 暗号化を選択し、AWS KMS エイリアスキーを作成します。

  7. 選択証跡の作成

ステップ 3: Amazon EventBridge ルールの作成

ステートマシンが用意され、AWS CloudTrail に Amazon S3 バケットと証跡を作成したら、Amazon EventBridge ルールを作成します。

注記

Amazon EventBridge は Amazon S3 バケットと同じ AWS リージョンに設定する必要があります。

ルールを作成するには

  1. に移動します。Amazon EventBridge コンソール] で、ルールの作成

  2. Eclipseパターンの定義] で、イベントパターン

  3. Eclipseイベントマッチングパターン] で、サービスごとの事前定義パターン

  4. Eclipseサービスプロバイダー] で、AWS

  5. Eclipseサービス名] で、Simple Storage Service (S3)

  6. [イベントタイプ] で、[Object Level Operations (オブジェクトレベルのオペレーション)] を選択します。

  7. [特定のオペレーション] を選択したら、[PutObject] を選択します。

    注記

    オブジェクトのサイズが [マルチパートしきい値] より大きい場合、PutObjectオペレーションを実行すると、ログに記録される AWS CloudTrail API はCompleteMultipartUploadの代わりにを使用しますPutObject。参照,マルチパートアップロードの概要()AWS CloudTrail ユーザーガイド

  8. [特定のバケット (名前別)] を選択し、ステップ 1 で作成したバケット名 (username-sfn-tutorial) を入力します。

ターゲットを作成するには

  1. 選択Step Functions ステートマシンドロップダウンリストとステートマシンリストで、ステップ 1 からステートマシンを選択します (Helloworld).

  2. Amazon EventBridge は、イベントの実行に必要な IAM ロールを作成できます。

    • IAM ロールを自動的に作成するには、[この特定のリソースに新しいロールを作成する

    • 以前に作成した IAM ロールを使用するには、[既存のロールの使用

  3. [Create] を選択します。

  4. 「」と入力します。名前をルールに追加します (たとえば、S3StepFunctions) を選択し、有効for[] を選択してから、[ルールの作成

    [ルールの詳細を設定する] セクションは次のようになります。

    
                            ルールの詳細の設定

    ルールが作成され、ルールページが表示されてすべての Amazon EventBridge ルールがリストされます。

ステップ 4: ルールをテストする

すべて準備されたので、Amazon S3 バケットへのファイルの追加をテストして、ステートマシンが実行された結果の入力を確認します。

  1. ファイルを Amazon S3 バケットに追加します。

    に移動します。Amazon S3 コンソールで、作成したバケット (username-sfn-tutorial) を選択してから、[アップロード

  2. ファイル (次の例の test.png) を追加し、[アップロード] を選択します。

    これにより、ステートマシンの実行が起動され、AWS CloudTrail からの情報が入力として渡されます。

  3. ステートマシンの実行を確認します。

    に移動します。Step Functions コンソールを使用して、Amazon EventBridge ルールで使用されているステートマシン (Helloworld)

  4. そのステートマシンの細心の実行を選択して、[入力] セクションを展開します。

    この入力には、バケット名やオブジェクト名などの情報が含まれています。実際のユースケースでは、この入力を使用してステートマシンがそのオブジェクトに対してアクションを実行できます。

実行入力の例

以下の例に示しているのは、ステートマシン実行への一般的な入力です。

{ "version": "0", "id": "8d6f9246-b781-44f8-a026-f1c1ab2c61f0", "detail-type": "AWS API Call via CloudTrail", "source": "aws.s3", "account": "123456789012", "time": "2018-09-12T00:25:10Z", "region": "us-east-2", "resources": [], "detail": { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/username", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "username", "sessionContext": { "attributes": { "creationDate": "2018-09-11T20:10:38Z", "mfaAuthenticated": "true" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2018-09-12T00:25:10Z", "eventSource": "s3.amazonaws.com", "eventName": "PutObject", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.34", "userAgent": "signin.amazonaws.com", "requestParameters": { "X-Amz-Date": "20180912T002509Z", "bucketName": "username-sfn-tutorial", "X-Amz-Algorithm": "AWS4-HMAC-SHA256", "x-amz-acl": "private", "X-Amz-SignedHeaders": "content-type;host;x-amz-acl;x-amz-storage-class", "X-Amz-Expires": "300", "key": "test.png", "x-amz-storage-class": "STANDARD" }, "responseElements": null, "additionalEventData": { "x-amz-id-2": "IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km" }, "requestID": "79104EXAMPLEB723", "eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8", "readOnly": false, "resources": [ { "type": "AWS::S3::Object", "ARN": "arn:aws:s3:::username-sfn-tutorial-2/test.png" }, { "accountId": "123456789012", "type": "AWS::S3::Bucket", "ARN": "arn:aws:s3:::username-sfn-tutorial" } ], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } }