AWS CDK 및 AWS EFS를 사용하는 영구 파일 저장소가 있는 Lambda 함수
AWS EFS
를 사용하면 Lambda 함수에 attach a persistent filesystem 할 수 있습니다!GitHub Repository
CDK 초기화 및 배포
CDK 설정 및 환경 부트스트래핑은 다루지 않겠습니다. 해당 정보를 찾을 수 있습니다here..
CDK를 설정했으면 프로젝트를 설정해야 합니다.
mkdir cdk_docker_lambda && cd cdk_docker_lambda
cdk init --language python
source .venv/bin/activate
pip install -r requirements.txt && pip install -r requirements-dev.txt
이제 빈 스택을 AWS에 배포합니다.
cdk deploy
스택 설계
CDK 스택은
EFS
파일 시스템, Lambda 함수 및 파일 시스템을 함수에 연결할 수 있는 액세스 포인트를 배포할 것입니다.cdk_lambda_efs/cdk_lambda_efs_stack.py
from aws_cdk import Stack
from aws_cdk import aws_ec2 as ec2
from aws_cdk import aws_efs as efs
from aws_cdk import aws_lambda as _lambda
from constructs import Construct
from aws_cdk import RemovalPolicy
class CdkLambdaEfsStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# I like to define all my pieces in __init__
self.vpc = None
self.access_point = None
self.lambda_func = None
self.build_infrastructure()
def build_infrastructure(self):
self.build_vpc()
self.build_filesystem()
self.build_lambda_func()
def build_vpc(self):
# Build the VPC where both EFS and Lambda will sit
self.vpc = ec2.Vpc(self, "VPC")
def build_filesystem(self):
file_system = efs.FileSystem(
scope=self,
id="Efs",
vpc=self.vpc,
file_system_name="ExampleLambdaAttachedEFS",
# Makes sure to delete EFS when stack goes down
removal_policy=RemovalPolicy.DESTROY,
)
# create a new access point from the filesystem
self.access_point = file_system.add_access_point(
"AccessPoint",
# set /export/lambda as the root of the access point
path="/export/lambda",
# as /export/lambda does not exist in a new efs filesystem, the efs will create the directory with the following createAcl
create_acl=efs.Acl(
owner_uid="1001", owner_gid="1001", permissions="750"
),
# enforce the POSIX identity so lambda function will access with this identity
posix_user=efs.PosixUser(uid="1001", gid="1001"),
)
def build_lambda_func(self):
# I'm just using the normal CDK lambda function here. See my other articles for additional building methods.
_lambda.Function(
self,
"LambdaWithEFS",
runtime=_lambda.Runtime.PYTHON_3_9,
# lambda function file name.handler function
handler="lambda_EFS.handler",
# Points to directory of lambda function
code=_lambda.Code.from_asset("cdk_lambda_efs/lambda_EFS"),
# Lambda needs to be in same VPC as EFS
vpc=self.vpc,
filesystem=_lambda.FileSystem.from_efs_access_point(
ap=self.access_point, mount_path="/mnt/filesystem"
) if self.access_point else None,
)
람다 함수
추가 종속성 없이 람다 함수를 배포하겠습니다. 종속성이 필요한 경우 이를 수행하기 위해 다른
CDK
구성을 사용해야 합니다. 그리고 .이 람다 함수는
EFS
파일 시스템에서 파일을 열고 문자열을 쓴 다음 다시 열고 결과를 반환합니다.cdk_lambda_efs/lambda_EFS/lambda_EFS.py
from pathlib import Path
def handler(event, context):
# Writing to a file on the EFS filesystem
path = Path("/mnt/filesystem/test.txt")
with path.open("w") as f:
f.write("Test123")
# Now open the file, read the text, return
with path.open("r") as f:
text = f.read()
return f"Hello Lambda! {text}"
연결된 파일 시스템으로 람다 기능 테스트
AWS의 Lambda 콘솔로 이동합니다. 먼저 파일 시스템이 람다 함수에 성공적으로 연결되었음을 알 수 있습니다.
이제 모든 종류의 이벤트를 사용하여 테스트하십시오.
이 기사가 데이터를 유지하지 않는 람다 문제를 해결하는 데 도움이 되었기를 바랍니다. EFS는 메모리 문제에 대한 사용하기 쉽고 다양한 솔루션입니다.
비용이 청구되지 않도록 완료되면
cdk destroy
를 확인하십시오.
Reference
이 문제에 관하여(AWS CDK 및 AWS EFS를 사용하는 영구 파일 저장소가 있는 Lambda 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wesleycheek/lambda-function-with-persistent-file-store-using-aws-cdk-and-aws-efs-45h8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)