開始方法: Amazon EventBridge イベントバスルールを作成する - Amazon EventBridge

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

開始方法: Amazon EventBridge イベントバスルールを作成する

EventBridge ルールとその機能を理解するために、 AWS CloudFormation テンプレートを使用してイベントバスルールと、イベントソース、イベントパターン、ターゲットなどの関連コンポーネントを設定します。次に、ルールの仕組みを調べて、必要なイベントを選択できます。

テンプレートは、デフォルトのイベントバスにルールを作成します。このルールは、イベントパターンを使用して、特定の Amazon S3 バケットからのイベントをフィルタリングします。ルールは、指定されたターゲットである Amazon SNS トピックに一致するイベントを送信します。オブジェクトがバケットに作成されるたびに、ルールは トピックに通知を送信し、指定された E メールアドレスに E メールを送信します。

デプロイされたリソースは、以下で構成されます。

  • EventBridge 通知を有効にしてイベントソースとして機能する Amazon S3 バケット。

  • 通知のターゲットとしての Amazon SNS トピックと E メールサブスクリプション。

  • Amazon SNS トピックに発行するために必要なアクセス許可を EventBridge に付与する実行ロール。

  • ルール自体は次のとおりです。

    • 特定の Amazon S3 バケットからのイベントのみに一致するObject Createdイベントパターンを定義します。

    • EventBridge が一致するイベントを配信するターゲットとして Amazon SNS トピックを指定します。

テンプレートの具体的な技術的詳細については、「」を参照してくださいテンプレートの詳細

Amazon S3 イベントはルールのイベントパターンと一致し、一致すれば SNS トピックに送信されます。

[開始する前に]

EventBridge で Amazon S3 イベントを受信するには、Amazon S3 内で EventBridge を有効にする必要があります。 EventBridge このトピックでは、EventBridge が有効になっていることを前提としています。詳細については、「Amazon S3 ユーザーガイド」のEventBridge の有効化」を参照してください。 Amazon S3

CloudFormation を使用したルールの作成

ルールとその関連リソースを作成するには、CloudFormation テンプレートを作成し、それを使用してソースとターゲットを含むサンプルルールを含むスタックを作成します。

重要

このテンプレートからスタックを作成する場合に使用される Amazon リソースに対して課金されます。

まず、CloudFormation テンプレートを作成します。

  1. テンプレート セクションで、JSON または YAML タブのコピーアイコンをクリックして、テンプレートの内容をコピーします。

  2. テンプレートの内容を新しいファイルに貼り付けます。

  3. ファイルをローカルに保存します。

次に、保存したテンプレートを使用して CloudFormation スタックをプロビジョニングします。

CloudFormation を使用してスタックを作成する (コンソール)
  1. クラウドフォーメーション コンソール のhttps://console.aws.amazon.com/cloudformation/ 開きます:

  2. スタックページで、スタックの作成メニューから、新しいリソース (標準) で を選択します。

  3. テンプレートを指定します。

    1. 「前提条件」で、「既存のテンプレートを選択する」を選択します。

    2. [テンプレートの指定] で、[テンプレートファイルのアップロード] を選択します。

    3. ファイルの選択を選択し、テンプレートファイルに移動して選択します。

    4. [次へ] を選択します。

  4. スタックの詳細を指定します。

    1. スタック名を入力します。

    2. パラメータの場合は、BucketNameSNSTopicDisplayNameSNSTopicName、および RuleName のデフォルト値を受け入れるか、独自の値を入力します。

    3. EmailAddress には、通知を受信する有効な E メールアドレスを入力します。

    4. [次へ] を選択します。

  5. スタックオプションを設定します。

    1. スタック障害オプションで、新しく作成されたリソースをすべて削除を選択します。

      注記

      このオプションを選択すると、スタックの作成が失敗した場合でも、削除ポリシーで保持が指定されているリソースに対して課金される可能性があります。詳細については、CloudFormation ユーザーガイド」のDeletionPolicy「 属性」を参照してください。

    2. 他のすべてのデフォルト値を受け入れます。

    3. 機能 のチェックボックスをオンにして、CloudFormation がアカウントに IAM リソースを作成する可能性があることを確認します。

    4. [次へ] を選択します。

  6. スタックの詳細を確認し、送信を選択します。

CloudFormation を使用してスタックを作成する (AWS CLI)

