控制AWS Lambda源IP

时间:2018-10-15 14:52:09

标签: amazon-web-services aws-lambda

我有一个简单的Lambda函数,其作用是使HTTP GET到达特定服务器。

我需要同时运行功能的许多副本,并且我想为来自每个HTTP GET的每个HTTP GET提供一个不同的源IP地址 Lambda。

我的问题:

  1. 如何确保Lambda函数的每个“副本”都有自己的IP地址?
  2. 如何使用boto API调用调用来告诉AWS我需要N个Lambda并发副本?我正在寻找here,但找不到设置并发副本数的参数。

谢谢

Avishay

对于问题2,我正在使用以下代码来调用N个Lambda函数的并发副本。

 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')

我的Lambda代码(简短版)

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
    }

1 个答案:

答案 0 :(得分:0)

您需要创建一个VPC,请确保您连接了一个允许Internet访问的子网。然后将安全策略附加到您的lambda。 在这里逐步操作: https://medium.com/@philippholly/aws-lambda-enable-outgoing-internet-access-within-vpc-8dd250e11e12