无法通过Lambda中的VPC端点访问S3

fis*_*eep 5 amazon-s3 endpoint vpc amazon-web-services aws-lambda

我的VPC中有一个Lambda函数,我想访问S3存储桶。

我认为我已经正确设置了S3 VPC端点,

因为我在同一子网(Lambda函数子网)中创建了EC2实例,

使用相同的安全组,

并运行Lambda函数代码的副本,

它可以正确显示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
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 5

如果您想允许AWS Lambda访问Amazon S3,请使用以下方法之一:

  • 请勿将功能与VPC相关联。然后访问是自动的。
  • 如果功能附加到VPC中的公共子网,请将弹性IP关联到VPC中显示的Lambda函数的ENI(不建议)
  • 如果该功能已附加到VPC中的专用子网,请在公用子网中启动NAT网关并更新路由表。流量将通过NAT网关流向Internet。
  • 在VPC中添加Amazon S3 VPC终端节点并更新路由表。流量将通过该流量而不是Internet网关。