AWS

4 fev, 2016

Modelos de Integração Slack para o AWS Lambda

Publicidade

Será que sua equipe de operações realiza ChatOps? Este novíssimo termo refere-se à prática de operações orientadas a conversação utilizando um ou mais “bots” que têm a capacidade de inserir notificações e relatórios de status para a conversa e responder a comandos.

O ambiente do chat fornece comunicação em tempo real, uma visão compartilhada coerente, acesso multiusuário a partir da web e dispositivos móveis, o acesso a mensagens anteriores e assim por diante. Integrar bots na conversa dá às equipes de operações a capacidade de trabalhar colaborativamente, de forma a entender, diagnosticar e tratar de questões emergentes e simultaneamente rastrear as alterações feitas no sistema de destino por meio de comandos direcionados a um bot.

Nova Integração Slack

A fim de torná-lo ainda mais fácil para os clientes da AWS gerenciar seus ambientes, desta forma nova e inovadora, lançamos recentemente uma coleção de modelos de integração Slack para AWS Lambda:

01

Você pode usar estes modelos para construir ferramentas baseadas em chat que participam em suas próprias conversas Slack. Os modelos slack-echo- irão ajudá-lo a escrever bots que respondem a comandos; o modelo cloudwatch-alarm-to-slack irá ajudá-lo a escrever bots que emitem relatórios de status e notificações. Uma vez que você tem a capacidade de fornecer aos bots acesso a quaisquer APIs desejadas da AWS, você pode interagir com seus recursos da AWS de qualquer forma desejada. Você pode consultar o seu estado, olhar para as condições de erro, alterar as configurações ou até mesmo criar novos recursos.

Suponha que você deseja monitorar um grupo Auto Scaling através de um alarme CloudWatch e gerar uma mensagem para a sua equipe ChatOps (um canal Slack) quando um limite é excedido. A equipe pode dar uma olhada mais de perto na situação e, em seguida, decidir sanar o problema escalando. Usando a nova integração Slack e vários serviços da AWS, o fluxo global ficaria assim (setas vermelhas representam a notificação; setas verdes representam a resposta):

02

A fim de implementar um sistema como este que você usaria um webhook Slack para postar mensagens para o canal, junto com o modelo cloudwatch-alarm-to-slack-python. Seguindo as instruções do modelo, você deve criar uma chave do AWS Key Management Service (KMS), usá-la para criptografar a URL do webhook, e codificá-lo (base-64) antes de colá-lo no código. A seguir você teria que criar uma função IAM e dar-lhe permissão para chamar a função Decrypt do KMS na chave. O manipulador de eventos, então, enviar mensagens para o canal Slack de sua escolha como esta:

slack_message = {
    'channel': SLACK_CHANNEL,
    'text': "%s state is now %s: %s" % (alarm_name, new_state, reason)
}

req = Request(HOOK_URL, json.dumps(slack_message))

O manipulador também precisa lidar com quaisquer excepções suscitadas no pedido (tudo isto é explicitado no modelo).

Você também pode criar funções que implementam comandos Slack personalizados. Para fazer isso, você pode usar o Amazon API Gateway para criar um endpoint HTTP para cada função, e em seguida, configurar o canal Slack para POSTAR no endpoint quando o comando é chamado. Por exemplo, aqui está a configuração de comandos chamados /scale e /forcealarm:

03

A função handler tem acesso para o usuário, comando, canal e texto de comando:

def lambda_handler(event, context):
    req_body = event['body']
    params = parse_qs(req_body)

    user = params['user_name'][0]
    command = params['command'][0]
    channel = params['channel_name'][0]
    command_text = params['text'][0]

Você precisará configurar endpoint com um método POST, e definir a autorização como NONE. Você também vai precisar mapear o corpo da solicitação como JSON. O bloco de comentário na parte superior de cada um dos novos planos contém mais informações sobre este aspecto da integração.

Compartilhe suas Funções

Eu adoraria ver que tipos de funções legais que vocês estão criando. Por favor, sinta-se à vontade para publicar o seu trabalho como um comentário neste post.

Deixe suas dúvidas e/ou comentários aqui ou escreva diretamente para o autor (em inglês).