【发布时间】:2020-05-01 16:57:45
【问题描述】:
我知道这是一个拗口的标题,但我被撞到了墙角,我想我会伸手去看看我是否遗漏了什么。
我的目标: 一个 lambda,它将访问 S3 存储桶中的文件,通过 textract 运行它,然后将结果写入 RDS 数据库。 (此时要访问 RDS,我必须在 VPC 中运行我的 lambda)
所以,我的 lambda 函数在 VPC 中运行。我已经设置了必要的权限、策略、端点等,以便 lambda 可以使用以下代码访问 s3 文档:
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket = 'my-bucket'
key = my-file.json'
try:
data = s3.get_object(Bucket=bucket, Key=key)
json_data = data['Body'].read()
return json_data
except Exception as e:
print(e)
raise e
现在……问题来了。我用下面的代码替换上面的代码并在 VPC 中运行——我得到了可怕的超时。
def lambda_handler(event, context):
# Document
s3BucketName = "my-bucket"
documentName = "test.png"
# Amazon Textract client
textract = boto3.client('textract')
# Call Amazon Textract
response = textract.detect_document_text(
Document={
'S3Object': {
'Bucket': s3BucketName,
'Name': documentName
} })
# Print detected text
for item in response["Blocks"]:
if item["BlockType"] == "LINE":
print ( item["Text"] )
当 lambda 在 VPC 之外运行时,即在 lambda 的 Network 标题下选择“No VPC”,第二段代码运行没有问题。
有谁知道这可能导致失败的原因是什么?我在文档中没有发现任何说明这种情况被阻止的内容,但我担心我可能无法从 VPC 内部访问 Textract?
【问题讨论】:
-
Amazon Textract 目前在美国东部(弗吉尼亚北部)、美国东部(俄亥俄)、美国西部(俄勒冈)、美国西部(加利福尼亚北部)、欧洲(爱尔兰)、欧洲(伦敦)提供) 和亚太地区(悉尼)。您的 VPC 在这些地区之一吗?
-
我正在使用美国西部
-
@cotfessi 你找到解决方案了吗?
-
@ambigus9:我打破了这个过程。就像下面关于将 json 的结果移动到 s3 存储桶中的评论,然后设置第二个 lambda 以对 s3 put 做出反应。希望这会有所帮助。
标签: amazon-web-services amazon-s3 aws-lambda amazon-vpc amazon-textract