ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS Aurora db에서 Lambda 함수 호출
    case Computer :/AWS | DevOps 2022. 1. 22. 21:45

    AWS에서 제공되는 데이터베이스 종류는 여러 가지가 있지만 Lambda 함수 호출이 가능한 DB는 Aurora DB만 가능합니다.
    Aurora db는 AWS에서 MySQL을 기반으로 수정 후에 제공되는 DB로 maria db와 비슷하다고 생각하면 됩니다.

     

    AWS에서 Aurora DB를 사용하는것은 여러 가지 이득이 있습니다. 볼륨 크기 제한 이라든가 가격적인 측면도 있습니다.

    그리고 이 포스트에서 설명하는 Lambda 함수를 직접 호출이 가능합니다.

     

    aurora db에서만 있는 mysql.lambda_async(), mysql.lambda_sync() 함수가 있습니다. 이 함수는 프로시저나 트리거를 통해서 호출이 가능합니다.  그렇기 프로시저나 트리거로 부족한 기능을 이기능으로 처리 가능합니다. 마지 backgound task 처럼 사용하기에 좋습니다.

     

    예를 들면 신규 멤버가 등록되면 회원가입 Email을 보내는 lambda 함수를 호출 시킬수 있습니다.

     

    그러면 aurora db에서 lambda를 호출할수 있도록 설정하는 방법을 차례차례 알아보겠습니다.

     

    환경
    Region: us-east-1
    Aurora Version : Aurora MySQL 2.09.2
    Aurora instance type : db.t3.small

    먼저 aurora db를 생성 하고 Lambda Function을 생성합니다.

     

    순서는

     

    1. Aurora DB가 Lambda Function 액세스 할 수 있는 IAM 역할을 만들고

       1.1 IAM 정책(Policy) 추가

       1.2 IAM 역할(Role) 추가

    2. Aurora DB Cluster에 IAM 역할 관리 추가

    3. Aurora DB Cluster Parameter Group 생성 및 연결

       3.1 Cluster Parameter Group 생성

       3.2 생성한 Cluster Parameter Group을 Aurora DB에 연결

    4. Aurora DB User에게 권한 추가

    5. 실행 및 응용

     

    이렇게 진행 됩니다.

    처음 해본다면 복잡할 수 있기 때문에 차례대로 따라 하세요

     

    1. Aurora DB가 Lambda Function에 액세스 할 수 있게 해주는 IAM 역할을 만든다.

    1.1 IAM 정책(Policy) 추가

     

    a. IAM > 정책 > 정책 생성을 클릭합니다.
      서비스 : Lambda
      작업 : 쓰기 - InvokeFunction
      이 권한이 Aurora에서 lambda를 호출할 수 있는 최소 권한입니다.

      리소스는 편의에 따라 모든 리소스를 선택해도 되고 특정 Function만 호출하게 하려면 lambda function ARN을 추가합니다.

    b. 다음 버튼 클릭 후 정책 이름을 입력 후 정책을 생성합니다.

       정책 이름(policy name) : AllowAuroraToTestFunction

     

     

    1.2 IAM 역할(Role) 추가

     

    a. IAM > 역할 > 역할 만들기 클릭

      사용 사례에서 RDS를 선택하고

      하단에서 RDS - Add Role to Database를 선택하고 다음 버튼 클릭

     

    b. 연결할 정책을 검색 후 선택

     1.1 에서 위에서 생성했던 정책(policy)을 "AllowAuroraToTestFunction" 검색하여 선택 후 다음 버튼 클릭

    c. 역할 이름 입력 후 역할 만들기

    역할(Role) 이름: RDSLoadFromS3

     

     

    2.  Aurora DB Cluster에 IAM 역할  관리 추가

    클러스터 클릭 후 하단에 IAM 역할 관리 부분에서 1에서 생성한 RDSLoadFromS3 역할을 추가한다.
    추가가 완료되면 하단처럼 활성이라고 표시됩니다.

     

    3.  Aurora DB Cluster Parameter Group 생성 및 연결


    3-1. Cluster Parameter Group 생성

     

    a. RDS > 파라미터 그룹 > "파라미터 그룹 생성" 을 합니다.
    파라미터 그룹 패밀리 : aurora db 버전에 맞는 내용을 선택해주세요
    유형 : DB Cluster Parameter Group
    그룹 이름 : visu4l-aurora-mysql57 (이름은 사용자가 원하는 대로 변경하세요)

     

    b. RDS > 파라미터 그룹에서 방금 생성한 파라미터 그룹을 선택하고 수정 페이지로 진입합니다.

      상단 검색에 aws_default_lambda_role 이라고 검색을 하면 값 부분이 비어 있습니다.

      aws_default_lambda_role 왼쪽에 체크박스를 선택하고 "파라미터 편집"을 클릭하면 값을 입력할 수 있습니다.

      값에는 IAM 역할을 생성했던 RDSLoadFromS3ARN 값을 복사하여 넣습니다.

    Role ARN

     

    3-2. 생성한 Cluster Parameter Group을 aurora db에 연견
    a. Aurora Cluster를 선택하고 수정을 합니다.

     

    b. 수정 항목 중에 DB 클러스터 파라미터 그룹을 위에서 새로 생성한 파라미터 그룹으로 변경하고 완료합니다.

    완료 시에 즉시 적용을 사용합니다.(실섭이라면 즉시 적용은 지양하세요)

     

    4. Aurora db User에게 권한 추가

      mysql client를 통해 db에 접속합니다.

      아래 명령을 통해 Lambda INVOKE 권한을 Admin에게 추가합니다. 

    -- Aurora 버전이 2 이하 일때 (본 포스팅은 2 버전입니다)
    Grant INVOKE LAMBDA ON *.* TO 'admin'@'%';
    
    
    -- Aurora 버전이 3 일때
    GRANT AWS_LAMBDA_ACCESS TO 'admin'@'%';


    5.  실행 및 응용

    기본 호출

    -- 기본호출
    call mysql.lambda_async('arn:aws:lambda:us-east-1:477104637467:function:test', '');
    
    
    -- 트리거(Trigger) 에서 사용
    -- row가 insert 된 이후에 훌려지는 경우에 lambda function 호출
    DELIMITER $
    CREATE TRIGGER test2_trigger AFTER INSERT ON test FOR EACH ROW
    BEGIN
    	CALL mysql.lambda_async('arn:aws:lambda:us-east-1:477104637467:function:test',	'');
    END $
    DELIMITER ;
    
    
    -- event paramter 전달 방법 
    DELIMITER $
    CREATE TRIGGER test2_trigger AFTER INSERT ON test FOR EACH ROW
    BEGIN
    	CALL mysql.lambda_async('arn:aws:lambda:us-east-1:477104637467:function:test',	
    	CONCAT('{ "id" : "', NEW.id, '"',
               ', "name" : "', NEW.name, '"',
               ', "email" : "', NEW.email, '"',
               '}'));
    END $
    DELIMITER ;

     

    lambda 호출 사용지 주의할 점
    trigger 이용하여 호출 시 table이 insert 나 update 매우 빈번하다면 lambda 호출 또한 많아지게 됩니다.
    그럴 때는 조건문을 사용하여 호출을 제한하시는 추천 합니다.

     

    좀더 상세한 내용이 필요하다면 아래 AWS Aurora MySQL에서 Lambda 함수 호출 페이지 를 참고바랍니다.
    https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Lambda.html

     

     

    아래 에러났을때 

    Lambda API returned error: Missing designated IAM role (aws_default_lambda_role) : 링크참조 
    Lambda API returned error: Missing IAM Credentials for specified aws_default_lambda_role  : 링크참조 

    반응형

    댓글

Designed by Tistory.