python - AWS Lambda 无法连接到端点 URL DynamoDB
问题描述
我正在开发一个我在 DynamoDB 中编写的 lambda 函数。一方面,我创建了一个层,其中包含具有 DynamoDB 功能的脚本:
class DynamoHandler():
def __init__(self):
self.resource = boto3.resource('dynamodb', region_name = 'eu-west-1')
self.__table = None
def set_table(self, table_name: str):
table = self.resource.Table(table_name)
table.table_arn
self.__table = table
def insert(self, item, **kwargs):
self.__check_table()
return self.__table.put_item(
Item=item,
**kwargs
)
在 lambda 中,我编写了以下代码:
from dynamo_class import DynamoHandler
db = DynamoHandler()
db.set_table(TABLE NAME)
db.insert(msg)
我得到了错误:
[错误] EndpointConnectionError:无法连接到端点 URL:“https://dynamodb.eu-west-1.amazonaws.com/”
你知道我该如何解决这个问题吗?我已经搜索过类似的错误,但它们是在未指定区域时发生的,在我的 DynamoDB 类中,我分配了区域“eu-west-1”。
解决方案
超时很可能是因为 VPC 中的 lambda没有互联网也没有公共 IP 地址。来自文档:
将函数连接到公共子网不会为其提供 Internet 访问权限或公共 IP 地址。
随后,lambda 函数无法连接到 DynamoDB 终端节点。
有两种方法可以纠正该问题:
- 将 lambda 放入私有子网并设置NAT 网关以启用 lambda 访问互联网。
- 使用VPC Gateway for DynamoDB在这种情况下会更好,因为 DynamoDB 网关没有额外费用。
推荐阅读
- python - Python Dbus Error while installing through pip
- c# - 日历重复 AlarmManager
- cakephp - Cakephp 4.x 将变量传递给电子邮件模板
- javascript - 使侧边栏在页面的特定点保持粘性
- javascript - 单击具有相同类名的所有按钮
- azure-devops - VSTS Azure DevOps:尝试仅构建和保存某些文件夹,但项目 TFS 文件夹中的所有内容正在构建和部署
- regex - 如何检查字符串是否只有字母字符和一个空格(Javascript)
- java - 升级到 Spring Boot 2.3.0 后,Mongo 和 Spark 分区失败
- swiftui - 从 SwiftUI 问题发送电子邮件
- reactjs - 预期的模拟函数被调用了一次,但它被调用了零次。在反应