我知道这是一个满口的标题,但我被撞到了墙上,我想我会伸出手看看是否有什么我遗漏的东西。
我的目标:一个 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?