Python | Boto3 - AWS Проблема форматирования электронной почты SNS - PullRequest
0 голосов
/ 22 января 2020

Я бы хотел отформатировать вывод в теле письма SNS, но динамический характер c для Elasticbeanstalk создает для меня ужасную проблему.

КОД:

def lambda_handler(event, context):
    #Some code to fetch Elasticbeanstalk environement details
    _ _ _ 
    _ _ _ 

    msg = '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'\
    '\n\nHello Team, \n\n Elastic Beanstalk status: \n\n'\
    'Total no.of Elastic beanstalk Environments: '+str(len(envname))+'\n'\
    'EnvironmentName    |  Health   | HealthStatus      | CNAME           \n\n'\
    +str(prin_envname[0])+' | '+str(prin_Ehealth[0])+'       | '+str(prin_Ehealthstatus[0])+'      | '+str(prin_Cname[0])+' \n'\
    +str(prin_envname[1])+' | '+str(prin_Ehealth[1])+'       | '+str(prin_Ehealthstatus[1])+'      | '+str(prin_Cname[1])+' \n'\
    +str(prin_envname[2])+' | '+str(prin_Ehealth[2])+'       | '+str(prin_Ehealthstatus[2])+'      | '+str(prin_Cname[2])+' \n'\
    +str(prin_envname[3])+' | '+str(prin_Ehealth[3])+'       | '+str(prin_Ehealthstatus[3])+'      | '+str(prin_Cname[3])+' \n'\
    '\n'\
    'Total number of EC2 instances associated: '+str(len(envinst))+'\n'\
    '\n'\
    '\n'\
    '\n'\
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
    send_sns(msg)

def send_sns(msg):
    snsClient = boto3.client('sns',region)
    if msg:
        subject_str = 'Elastic Beanstalkstatus - Environment status' 
        response = snsClient.publish(TopicArn=os.environ['SNS_ARN'],Message=msg,Subject=subject_str)
        print('Publishing Messsage to SNS Topic')
    else:
        print('No content, exiting without sending SNS email..')


CHALLENGE

Поскольку моя среда Elasti c Beanstalk в aws постоянно меняется с 1 на N, я не могу предсказать количество сред в Elasti c Beanstalk .

Если вы видите мои параметры печати в переменной msg для SNS, это жестко закодировано для 4 сред.

Пожалуйста, укажите, как можно динамически печатать среды в теле письма SNS.

ВНИМАНИЕ

Я не могу получить доступ к сторонним библиотекам, таким как Pandas / Numpy et c., Я могу печатать последовательно, используя sh, используя для l oop, но проблема в том, что SNS принимает только переменную msg для тела письма.

Любая помощь / подсказка / ссылка высоко и благодарны.

1 Ответ

0 голосов
/ 24 января 2020

Потратив часы проб и ошибок, я нашел рабочее решение для моего вопроса.

Примечание : Хотя я доволен своим решением, любое лучшее решение всегда приветствуется:)

Вот мой модифицированный код:

КОД:

def lambda_handler(event, context):
    #Some code to fetch Elasticbeanstalk environement details
    _ _ _ 
    _ _ _ 

    # Transposing the list values into rows to columns & columns to rows with below code
    # and creating 2 parameters for designer function
    final_list = []
    pre_final_list = []
    pre_final_list = [envname] + [Ehealth] + [Ehealthstatus] + [Cname]
    final_list = [list(i) for i in zip(*pre_final_list)]

    # Calling designer function with 2 arguments envlen and final_list
    designer_op = designer(envlen,final_list)

    msg = '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'\
    '\n\nHello Team, \n\n Elastic Beanstalk status: \n'\
    'Total no.of Elastic beanstalk Environments: '+str(len(envname))+'\n'\
    'EnvironmentName    |  Health   | HealthStatus      | CNAME           \n'\
    '\n'\
    ''+str(designer_op)+\  # assigning designer function's output
    '\n'\
    'Total number of EC2 instances currently associated: ' +str(len(envinst))+ '\n'\
    '\n'\
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
    send_sns(msg)

def send_sns(msg):
    snsClient = boto3.client('sns',region)
    if msg:
        subject_str = 'Elastic Beanstalkstatus - Environment status' 
        response = snsClient.publish(TopicArn=os.environ['SNS_ARN'],Message=msg,Subject=subject_str)
        print('Publishing Messsage to SNS Topic')
    else:
        print('No content, exiting without sending SNS email..')

# Designer function to return rows equal to the number of environments
def designer(envlen, final_list):

    if envlen == 10:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'+str(final_list[3])+'\n'\
        ''+str(final_list[4])+'\n'+str(final_list[5])+'\n'+str(final_list[6])+'\n'+str(final_list[7])+'\n'\
        ''+str(final_list[8])+'\n'+str(final_list[9])+'\n'
        return str(op)

    elif envlen == 9:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'+str(final_list[3])+'\n'\
        ''+str(final_list[4])+'\n'+str(final_list[5])+'\n'+str(final_list[6])+'\n'+str(final_list[7])+'\n'\
        ''+str(final_list[8])+'\n'
        return str(op)

    elif envlen == 8:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'+str(final_list[3])+'\n'\
        ''+str(final_list[4])+'\n'+str(final_list[5])+'\n'+str(final_list[6])+'\n'+str(final_list[7])+'\n'
        return str(op)

    elif envlen == 7:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'+str(final_list[3])+'\n'\
        ''+str(final_list[4])+'\n'+str(final_list[5])+'\n'+str(final_list[6])+'\n'
        return str(op)

    elif envlen == 6:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'+str(final_list[3])+'\n'\
        ''+str(final_list[4])+'\n'+str(final_list[5])+'\n'
        print('op type ',type(op))
        return str(op)

    elif envlen == 5:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'+str(final_list[3])+'\n'\
        ''+str(final_list[4])+'\n'
        return op

    elif envlen == 4:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'+str(final_list[3])+'\n'
        return op

    elif envlen == 3:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'+str(final_list[2])+'\n'
        return op

    elif envlen == 2:
        op = ''+str(final_list[0])+'\n'+str(final_list[1])+'\n'
        return op

    elif envlen == 1:
        op = ''+str(final_list[0])+'\n'
        return op


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