У меня есть простая лямбда-функция, ее задача - сделать HTTP GET для определенного сервера.
Мне нужно запустить много копий (сотен) функции одновременно и я хочу иметь отдельный IP-адрес источника для каждого HTTP GET, приходящего от каждой лямбды.
Мои вопросы:
- Как сделать так, чтобы у каждой «копии» функции Lambda был свой IP-адрес?
- Как использовать botoAPI вызывает call, чтобы сообщить AWS, что мне нужно N одновременных копий моей лямбды?Я смотрю здесь , но я не могу найти аргумент, который устанавливает количество одновременных копий.
Спасибо
Avishay
Что касаетсявопрос № 2 Я использую следующий код для вызова N одновременных копий лямбда-функции.
import boto3, json
from concurrent.futures import ThreadPoolExecutor
N = 5
unique_ips = set()
lambda_client = boto3.client('lambda', region_name='us-west-2')
def _lambda_caller(idx):
test_event = dict(idx=idx)
res = lambda_client.invoke(
FunctionName='SimpleHTTPGetter',
InvocationType='RequestResponse',
Payload=json.dumps(test_event),
)
data = json.loads(res['Payload']._raw_stream.data)
print('Thread {} is done'.format(idx))
unique_ips.add(data['body'])
with ThreadPoolExecutor(max_workers=N) as executor:
for i in range(0,N):
future = executor.submit(_lambda_caller,i)
executor.shutdown()
print('Done')
мой лямбда-код (короткая версия)
import json
import socket
def lambda_handler(event, context):
print('-- HTTP Client started')
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
print('My IP address is {}:'.format(ip))
return {
"statusCode": 200,
"body": ip
}