我正在构建一个Python,每当一个EC2实例调用它时,它都应该将这个实例包含在一个ELB目标组中。所以我的“逻辑”是,我有来自这个实例的IP,因为头。如果这个IP,我可以识别InstanceID。使用InstanceID,我可以将它添加到目标组中。
import json
import boto3
client = boto3.client('elbv2')
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
internal_IP = {
'body': event['requestContext']['identity']['sourceIp']
}
filters = [{
'Name': 'private_ip_address',
'Values': [internal_IP],
}]
result_list = ec2.describe_instances(Filters=filters)
instid=result_list['Reservations'][0]['Instances'][0]['InstanceId']
response = client.register_targets(
TargetGroupArn='arn:aws:elasticloadbalancing:us-west-1:XXXXXXXXXXX',
Targets=[
{
'Id': instid
},
]
)问题是我不能在过滤器中使用"internal_IP“作为值。我得到了错误:"'int‘对象是不可订阅的“。我对代码做了很多修改,但没有成功.
当我运行代码时,将返回IP:
def lambda_handler(event, context):
response = {
'body': event['requestContext']['identity']['sourceIp']
}
return response我怎么才能解决这个问题?
发布于 2022-04-13 16:46:58
在@jarmod的帮助下(谢谢!)工作守则是:
import json
import boto3
client = boto3.client('elbv2')
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
filters = [{
'Name': 'private-ip-address',
'Values': [event['requestContext']['identity']['sourceIp']]
}]
result_list = ec2.describe_instances(Filters=filters)
instid=result_list['Reservations'][0]['Instances'][0]['InstanceId']
response = client.register_targets(
TargetGroupArn='arn:aws:elasticloadbalancing:us-west-1:xxx',
Targets=[
{
'Id': instid
## 'Port': 8443,
## 'AvailabilityZone': 'us-west-1'
},
]
)
return {
'statusCode': 200,
'body': json.dumps('Success')
}https://stackoverflow.com/questions/71849430
复制相似问题