-
[AWS] Lambda 에서 Lambda 를 호출하기 (Feat. JavaScript, Python)Back End/AWS 2022. 9. 17. 17:53
AWS IAM 활동을 모니터링하고 알람을 보내는 어플리케이션을 구축할 일이 있었다.
기존에 Application 이상 지표들을 바탕으로 알람을 보내는 어플리케이션이 있어서 기존 프로젝트 뼈대 위에 작업을 해야 했었다.
기존 프로젝트의 serverless.yml 은 일본리젼에 일괄 배포하고 있었다.
AWS IAM 은 CloudTrail 이 버지니아에서 추적하고 있기에 CloudWatch 와 Lambda 모두 버지니아 지역에 있어야 했다.
SNS 는 타지역의 Lambda 도 호출할 수 있기에
버지니아에서 payload 를 by-pass 하는 Lambda 를 만들어 일본리젼의 Lambda 로 넘겨주었다.
2번의 ColdStart 와 과금문제가 있긴했지만 동작이 되는지 안되는지 확인을 하기 위해 잠시 위와 같은 구조를 가졌었다.
지금은 플러그인을 사용하여 함수를 리젼별로 배포하고 있다.
아래는 그 당시에 Lambda 에서 Lambda 를 호출하기 위해 사용했던 코드이다.
JavaScript
const awsSDK = require('aws-sdk'); const lambda = new aws.Lambda({ region: 'ap-northeast-1' }); const payload = { some properties... }; lambda.invoke( { FunctionName: 'LambdaFunctionName', // 호출 람다 이름 Payload: JSON.stringify(payload) }, (error, data)->{ ... } );
Python
import boto3 lambda_client = boto3.client( 'lambda', region_name='ap-northeast-2', aws_access_key_id='{lambda 권한이 있는 계정의 accessKey}', aws_secret_access_key='{lambda 권한이 있는 계정의 secretAccessKey}' ) response = lambda_client.invoke( FunctionName='LambdaFunctionName', # 호출할 람다 이름 InvocationType='Event', Payload=json.dumps({ ...JSON Properties... }) )
함수를 리젼별로 배포하는 플러그인
[AWS] Serverless 함수 리젼별로 배포하기
작업을 하다가 Lambda 를 Region 별로 배포를 해야 할 일이 생겼다. 레파지토리를 나누기엔 같은 서비스 도메인이라 아닌 것 같고, 레파지토리 내에서 폴더구조를 리젼별로 나누어 serverless.yml 을 중
developer-ping9.tistory.com
Reference
Lambda — Boto3 Docs 1.24.75 documentation
Resource (string) -- [REQUIRED] The function's Amazon Resource Name (ARN). Note: Lambda does not support adding tags to aliases or versions.
boto3.amazonaws.com
Lambda에서 Lambda를 호출하는 방법
AWS Lambda에서 Lambda를 호출하는 방법들에 대해서 소개하겠다.
devstarsj.github.io
728x90'Back End > AWS' 카테고리의 다른 글
[AWS] 서비스에 WAF 적용하기 (0) 2022.10.10 [AWS] BeanStalk(EC2) 에 wkhtmltopdf 라이브러리 설치하기 (0) 2022.09.25 [AWS] Serverless 함수 리젼별로 배포하기 (0) 2022.09.17 [AWS] Java 프로젝트에서 .ebextensions 사용하기 (0) 2022.09.17 [AWS] Permission denied (publickey,gssapi-keyex,gssapi-with-mic) (0) 2022.08.28