Я создаю шаблон CloudFormation, который использует функцию Lambda для генерации имени балансировщика нагрузки, созданного шаблоном.
При запуске функции происходит сбой со следующей ошибкой:
Не удалось проверить атрибуты ELB arn: aws-us-gov: эластичная балансировка нагрузки: us-gov-west-1: 273838691273: loadbalancer / app / dev-fu-WALB-18VHO2DJ4MHK / c69c48fd3464de01. Произошла ошибка (ValidationError) при вызове операции DescribeLoadBalancers: имя балансировщика нагрузки 'arn: aws-us-gov: эластичное распределение нагрузки: us-gov-west-1: 273838691273: loadbalancer / app / dev-fu-WALB-18VHO2DJ4MHK / c69c48f34 'не может быть длиннее 32 символов.
Это явно тянет арн, а не имя elbv2.
Я открыл билет с AWS безрезультатно, а также с компанией, которая написала сценарий ... те же результаты.
Я приложил скрипт, и любая помощь очень ценится.
import cfn_resource
import boto3
import boto3.session
import logging
logger = logging.getLogger()
handler = cfn_resource.Resource()
# Retrieves DNSName and source security group name for the specified ELB
@handler.create
def get_elb_attribtes(event, context):
properties = event['ResourceProperties']
elb_name = properties['PORALBName']
elb_template = properties['PORALBTemplate']
elb_subnets = properties['PORALBSubnets']
try:
client = boto3.client('elbv2')
elb = client.describe_load_balancers(
Names=[
elb_name
]
)['LoadBalancers'][0]
for az in elb['AvailabilityZones']:
if not az['SubnetId'] in elb_subnets:
raise Exception("ELB does not include VPC subnet '" + az['SubnetId'] + "'.")
target_groups = client.describe_target_groups(
LoadBalancerArn=elb['LoadBalancerArn']
)['TargetGroups']
target_group_arns = []
for target_group in target_groups:
target_group_arns.append(target_group['TargetGroupArn'])
if elb_template == 'geoevent':
if elb['Type'] != 'network':
raise Exception("GeoEvent Server requires network ElasticLoadBalancer V2.")
response_data = {}
response_data['DNSName'] = elb['DNSName']
response_data['TargetGroupARNs'] = target_group_arns
msg = 'ELB {} found.'.format(elb_name)
logger.info(msg)
return {
'Status': 'SUCCESS',
'Reason': msg,
'PhysicalResourceId': context.log_stream_name,
'StackId': event['StackId'],
'RequestId': event['RequestId'],
'LogicalResourceId': event['LogicalResourceId'],
'Data': response_data
}
except Exception, e:
error_msg = 'Failed to validate attributes of ELB {}. {}'.format(elb_name, e)
logger.error(error_msg)
return {
'Status': 'FAILED',
'Reason': error_msg,
'PhysicalResourceId': context.log_stream_name,
'StackId': event['StackId'],
'RequestId': event['RequestId'],
'LogicalResourceId': event['LogicalResourceId']
}