AWS

AWS Aurora MySQL에서 Lambda 함수 호출하기

DevelopC 2022. 11. 8. 13:57
728x90

AWS Aurora MySQL에서 Lambda 함수 호출하기

AWS Aurora MySQL에서 lambda_sync, lambda_async 함수를 사용하여 lambda 함수를 실행할 수 있습니다. stored procedure를 통해 lambda 함수를 호출하는 건 더 이상 지원하지 않으므로 설명하지 않습니다. 

AWS Aurora MySQL에서 lambda_sync, lambda_async 함수를 사용하기 위해서는 IAM Role 설정 및 MySQL 권한 설정을 해야 합니다. 

IAM Role

IAM Role 생성

아래의 내용을 trust-policy.json 파일로 저장하고, aws cli 명령어를 실행합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
$ aws iam create-role --role-name lambda-test-role --assume-role-policy-document file://trust-policy.json

Lambda Invoke 권한 설정

아래의 내용 중 resource에 실행할 lambda function arn으로 수정하여 lambda-invoke.json 파일로 저장하고, aws cli 명령어를 실행합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "${lambdaFunctionARN}"
        }
    ]
}
$ aws iam put-role-policy --role-name lambda-test-role --policy-name lambda-invoke --policy-document file://lambda-invoke.json

AWS Aurora MySQL

Manage IAM roles

AWS RDS 콘솔을 사용하여 생성한 IAM Role을 추가해주세요. Add role 후에 조금만 기다리면 Pending 상태에서 Active 상태로 전환됩니다.

DB cluster parameter group

AWS Aurora MySQL에 설정한 DB cluster parameter group의 aws_default_lambda_role에 생성한 IAM Role ARN을 설정해주세요.

MySQL 권한 설정

MySQL 콘솔에 접속하여 lambda_sync, lambda_async 함수를 실행할 유저한테 권한을 설정합니다.

GRANT AWS_LAMBDA_ACCESS TO user@domain-or-ip-address

lambda 함수 실행

위의 IAM Role 및 MySQL 권한 설정을 모두 하셨으면, 아래의 명령어를 통해 lambda 함수를 호출할 수 있습니다. SELECT문을 사용하여 함수 호출하는 방식입니다. SELECT 문을 사용하여 lambda 함수를 직접 실행할 수도 있고, stored procedure 및 trigger를 활용하여 lambda 함수를 실행할 수 있습니다.

--lambda_sync example
SELECT lambda_sync(
  lambda_function_ARN,
  JSON_payload
);

SELECT lambda_sync(
  '${lambdaFunctionARN}', 
  '{"operation": "ping"}'
);


--lambda_async example
SELECT lambda_async(
  lambda_function_ARN,
  JSON_payload
);

SELECT lambda_async(
  '${lambdaFunctionARN}', 
  '{"operation": "ping"}'
);

참고

 

Invoking a Lambda function from an Amazon Aurora MySQL DB cluster - Amazon Aurora

Be careful when invoking an AWS Lambda function from triggers on tables that experience high write traffic. INSERT, UPDATE, and DELETE triggers are activated per row. A write-heavy workload on a table with INSERT, UPDATE, or DELETE triggers results in a la

docs.aws.amazon.com

 

728x90