AWS Lambda не может получить доступ к ресурсам VPC - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть lambda function, который отправляет следующий запрос для получения идентификаторов всех экземпляров внутри региона:

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'],}])

Лямбда также отправляет запрос get API REST, установленному внутри VPC, и этот API не открыт для Интернета:

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

Я помещаю свою лямбда-функцию в VPC, чтобы я мог запрашивать API, но когда я это делаю, лямбда-тайм-аут истекает, и она не получает доступа к экземплярам EC2 внутри других VPC. Роль 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": "*"
        }
    ]
}

Группа безопасности в порядке, я думаю. Итак, подведем итог:

  • Когда я помещаю лямбда-функцию в VPC: я могу получить доступ к API REST, но не к ресурсам VPC, лямбда-тайм-аут
  • Когда я не помещаю лямбда-функцию в VPC, функция получает всю информацию о ресурсах VPC, но не может получить доступ к API REST: также время ожидания.

Как решить эту проблему ?? Для информации: я назначил общедоступную подсеть для своей функции Lambda. К этой общедоступной подсети подключен Internet Gateway, и он находится в том же VPC, что и экземпляр, на котором размещен API REST.

...