-------------------------------------------------------------------------------------------
RDS에서 들어온 데이터를 이벤트 처리하는것이 필요했다.
여러가지 방안을 생각했는데, 그중에서 람다와 연결할 수 있을 것같다른 판단하게 검색을 시작하였고,
역시 AWS에서 안되는것은 없나보다. 해당부분이 있길래 언젠가 또 써먹을 일이 있을것이라는 생각하에 정리한다.
Aurora에 Lambda에 대한 액세스 권한 부여
먼저 Aurora에서 Lambda 함수를 호출하기 위해서는 Lambda 접근 권한을 부여 해야합니다,
(현재 RDS는 만들어져 있는 상태이며, 인바운드만 변경해둔 상태, 퍼블릭으로 열려있음)
생성된 RDS의 클러스터 상세로 들어갑니다.
들어간 상세안에서 IAM 역할 관리를 찾습니다.
(기존에 셋팅된 IAM이 있다면 해당 정책으로 연결해도 무방하나, 없을 확률이 99.9%일 것같습니다.
왜냐하면... 특정 람다함수를 연결할 것이기 때문이죠..)
서비스 연결을 클릭합니다.
연결할 람다함수의 ARN을 입력하고 서비스 연결을 클릭합니다.
람다함수의 ARN은 람다함수 상세 오른쪽 위에서 확인 할 수 있습니다.
생성되어진 역할을 잘 복사해두어 차후에 있는 클러스터 셋팅에서 활용합니다
--------------------------------------------------------------------------------------------------------------
연결할 Aurora의 버전을 확인합니다
SELECT AURORA_VERSION();
이렇게 되면 현재 Aurora의 버전을 확인 할 수 있습니다.
네이티브 함수를 쓰는 걸 권장하는 버전
- MySQL 5.6 호환 클러스터의 경우 Aurora MySQL 버전 1.16 이상.
- MySQL 5.7 호환 클러스터의 경우 Aurora MySQL 버전 2.06 이상.
RDS 클러스터 그룹 셋팅
파라미터 그룹을 생성합니다.
기존의 파라미터 그룹이 default가 아니라면 해당 파라미터에서 수정해도 무방합니다.
새로운 클러스터 파라미터 그룹을 만듭니다.
해당 파라미터 그룹으로 기존 RDS의 클러스트를 교체합니다.
이후 IAM으로 들어가 RDS에서 새롭게 추가한 iam의 역할이름을 검색한뒤 해당 상세로 들어옵니다.
역할 ARN을 복사합니다.
다시 RDS의 파라미터로 들어온뒤 위에서 RDS와 연결한 클러스터 그룹의 파라미터를 편집합니다.
위에서 복사한 IAM의 ARN의 값을
aws_default_lambda_role의 값으로 넣어줍니다
파라미터를 저장하고 나옵니다.
이후 파라미터가 적용이 될수 있게 인스턴스를 재부팅 합니다.
Aurora MySQL 네이티브 함수로 Lambda 함수 호출
내장된 네이티브 함수
lambda_sync : 다른 작업으로 넘어가기 전에 실행 결과를 알 필요가 없는 경우(비동기적)
lambda_async: 다른 작업으로 넘어가기 전에 호출된 함수의 실행 결과를 알아야 하는 경우 (동기적)
네이티브 함수를 호출하는 사용자에게는 INVOKE LAMBDA 권한 필요
마스터 사용자로 부터 DB 인스턴스 연결 이후 명령어 실행
GRANT INVOKE LAMBDA ON *.* TO user@domain-or-ip-address
람다 함수를 호출하여 람다와 연결이 되는지 확인
SELECT lambda_sync(
'arn:aws:람다함수ARN',
'{"operation": "ping"}'
);
이렇게 보내면 해당 람수함수에 json형태의 해당 값이 전달되어집니다.
트리거를 설정하여 람다 함수를 호출 할 수 도 있습니다
DELIMITER $$
CREATE TRIGGER insertData
AFTER INSERT ON cin
FOR EACH ROW
BEGIN
SELECT NEW.con INTO @con;
CALL mysql.lambda_async('람다ARN',
CONCAT('{ "con" : "', @con, '"}'));
END $$
DELIMITER ;
'IT > AWS' 카테고리의 다른 글
AWS MediaConvert 와 Lambda를 통한 스트리밍 파일 S3업로드 (4) | 2021.02.25 |
---|---|
AWS AMI 다른 계정과 공유하기 (0) | 2020.07.07 |
Lambda Layer를 통하여 Python에 패키지 넣기 (0) | 2020.06.29 |
[AWS] Lambda@edge로 이미지 리사이징 작업 (0) | 2020.03.26 |
[AWS] EC2 비교 온디맨드/스팟/예약 (0) | 2020.03.25 |