AWS CDKとAWS AFSを用いた永続的ファイルストアによるラムダ関数
これまでにラムダ機能を保存することができますし、ローカルのS 3のバケット間のデータ転送を必要とせずにファイルをロードすることがありますか?この品はあなたのためです.
GitHub Repository
私はCDKを設定し、環境をブートストラップすることはありません.あなたは、その情報here.を見つけることができます
CDKを設定したら、プロジェクトを設定する必要があります.
私たちのCDKスタックは、
追加の依存関係なしでラムダ関数を展開します.依存関係が必要な場合は、異なる
このラムダ関数はファイルを
AWSでラムダコンソールに移動します.ファイルシステムが正常にラムダ関数に接続されていることに注意してください
今すぐ前方に移動し、イベントの任意の種類を使用してテストします.
私はこの記事がデータを永続させないラムダのあなたの問題を解決するのを助けたことを望みます.EFSは使いやすい、メモリの問題に汎用的なソリューションです.
あなたがどんな料金も避けるためにされるとき、
AWS EFS
を使用することにより、私たちはあなたのラムダ関数にattach a persistent filesystemすることができます!GitHub Repository
CDK initと配備
私は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
ファイルシステム、ラムダ関数、およびアクセスポイントを展開します.スタックは、スタックします。パイ
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
ファイルシステムで開き、文字列を書き込みます.CDKRAY Lambdather Edge / Lambdather Edge / Lambdather Eefsパイ
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でラムダコンソールに移動します.ファイルシステムが正常にラムダ関数に接続されていることに注意してください
今すぐ前方に移動し、イベントの任意の種類を使用してテストします.
私はこの記事がデータを永続させないラムダのあなたの問題を解決するのを助けたことを望みます.EFSは使いやすい、メモリの問題に汎用的なソリューションです.
あなたがどんな料金も避けるためにされるとき、
cdk destroy
に確かめてください.Reference
この問題について(AWS CDKとAWS AFSを用いた永続的ファイルストアによるラムダ関数), 我々は、より多くの情報をここで見つけました 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