AWS Lambda无法访问VPC资源

时间:2018-11-12 09:38:38

标签: python-3.x amazon-web-services aws-lambda vpc

我有一个lambda function发送以下请求,以获取该区域内所有实例的ID:

ec2_client = boto3.client('ec2', os.environ['region'])
response = ec2_client.describe_instances(Filters=[{'Name':'instance-state-name', 'Values': ['pending', 'running','shutting-down','stopping','stopped'],}])

lambda还会将获取请求发送到安装在VPC内的API REST,并且该API尚未向互联网开放:

resp = requests.get(os.environ['apidsi']+'/persons/emails')

我将Lambda函数放在VPC中,以便可以查询API,但是当我这样做时,lambda超时并且它不能访问其他VPC内的EC2实例。 IAM角色具有所有必需的权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecs:*",
                "ec2:*",
                "s3:*",
                "autoscaling:*",
                "cloudwatch:*",
                "dynamodb:*"
            ],
            "Resource": "*"
        }
    ]
}

我想安全小组也可以。总结一下:

  • 当我将lambda函数放入VPC时:我可以访问API REST但不能访问VPC资源,但是lambda超时了
  • 当我不将lambda函数放入VPC时,该函数会获取有关VPC资源的所有信息,但无法访问API REST:也会超时。

如何解决这个问题? 有关信息:我为Lambda函数分配了一个公共子网。该公共子网附加了Internet Gateway,并且与托管API REST的实例位于同一VPC中。

0 个答案:

没有答案