Lambda 및 StepFunction을 호출하는 EventBridge 규칙
15852 단어 cloudserverlesstutorialaws
구독 메커니즘은 이벤트 버스에서 포착할 이벤트의 패턴을 정의하고 해당 이벤트에서 호출할 여러 대상을 정의하는 개별 규칙을 통해 수행됩니다. Lambda 함수 또는 StepFunction 상태 시스템.
동기 부여
이 게시물은 규칙을 사용하여 이 두 서비스를 호출하는 방법과 그 과정에서 일반적인 인증 문제를 처리하는 방법에 대한 청사진 역할을 하기 위한 것입니다. 필요한 리소스는 JSON의 CloudFormation 템플릿으로 정의되지만 YAML로 쉽게 변환할 수 있습니다.
각각의 EventBridge 규칙에 의해 호출될 테스트 Lambda 함수와 테스트 StepFunction 상태 시스템을 생성했습니다. CloudFormation에서 이러한 리소스를
TestLambdaFunction
및 TestStateMachine
로 참조하지만 이는 논리적 ID일 뿐이며 배포 시 ARN으로 대체됩니다.StepFunction 상태 머신 호출
이 CloudFormation 템플릿은
InvokeStateMachineEventRule
가 start-state-machine
로 설정된 이벤트에 대해 default
이벤트 버스에서 수신하는 IDdetail-type
및 이름start-state-machine
의 이벤트 규칙을 정의합니다.대상은 규칙이 트리거될 때 호출되는 리소스입니다. 내장 함수
Fn::GetAtt
는 대상 리소스로 지정된 TestStateMachine
의 ARN을 반환합니다.또한 각 대상은 리소스를 호출하는 데 사용되는 IAM 역할을
RoleArn
로 정의해야 합니다.{
"InvokeStateMachineEventRule": {
"Type": "AWS::Events::Rule",
"Properties": {
"EventBusName": "default",
"EventPattern": {
"detail-type": ["start-state-machine"],
},
"Name": "start-state-machine",
"State": "ENABLED",
"Targets": [
{
"Arn": {
"Fn: :GetAtt": ["TestStateMachine","Arn"]
},
"Id": "TestStateMachine",
"RoleArn": {
"Fn: :GetAtt": ["InvokeStateMachineIamRole","Arn"]
},
},
],
},
},
}
IAM 역할은
InvokeStateMachineIamRole
로 정의되며 states:StartExecution
리소스에 대한 TestStateMachine
작업을 허용하는 인라인 정책을 포함합니다. 이 역할은 EventBridge 규칙에서 다른 서비스 리소스(예: StepFunction 상태 머신)를 호출하는 데 사용되므로 EventBridge에서 역할을 가져올 수 있도록 추가AssumeRolePolicyDocument
가 제공됩니다(예: principalevents.amazonaws.com
).{
"InvokeStateMachineIamRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"Policies": [
{
"PolicyName": "InvokeStateMachineRolePolicy",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["states:StartExecution"],
"Resource": [
{
"Fn: :GetAtt": ["TestStateMachine", "Arn"]
}
],
},
],
},
},
],
},
},
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": ["events.amazonaws.com"],
},
"Action": "sts:AssumeRole",
},
],
},
}
Lambda 함수 호출
이 이벤트 규칙
InvokeLambdaFunctionEventRule
은 이름이 start-lambda-function
이고 detail-type
가 start-lambda-function
로 설정된 이벤트를 수신한다는 점을 제외하면 이전 규칙과 유사합니다. 또한 대상 리소스는 TestLambdaFunction
이고 RoleArn
는 의도적으로 생략했습니다.{
"InvokeLambdaFunctionEventRule": {
"Type": "AWS::Events::Rule",
"Properties": {
"EventBusName": "default",
"EventPattern": {
"detail-type": ["start-lambda-function"],
},
"Name": "start-lambda-function",
"State": "ENABLED",
"Targets": [
{
"Arn": {
"Fn: :GetAtt": ["TestLambdaFunction","Arn"]
},
"Id": "TestLambdaFunction",
},
],
},
},
}
RoleArn
대상에 대해 TestLambdaFunction
를 제공하면 배포할 때 오류가 발생합니다.UPDATE_FAILED: InvokeLambdaFunctionEventRule (AWS::Events::Rule)
RoleArn is not supported for target arn:aws:lambda:eu-central-1:xxxxxxxxxxxx:function:eventbridge-rule-example-dev-test.
다른 서비스와 달리 Lambda는 resource-based permissions을 사용하여 다른 AWS 서비스가 사용자를 대신하여 이 함수를 호출할 수 있도록 합니다. 따라서
InvokeLambdaFunctionPermission
리소스(즉, 함수 이름)에 대해 Lambda:InvokeFunction
작업을 허용하는 TestLambdaFunction
정의를 추가해야 합니다. 또한 이 권한은 EventBridge 규칙에서 이 Lambda 함수를 호출하는 데 사용됩니다. 따라서 실제로 함수를 호출하는 주체events.amazonaws.com
와 ARNInvokeLambdaFunctionEventRule
을 지정해야 합니다.{
"InvokeLambdaFunctionPermission": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"FunctionName": {
"Fn: :GetAtt": ["TestLambdaFunction", "Arn"],
},
"Action": "lambda:InvokeFunction",
"Principal": "events.amazonaws.com",
"SourceArn": {
"Fn: :GetAtt": ["InvokeLambdaFunctionEventRule", "Arn"]
},
},
},
}
GitHub 리포지토리
Serverless Framework를 사용하여 모든 리소스를 배포했지만 Lambda 함수와 StepFunction 상태 머신을 빠르게 생성하기 위해서만 배포했습니다. 모든 중요한 리소스는 AWS CloudFormation 템플릿으로 정의되며 다른 방식으로 배포할 때 유효합니다. AWS SAM, AWS CLI 등
언제든지 전체 템플릿을 확인하고 자신의 AWS 계정에 배포하십시오: GitHub respository
Reference
이 문제에 관하여(Lambda 및 StepFunction을 호출하는 EventBridge 규칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zirkelc/eventbridge-rules-to-invoke-lambda-and-stepfunction-584m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)