使用 AWS CDK 为 S3 存储桶 lambda 访问创建 VPC 端点

Create VPC endpoint for S3 bucket lambda access using AWS CDK

我正在使用 Python 风格的 AWS CDK 构建系统。

我有一个带有附加 EFS 的 lambda 函数。要使用 EFS,我需要将 lambda 函数放在 VPC 中。问题是,我还希望此 lambda 函数从特定的 S3 存储桶(在同一区域)中检索文件。我在检索时遇到超时错误,根据一些研究,我似乎需要 NAT Gateway(太贵)或 VPC 端点才能允许访问。

如何在 CDK 中构建 VPC endpoint 以允许我的 lambda 函数与我的 S3 存储桶通信?

编辑:下面@gshpychka 的评论是正确的 - 只有 vpc 定义中的 gateway_endpoint 是必需的。

这是我在遵循 this guide.

中的想法后得出的似乎有效的方法

您需要同时创建 S3 access pointVPC Endpoint

您在创建 VPC 时创建 VPC Endpoint。这允许从 VPC 访问 S3 存储桶。您可以稍后添加策略来限制此访问。

self.vpc = ec2.Vpc(
    scope=self,
    id="VPC",
    vpc_name="my_VPC",
    gateway_endpoints={
        "s3": ec2.GatewayVpcEndpointOptions(
            service=ec2.GatewayVpcEndpointAwsService.S3
        )
    },
    nat_gateways=0,
)

您稍后会在创建 S3 存储桶后创建一个 S3 access point。这允许访问存储桶。

self.bucket_access = s3.CfnAccessPoint(
    scope=self,
    id="s3_access",
    bucket=self.my_bucket.bucket_name,
    name="bucket-access-point",
    vpc_configuration=s3.CfnAccessPoint.VpcConfigurationProperty(
        vpc_id=self.vpc.vpc_id
    ),
)