cloudformation으로 lambda 함수 생성해보기

2022.01.12

안녕하세요, 임채정입니다.
이번 블로그에서는 S3에 있는 함수 .zip 파일을 Cfn을 통해 람다 함수로 생성하는 방법에 대해 정리했습니다.

S3 버킷 작성

람다 함수 .zip 파일 압축

람다 함수는 테스트를 위해 간단하게 작성했습니다.
파일이름: lambda_function.py

import json

def lambda_handler(event, context):
    return "Lambda-cfn"

그 후 파일을 .zip 파일의 형태로 압축합니다.
압축 파일 이름: lambda_function.zip

S3 버킷 생성 및 파일 업로드

그 다음으로 .zip 파일을 넣어둘 버킷을 생성하겠습니다.
스택 생성 시 파일의 버전 정보를 입력해야 되기 때문에 버전 관리을 활성화 해줍니다.

버킷이 생성이 잘 되면 위에서 만들어둔 압축된 파일을 업로드하고 아래의 사진에 표시해둔 정보를 따로 정리해둡니다.
버킷이름 : lambda-cfn-20220106
파일 이름 : lambda_function.zip
파일 버전 : w4APSBR9u9SIuELyZX_5jYNanubulNt1

Cfn 스택 작성

Cfn 템플릿

템플릿은 두 개의 리소스를 생성합니다.
1. IAM Role
2. Lambda 함수

또한 파라미터에 S3의 정보를 입력합니다.
Default로 위에서 생성한 S3 정보를 입력해뒀습니다.

AWSTemplateFormatVersion: 2010-09-09
Description: Lambda creation
  
# ------------
# Parameters
# ------------
Parameters:
	S3Bucket:
		Default: "lambda-cfn-20220106"
		Type: String
	S3Key:
		Default: "lambda_funcion.zip"
		Type: String
	S3ObjectVersion:
		Default: "w4APSBR9u9SIuELyZX_5jYNanubulNt1"
		Type: String
  
# ------------
# Resources
# ------------
Resources:
	LambdaExecutionRole:
		Type: AWS::IAM::Role
		Properties:
			AssumeRolePolicyDocument:
				Version: "2012-10-17"
				Statement:
					- Effect: Allow
						Principal:
							Service:
								- lambda.amazonaws.com
						Action:
							- sts:AssumeRole
			Path: "/"
			Policies:
			- PolicyName: root
				PolicyDocument:
					Version: '2012-10-17'
					Statement:
					- Effect: Allow
						Action:
						- logs:*
						Resource: arn:aws:logs:*:*:*
					- Effect: Allow
						Action:
						- xray:PutTraceSegment
						- xray:PutTelemetryRecords
						- xray:GetSamplingRules
						- xray:GetSamplingTargets
						- xray:GetSamplingStatisticSummaries
						Resource: "*"
					- Effect: Allow
						Action:
						- s3:Get*
						- s3:List*
						Resource: "*"
	  
	LambdaFunction:
		Type: "AWS::Lambda::Function"
		Properties:
			Handler: "lambda_function.lambda_handler"
			Role: !GetAtt  LambdaExecutionRole.Arn
			Code:
				S3Bucket: !Ref  S3Bucket
				S3Key: !Ref  S3Key
				S3ObjectVersion: !Ref  S3ObjectVersion
			Runtime: "python3.9"
			Timeout: 10
			TracingConfig:
				Mode: "Active"

스택 생성

그럼 스택을 생성해보겠습니다.

위에서 준비해준 템플릿을 업로드 해줍니다.

스택이름을 입력하고, 입력되어진 파라미터 정보가 다르지 않은지 확인합니다.

IAM Role을 생성하기 때문에 스택 생성 전에 나오는 안내문에 체크를 해줍니다.

스택을 생성하고 기다리면 템플릿에 작성한 것과 같이 두 개의 리소스가 생성되었습니다.

리소스 확인

이번에는 생성된 리소스가 템플릿에 적힌 그대로 생성이 잘 되었는지 확인해보겠습니다.

IAM Role 를 확인해보면 작성한 권한이 잘 들어간채로 잘 생성이 되었습니다.

람다 함수도 실행도 잘 되는 상태로 잘 생성이 되었습니다.