AWS::Events::Rule - AWS CloudFormation

AWS::Events::Rule

AWS::Events::Rule リソースは、受信するイベントに一致し、それらをターゲットにルーティングして処理するルールを作成します。詳細については、「Amazon EventBridge とは?」を参照してください。

ルールには、1 つの EventPattern または ScheduleExpression が含まれている必要があります。EventPattern を含むルールは、一致するイベントが確認されときにトリガーされます。ScheduleExpression を含むルールは、指定されたスケジュールに基づいて自己トリガーします。ルールには、EventPatternScheduleExpression の両方を含めることができます。その場合、ルールは一致するイベントとスケジュールでトリガーされます。

AWS のほとんどのサービスでは、Amazon リソースネーム (ARN) 内の : または / は同じ文字として扱われます。ただし、EventBridge では、イベントパターンおよびルールで完全一致が使用されます。イベントパターンの作成時に正しい ARN 文字を使用して、一致させるイベント内の ARN 構文とそれらの文字が一致するようにしてください。

構文

AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。

JSON

{ "Type" : "AWS::Events::Rule", "Properties" : { "Description" : String, "EventBusName" : String, "EventPattern" : Json, "Name" : String, "RoleArn" : String, "ScheduleExpression" : String, "State" : String, "Targets" : [ Target, ... ] } }

YAML

Type: AWS::Events::Rule Properties: Description: String EventBusName: String EventPattern: Json Name: String RoleArn: String ScheduleExpression: String State: String Targets: - Target

プロパティ

Description

ルールの説明。

必須: いいえ

タイプ: 文字列

最大: 512

Update requires: No interruption

EventBusName

このルールに関連付けるイベントバス。これを省略すると、デフォルトのイベントバスが使用されます。

必須: いいえ

タイプ: 文字列

最小: 1

最大: 256

パターン: [/\.\-_A-Za-z0-9]+

Update requires: Replacement

EventPattern

どのイベントを指定ターゲットにルーティングするかを説明します。詳細については、Amazon EventBridge ユーザーガイドの「EventBridge のイベントとイベントパターン」を参照してください。

CloudFormation を使用する場合は、次のように、イベントパターンの各部分を角括弧で囲む必要があります。

