我的 VPC 中有一个 Lambda 函数,我想访问 S3 存储桶。
我认为我已经正确设置了 S3 VPC 端点,因为我在与 Lambda 函数相同的子网和安全组中创建了一个 EC2 实例。当我运行 Lambda 函数代码的副本时在EC2实例上,可以正确显示S3文件内容。
但是当我在 Lambda 中运行代码时,它失败了。所以,我想知道“在 EC2 中运行”和“在 Lambda 中运行”有什么区别?为什么我在 Lambda 中运行时失败了?
这是我的 Lambda 函数代码:
import boto3
s3 = boto3.client('s3', region_name='ap-northeast-1')
def lambda_handler(event, context):
bucket = '*xxxxxx*'
key = 's3-upload.json'
try:
response = s3.get_object(Bucket=bucket, Key=key)
print('--------------------------------------')
print(response)
print('--------------------------------------')
body = response['Body'].read()
print(body)
print('--------------------------------------')
print("CONTENT TYPE: " + response['ContentType'])
except Exception as e:
print('Error getting object.')
print(e)
raise e
如果您想要允许 AWS Lambda 访问 Amazon S3,请使用以下方法之一:
- 不要将该功能关联到 VPC。然后访问将自动进行。
-
如果该函数附加到 VPC 中的公有子网,则关联一个弹性IP到 VPC 中出现的 Lambda 函数的 ENI(不推荐)
- 如果该函数附加到 VPC 中的私有子网,请启动NAT网关在公共子网中并更新路由表。流量将通过 NAT 网关流向 Internet。
- Add an Amazon S3 VPC 终端节点在 VPC 中并更新路由表。流量将流经该网关而不是互联网网关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)