を使用してスタック AWS CLI を作成することもできます。

  • create-stack コマンドを使用します。

    • スタック名と E メールアドレスを指定して、デフォルトのテンプレートパラメータ値を受け入れます。template-body パラメータを使用してテンプレートコンテンツを渡すか、URL の場所template-urlを指定します。

      aws cloudformation create-stack \ --stack-name eventbridge-rule-tutorial \ --template-body template-contents \ --parameters ParameterKey=EmailAddress,ParameterValue=your.email@example.com \ --capabilities CAPABILITY_IAM
    • 1 つ以上のテンプレートパラメータのデフォルト値 (複数可) を上書きします。例:

      aws cloudformation create-stack \ --stack-name eventbridge-rule-tutorial \ ----template-body template-contents \ --parameters \ ParameterKey=EmailAddress,ParameterValue=your.email@example.com \ ParameterKey=BucketName,ParameterValue=my-custom-bucket-name \ ParameterKey=RuleName,ParameterValue=my-custom-rule-name \ --capabilities CAPABILITY_IAM

CloudFormation はスタックを作成します。スタックの作成が完了すると、スタックリソースを使用する準備が整います。スタックの詳細ページのリソースタブを使用して、アカウントでプロビジョニングされたリソースを表示できます。

スタックが作成されると、指定したアドレスにサブスクリプション確認メールが送信されます。通知を受け取るには、このサブスクリプションを確認する必要があります。

ルール機能の探索

ルールが作成されたら、EventBridge コンソールを使用してルールオペレーションを観察し、イベント配信をテストできます。

  1. https://console.aws.amazon.com/events/home?#/rules で EventBridge コンソールを開きます。

  2. 作成したルールを選択します。

    ルールの詳細ページでは、ルールの詳細セクションに、イベントパターンやターゲットなど、ルールに関する情報が表示されます。

イベントパターンの確認

ルールオペレーションをテストする前に、ターゲットに送信されるイベントを制御するために指定したイベントパターンを見てみましょう。ルールは、パターン条件に一致するイベントのみをターゲットに送信します。この場合、Amazon S3 が生成するイベントは、特定のバケットにオブジェクトが作成された場合にのみ必要です。

  • ルールの詳細ページの「イベントパターン」で、イベントパターンが次のイベントのみを選択するのを確認できます。

    • ソースは Amazon S3 サービス (aws.s3) です。

    • detail-type は です。 Object Created

    • バケット名が、作成したバケットの名前と一致する

    { "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": { "name": ["eventbridge-rule-example-source"] } } }

ルールを介したイベントの送信

次に、イベントソースにイベントを生成して、ルールマッチングと配信が正しく動作していることをテストします。これを行うには、イベントソースとして指定した S3 バケットにオブジェクトをアップロードします。

  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. バケットリストで、テンプレートで作成したバケットを選択します (デフォルト名: eventbridge-rule-example-source)。

  3. [アップロード] を選択します。

  4. テストファイルをアップロードしてObject Createdイベントを生成します。

    1. ファイルの追加を選択し、コンピュータからファイルを選択します。

    2. [アップロード] を選択します。

  5. EventBridge によってイベントが処理され、通知が送信されるまでしばらく待ちます。

  6. E メールをチェックして、オブジェクト作成イベントに関する通知を確認します。E メールには、バケット名やオブジェクトキーなど、S3 イベントに関する詳細が含まれます。

ルールメトリクスの表示

ルールのメトリクスを表示して、イベントが正しく処理されていることを確認することができます。

  1. EventBridge コンソールで、ルールを選択します。

  2. [メトリクス] タブをクリックします。

  3. 次のようなメトリクスを表示できます。

    • 呼び出し: ルールがトリガーされた回数。

    • TriggeredRules: 一致するイベントによってトリガーされたルールの数。

クリーンアップ: リソースの削除

最後のステップとして、スタックとそれに含まれるリソースを削除します。

重要

スタックに含まれる Amazon リソースが存在する限り、課金されます。

  1. クラウドフォーメーション コンソール のhttps://console.aws.amazon.com/cloudformation/ 開きます:

  2. スタックページで、テンプレートから作成されたスタックを選択し、削除を選択し、削除を確認します。

    CloudFormation は、スタックとそれに含まれるすべてのリソースの削除を開始します。

CloudFormation テンプレートの詳細

このテンプレートは、 アカウントにリソースを作成し、アクセス許可を付与します。

リソース

このチュートリアルの CloudFormation テンプレートは、アカウントに次のリソースを作成します。

重要

このテンプレートからスタックを作成する場合に使用される Amazon リソースに対して課金されます。

  • AWS::S3::Bucket: EventBridge 通知を有効にして、ルールのイベントソースとして機能する Amazon S3 バケット。

  • AWS::SNS::Topic: ルールに一致するイベントのターゲットとして機能する Amazon SNS トピック。

  • AWS::SNS::Subscription: SNS トピックへの E メールサブスクリプション。

  • AWS::IAM::Role: アカウントの EventBridge サービスにアクセス許可を付与する IAM 実行ロール。

  • AWS::Events::Rule: Amazon S3 バケットイベントを Amazon SNS トピックに接続するルール。

アクセス許可

