代码之家  ›  专栏  ›  技术社区  ›  bensiu CandorZ

VPC中的Lambda无法访问DigitalOcean S3资源

  •  0
  • bensiu CandorZ  · 技术社区  · 5 年前

    我有部署在默认VPC中的Lambda,该VPC具有开放的端点到S3服务,Lambda具有IAM角色,可以广泛打开所有S3操作

    iamRoleStatements:
      - Effect: "Allow"
        Action:
          - "rds:*"
          - "ec2:CreateNetworkInterface"
        Resource: "*"
      - Effect: Allow
        Action:
          - s3:*
        Resource: "*"
    

    我正在NodeJS中通过以下方式访问S3 SDK:

    const {
      DIGITAL_OCEAN_SPACES_ENDPOINT,
      DIGITAL_OCEAN_SPACES_ACCESS,
      DIGITAL_OCEAN_SPACES_REGION,
      DIGITAL_OCEAN_SPACES_SECRET,
      DIGITAL_OCEAN_SPACES_BUCKET_NAME,
    } = process.env;
    
    const spacesEndpoint = new Endpoint(DIGITAL_OCEAN_SPACES_ENDPOINT);
    const S3Client = new S3({
      accessKeyId: DIGITAL_OCEAN_SPACES_ACCESS,
      endpoint: spacesEndpoint,
      region: DIGITAL_OCEAN_SPACES_REGION,
      secretAccessKey: DIGITAL_OCEAN_SPACES_SECRET,
    });
    

    Lambda超时-它无法连接到DigitalOcean S3存储桶。我还需要添加什么才能访问DO?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Marcin    5 年前

    VPC中的Lambda函数 既没有互联网接入,也没有公共IP .从 docs :

    将函数连接到公共子网不会给它提供 互联网接入或公共IP地址 .

    为了纠正这个问题,你应该将你的功能“放置”在 专用子网 (非公开)和使用 NAT gateway/instance 使用正确配置的路由表来提供访问。

    由于您在所有子网都是公共的情况下使用了默认VPC,因此您需要创建一个新的私有子网,因为使用公共子网是行不通的。然后,您需要正确设置NAT网关/设备。或者,不要将您的函数放置在VPC中。