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