テンプレートには、実行ロールを表す AWS::IAM::Roleリソースが含まれています。このロールは、アカウントで EventBridge サービス (events.amazonaws.com) に次のアクセス許可を付与します。

次のアクセス許可は、 管理ポリシー を通じて付与されますAmazonSNSFullAccess

  • Amazon SNS リソースとオペレーションへのフルアクセス

CloudFormation テンプレート

次の YAML コードを別のファイルとして保存し、このチュートリアルの CloudFormation テンプレートとして使用します。

YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] EventBridge: event-bus-rule-get-started' Parameters: BucketName: Type: String Description: Name of the S3 bucket Default: eventbridge-rule-example-source SNSTopicDisplayName: Type: String Description: Display name for the SNS topic Default: eventbridge-rule-example-target SNSTopicName: Type: String Description: Name for the SNS topic Default: eventbridge-rule-example-target RuleName: Type: String Description: Name for the EventBridge rule Default: eventbridge-rule-example EmailAddress: Type: String Description: Email address to receive notifications AllowedPattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[a-zA-Z0-9-]*(\\.[a-zA-Z0-9-]+)*$' Resources: # S3 Bucket with notifications enabled S3Bucket: Type: AWS::S3::Bucket Properties: BucketName: !Ref BucketName NotificationConfiguration: EventBridgeConfiguration: EventBridgeEnabled: true # SNS Topic for email notifications SNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: !Ref SNSTopicDisplayName TopicName: !Ref SNSTopicName # SNS Subscription for email SNSSubscription: Type: AWS::SNS::Subscription Properties: Protocol: email Endpoint: !Ref EmailAddress TopicArn: !Ref SNSTopic # EventBridge Rule to match S3 object creation events and send them to the SNS topic EventBridgeRule: Type: AWS::Events::Rule Properties: Name: !Ref RuleName Description: "Rule to detect S3 object creation and send email notification" EventPattern: source: - aws.s3 detail-type: - "Object Created" detail: bucket: name: - !Ref BucketName State: ENABLED Targets: - Id: SendToSNS Arn: !Ref SNSTopic RoleArn: !GetAtt EventBridgeRole.Arn # IAM Role for EventBridge to publish to SNS EventBridgeRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: events.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonSNSFullAccess Outputs: BucketName: Description: Name of the S3 bucket Value: !Ref S3Bucket SNSTopicARN: Description: ARN of the SNS topic Value: !Ref SNSTopic EmailSubscription: Description: Email address for notifications Value: !Ref EmailAddress
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "[AWSDocs] EventBridge: event-bus-rule-get-started", "Parameters": { "BucketName": { "Type": "String", "Description": "Name of the S3 bucket", "Default": "eventbridge-rule-example-source" }, "SNSTopicDisplayName": { "Type": "String", "Description": "Display name for the SNS topic", "Default": "eventbridge-rule-example-target" }, "SNSTopicName": { "Type": "String", "Description": "Name for the SNS topic", "Default": "eventbridge-rule-example-target" }, "RuleName": { "Type": "String", "Description": "Name for the EventBridge rule", "Default": "eventbridge-rule-example" }, "EmailAddress": { "Type": "String", "Description": "Email address to receive notifications", "AllowedPattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[a-zA-Z0-9-]*(\\.[a-zA-Z0-9-]+)*$" } }, "Resources": { "S3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": { "Ref": "BucketName" }, "NotificationConfiguration": { "EventBridgeConfiguration": { "EventBridgeEnabled": true } } } }, "SNSTopic": { "Type": "AWS::SNS::Topic", "Properties": { "DisplayName": { "Ref": "SNSTopicDisplayName" }, "TopicName": { "Ref": "SNSTopicName" } } }, "SNSSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "Protocol": "email", "Endpoint": { "Ref": "EmailAddress" }, "TopicArn": { "Ref": "SNSTopic" } } }, "EventBridgeRule": { "Type": "AWS::Events::Rule", "Properties": { "Name": { "Ref": "RuleName" }, "Description": "Rule to detect S3 object creation and send email notification", "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "Object Created" ], "detail": { "bucket": { "name": [ { "Ref": "BucketName" } ] } } }, "State": "ENABLED", "Targets": [ { "Id": "SendToSNS", "Arn": { "Ref": "SNSTopic" }, "RoleArn": { "Fn::GetAtt": [ "EventBridgeRole", "Arn" ] } } ] } }, "EventBridgeRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "ManagedPolicyArns": [ "arn:aws:iam::aws:policy/AmazonSNSFullAccess" ] } } }, "Outputs": { "BucketName": { "Description": "Name of the S3 bucket", "Value": { "Ref": "S3Bucket" } }, "SNSTopicARN": { "Description": "ARN of the SNS topic", "Value": { "Ref": "SNSTopic" } }, "EmailSubscription": { "Description": "Email address for notifications", "Value": { "Ref": "EmailAddress" } } } }