Back End/AWS
[AWS] Lambda 에서 Lambda 를 호출하기 (Feat. JavaScript, Python)
DevPing9_
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