AWS: лямбда-функция не может вызывать остальные API, используя закрытый API экземпляра EC2 - PullRequest
0 голосов
/ 31 мая 2018

Я создаю лямбда-функцию (с полным доступом к экземплярам ec2 и последующим действиям (DescribeStream, GetRecords, GetShardIterator, ListStreams) в динамо-потоке db).

Мое требование состоит в том, чтобы с помощью elb name получить частные IP-адреса экземпляров и вызвать оставшийся API для лямбда-события, запускаемого потоком DynamoDB.

Мой скрипт Python3.6 для функции Lambda работает правильно, чтобы получить все частные IP-адреса.

Но я не знаю, как вызывать остальные API, используя частный IP.

Я хотел бы сообщить, что у нас есть экземпляр бастиона (с публичным IP), с помощью которого мы можем ssh туннелировать через него.

Я не знаю, как это сделать.

Мой скрипт на Python ниже:

import boto3
import sys
import string
import subprocess

def instanaceList():
    elb_name = 'xxxx-xxx-xxx-xxx-2-BlueELB'
    print(elb_name)
    print('\n')
    print('THE LIST OF INSTANCES ATTACHED TO THIS ELB IS \n')
    elbList = boto3.client('elb')
    ec2 = boto3.resource('ec2')

    bals = elbList.describe_load_balancers()
    for elb in bals['LoadBalancerDescriptions']:

        set2 = elb['LoadBalancerName']
        if elb_name == set2 :
            inst =  elb['Instances']
            print(inst)
            for xIns in inst:
                print(xIns)
                EC2InstanceId = xIns['InstanceId']
                ec2 = boto3.resource('ec2')
                ec2instance = ec2.Instance(EC2InstanceId)
                print(ec2instance.private_ip_address)
                url = "curl -X GET https://"+ec2instance.private_ip_address+"/voice/diag -H 'cache-control: no-cache'"
                result = subprocess.call(url, shell=True)

def lambda_handler(event, context):
    print('test')
    print(event)
    instanaceList()
    return 'Hello from Lambda'

1 Ответ

0 голосов
/ 01 июня 2018

Если ваша проблема заключается в том, что Lambda подключает экземпляры ec2 без публичного IP-адреса в VPC, то вам нужно задать дополнительную конфигурацию для вашего lambda, чтобы он мог обращаться к ресурсам в VPC.

Пример с использованием CLI (от https://docs.aws.amazon.com/lambda/latest/dg/vpc.html):

$  aws lambda create-function \
--function-name ExampleFunction \
--runtime python3.6 \
--role execution-role-arn \
--zip-file fileb://path/app.zip \
--handler app.handler \
--vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=comma-separated-security-group-ids \
--memory-size 1024 

Или для обновления конфигурации существующей лямбды:

$ aws lambda update-function-configuration \
--function-name ExampleFunction \
--vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=security-group-ids

Если ваша проблема на самом деле делает вызов API из Python, то посмотрите каксделать почтовый запрос в python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...