使用 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 point
和 VPC 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
),
)
我正在使用 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 point
和 VPC 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
),
)