AWS::Events::Rule
AWS::Events::Rule
リソースは、受信するイベントに一致し、それらをターゲットにルーティングして処理するルールを作成します。詳細については、「Amazon EventBridge とは?」を参照してください。
ルールには、1 つの EventPattern
または ScheduleExpression
が含まれている必要があります。EventPattern
を含むルールは、一致するイベントが確認されときにトリガーされます。ScheduleExpression
を含むルールは、指定されたスケジュールに基づいて自己トリガーします。ルールには、EventPattern
と ScheduleExpression
の両方を含めることができます。その場合、ルールは一致するイベントとスケジュールでトリガーされます。
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
例
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