[AWS] Lambda 함수 복제 가이드 (CloudShell 기준)
목표
- 기존 함수:
insite-account-autosave
- 복제 대상 함수:
insite-account-autosave-multibuilding
- 복제 항목: 코드, 환경변수, 레이어, IAM 역할, VPC 설정 등
1. 기존 함수 정보 확인
환경변수, 레이어, VPC 등 확인
aws lambda get-function-configuration \
--function-name insite-account-autosave \
--query '{Runtime:Runtime,Role:Role,Handler:Handler,Timeout:Timeout,MemorySize:MemorySize,Environment:Environment,Layers:Layers,VpcConfig:VpcConfig,Description:Description}'
2. 기존 함수 코드 다운로드
aws lambda get-function \
--function-name insite-account-autosave \
--query 'Code.Location' \
--output text
- 출력된 S3 presigned URL을 브라우저로 다운로드
- 예:
https://awslambda-ap-northeast-2.s3.amazonaws.com/......
- 다운로드 받은 파일을
lambda-code.zip
으로 이름 변경
또는 wget
으로 CloudShell에서 직접 다운로드:
wget "https://...signed_url..." -O lambda-code.zip
3. 복제 함수 생성
aws lambda create-function \
--function-name insite-account-autosave-multibuilding \
--runtime python3.10 \
--role arn:aws:iam::0217XXXXXXXX:role/service-role/insite-account-autosave-role-vdujyfi1 \
--handler lambda_function.lambda_handler \
--zip-file fileb://lambda-code.zip \
--timeout 30 \
--memory-size 128 \
--environment '{
"Variables": {
"SNS_TOPIC_ARN": "arn:aws:sns:ap-northeast-2:0217XXXXXXXX:error-alert",
"DB_PORT": "5432",
"DB_USER": "db_user",
"DB_NAME": "db_name",
"DB_HOST": "hdcl-xxxx-rds-aurora-cluster.cluster-xxxxxxxxx.ap-northeast-2.rds.amazonaws.com",
"BUCKET_NAME": "bucket_name",
"DB_PASSWORD": "db_password"
}
}' \
--layers arn:aws:lambda:ap-northeast-2:0217XXXXXXXX:layer:pandas-layer:1 \
--vpc-config '{
"SubnetIds": ["subnet-0bca5bf4127exxxxx", "subnet-0bca5bf4127exxxxx"],
"SecurityGroupIds": ["sg-0bca5bf4127exxxxx"]
}' \
--description "복제함수 from insite-account-autosave"
❗주의
--zip-file fileb://lambda-code.zip
에서fileb://
는 바이너리 파일 업로드 시 필수
--environment
전체는 작은 따옴표'
로 감싸야 CLI 파싱 오류가 없음
4. 트리거 설정 (필요시)
예: EventBridge, CloudWatch, S3, API Gateway 등 기존 함수 트리거가 있다면 별도로 복제 필요
aws lambda add-permission ...
5. 테스트
- AWS Console → Lambda →
insite-account-autosave-multibuilding
- 수동 테스트 or 기존 이벤트 샘플로 실행
-
이제
insite-account-autosave
함수와 동일한 설정을 가진insite-account-autosave-multibuilding
함수가 생성되었다.
자동화 스크립트 (Shell Script)
복제 작업을 자동화하는 스크립트를 사용하면 편리하다. 아래는 전체 복제 과정을 자동화한 스크립트.
clone_lambda.sh
#!/bin/bash
# 사용법 안내
if [ $# -ne 2 ]; then
echo "사용법: $0 <기존함수이름> <새함수이름>"
echo "예: $0 insite-account-autosave insite-account-autosave-multibuilding"
exit 1
fi
SOURCE_FUNCTION="$1"
TARGET_FUNCTION="$2"
ZIP_FILE="lambda-code.zip"
echo "[1] 기존 Lambda 설정 가져오는 중..."
CONFIG=$(aws lambda get-function-configuration --function-name "$SOURCE_FUNCTION")
ROLE=$(echo "$CONFIG" | jq -r '.Role')
HANDLER=$(echo "$CONFIG" | jq -r '.Handler')
RUNTIME=$(echo "$CONFIG" | jq -r '.Runtime')
TIMEOUT=$(echo "$CONFIG" | jq -r '.Timeout')
MEMORY=$(echo "$CONFIG" | jq -r '.MemorySize')
ENV=$(echo "$CONFIG" | jq -c '.Environment')
LAYERS=$(echo "$CONFIG" | jq -c '[.Layers[].Arn]')
VPC_CONFIG=$(echo "$CONFIG" | jq -c '{SubnetIds: .VpcConfig.SubnetIds, SecurityGroupIds: .VpcConfig.SecurityGroupIds}')
DESCRIPTION=$(echo "$CONFIG" | jq -r '.Description')
echo "[2] 함수 코드 다운로드 중..."
CODE_URL=$(aws lambda get-function --function-name "$SOURCE_FUNCTION" --query 'Code.Location' --output text)
wget "$CODE_URL" -O "$ZIP_FILE"
echo "[3] 새 Lambda 함수 생성 중..."
aws lambda create-function \
--function-name "$TARGET_FUNCTION" \
--runtime "$RUNTIME" \
--role "$ROLE" \
--handler "$HANDLER" \
--zip-file fileb://"$ZIP_FILE" \
--timeout "$TIMEOUT" \
--memory-size "$MEMORY" \
--environment "$ENV" \
--layers "$LAYERS" \
--vpc-config "$VPC_CONFIG" \
--description "$DESCRIPTION"
echo "[완료] 새 Lambda 함수 '$TARGET_FUNCTION' 생성됨!"
⚠
jq
CLI가 필요. CloudShell에서는 기본 설치되어 있음
실행 방법
chmod +x clone_lambda.sh
./clone_lambda.sh insite-account-autosave insite-account-autosave-multibuilding