"EventPattern": { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

ルールには、 EventPattern または ScheduleExpression のいずれかが含まれている必要があります。

必須: 条件付き

タイプ: Json

Update requires: No interruption

Name

ルールの名前。名前を指定しない場合、AWS CloudFormation は一意の物理 ID を生成し、その ID をルール名として使用します。

重要

名前を指定すると、このリソースの置換が必要な更新はできません。中断が不要であるか、一定の中断が必要な更新であれば、行うことができます。リソースを置き換える必要がある場合は、新しい名前を指定します。

必須: いいえ

タイプ: 文字列

最小: 1

最大: 64

パターン: [\.\-_A-Za-z0-9]+

Update requires: Replacement

RoleArn

ターゲットの呼び出しに使用されるロールの Amazon リソースネーム (ARN)。

他のアカウントのイベントバスをターゲットとして設定していて、そのアカウントが直接アカウント ID ではなく組織を通じて自分のアカウントにアクセス許可を与えている場合は、このパラメータではなく、Target 構造で適切なアクセス許可を持つ RoleArn を指定する必要があります。

必須: いいえ

タイプ: 文字列

最小: 1

最大: 1600

Update requires: No interruption

ScheduleExpression

ルールがいつ、どのくらいの頻度で実行されるかを決定するスケジューリング式。詳細については、「ルールのスケジュール式」を参照してください。

ルールには、ScheduleExpression または EventPattern のいずれかが含まれている必要があります。

必須: 条件付き

タイプ: 文字列

最大: 256

Update requires: No interruption

State

ルールが有効かどうかを示します。

必須: いいえ

タイプ: 文字列

許可された値: DISABLED | ENABLED

Update requires: No interruption

Targets

ルールがトリガーされたときに呼び出される AWS リソース。有効なターゲットの詳細については、「PutTargets」を参照してください。

他のアカウントのイベントバスをターゲットとして設定していて、そのアカウントが直接アカウント ID ではなく組織を通じて自分のアカウントにアクセス許可を与えている場合は、Target 構造で適切な許可を持つ RoleArn を指定する必要があります。詳細については、Amazon CloudWatch Events ユーザーガイドの「AWS アカウント間でのイベントの送受信」を参照してください。

必須: いいえ

タイプ: Target のリスト

Update requires: No interruption

戻り値

参照番号

このリソースの論理 ID を組み込みの Ref 関数に渡すと、Ref は次を返します: : イベントルール ID (mystack-ScheduledRule-ABCDEFGHIJK など)。

For more information about using the Ref function, see Ref.

Fn::GetAtt

Arn

ルールの ARN (arn:aws:events:us-east-2:123456789012:rule/example など)。

Lambda 関数を定期的に呼び出す

次の例では、10 分ごとに指定の Lambda 関数を実行するルールを作成します。PermissionForEventsToInvokeLambda リソースは EventBridge に関連機能を呼び出すアクセス許可を付与します。

JSON

"ScheduledRule": { "Type": "AWS::Events::Rule", "Properties": { "Description": "ScheduledRule", "ScheduleExpression": "rate(10 minutes)", "State": "ENABLED", "Targets": [{ "Arn": { "Fn::GetAtt": ["LambdaFunction", "Arn"] }, "Id": "TargetFunctionV1" }] } }, "PermissionForEventsToInvokeLambda": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName": { "Ref": "LambdaFunction" }, "Action": "lambda:InvokeFunction", "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": ["ScheduledRule", "Arn"] } } }

YAML

ScheduledRule: Type: AWS::Events::Rule Properties: Description: "ScheduledRule" ScheduleExpression: "rate(10 minutes)" State: "ENABLED" Targets: - Arn: Fn::GetAtt: - "LambdaFunction" - "Arn" Id: "TargetFunctionV1" PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: Ref: "LambdaFunction" Action: "lambda:InvokeFunction" Principal: "events.amazonaws.com" SourceArn: Fn::GetAtt: - "ScheduledRule" - "Arn"

Lambda 関数をイベントに応じて呼び出す

次の例では、EC2 インスタンスの状態が停止に変わると指定された Lambda 関数を実行するルールを作成します。

JSON

"EventRule": { "Type": "AWS::Events::Rule", "Properties": { "Description": "EventRule", "EventPattern": { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "detail": { "state": [ "stopping" ] } }, "State": "ENABLED", "Targets": [{ "Arn": { "Fn::GetAtt": ["LambdaFunction", "Arn"] }, "Id": "TargetFunctionV1" }] } }, "PermissionForEventsToInvokeLambda": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName": { "Ref": "LambdaFunction" }, "Action": "lambda:InvokeFunction", "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": ["EventRule", "Arn"] } } }

YAML

EventRule: Type: AWS::Events::Rule Properties: Description: "EventRule" EventPattern: source: - "aws.ec2" detail-type: - "EC2 Instance State-change Notification" detail: state: - "stopping" State: "ENABLED" Targets: - Arn: Fn::GetAtt: - "LambdaFunction" - "Arn" Id: "TargetFunctionV1" PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: Ref: "LambdaFunction" Action: "lambda:InvokeFunction" Principal: "events.amazonaws.com" SourceArn: Fn::GetAtt: - "EventRule" - "Arn"

ログエントリに応じてトピックを通知する

次の例では、AWS CloudTrail ログエントリにルートユーザーによる呼び出しが含まれている場合、Amazon Simple Notification Service トピックを通知するルールを作成します。EventTopicPolicy リソースは、Amazon EventBridge に関連付けられた Amazon SNS トピックを通知するアクセス許可を付与します。

JSON

"OpsEventRule": { "Type": "AWS::Events::Rule", "Properties": { "Description": "EventRule", "EventPattern": { "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "userIdentity": { "type": [ "Root" ] } } }, "State": "ENABLED", "Targets": [ { "Arn": { "Ref": "MySNSTopic" }, "Id": "OpsTopic" } ] } } "EventTopicPolicy": { "Type": "AWS::SNS::TopicPolicy", "Properties": { "PolicyDocument": { "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "*" } ] }, "Topics": [ { "Ref": "MySNSTopic" } ] } }

YAML

OpsEventRule: Type: AWS::Events::Rule Properties: Description: "EventRule" EventPattern: detail-type: - "AWS API Call via CloudTrail" detail: userIdentity: type: - "Root" State: "ENABLED" Targets: - Arn: Ref: "MySNSTopic" Id: "OpsTopic" EventTopicPolicy: Type: 'AWS::SNS::TopicPolicy' Properties: PolicyDocument: Statement: - Effect: Allow Principal: Service: events.amazonaws.com Action: 'sns:Publish' Resource: '*' Topics: - !Ref MySNSTopic