Przejdź do treści

Powiadomienia z AWS na MS Teams

Alerts from AWS to Teams

Pisałem już wcześniej jak wysyłać powiadomienia z Azure na MS Teams (link). Dzisiaj pokażę jak wysyłać powiadomienia z AWS do aplikacji MS Teams. Przy okazji zmieniając jedną rzecz można wysyłać też powiadomienia na Slacka jeśli ktoś nie lubi MSTeams.

TEAMS

Jeśli chcemy wysyłać powiadomienia do aplikacji Teams to musimy mieć tam uprawnienia pozwalające na tworzenie konektorów/łączników (Jeśli nam ich brakuje dodajemy je: Settings => Member permissions => Allow members to create, update, and remove connectors).

Jeśli mamy już takie uprawnienia, to możemy dodać “incoming webhook“. Klikamy na 3 kropki() przy nazwie kanału w którym chcemy publikować wiadomości i wybieramy łączniki (Connectors).

AWS teams notification (powiadomienia)

Wyszukujemy webhook i klikamy dodaj przy nazwie “Przychodzący element webhook“. Klikamy dodaj następnie podajemy nazwę możemy zmienić obrazek. Po kliknięciu utwórz wygeneruje się adres URL, który należy skopiować ponieważ będzie nam potrzebny w dalszej części.

powiadomienia microsoft teams notifications webhook
powiadomienia teams webhook create

Amazon SNS

Teraz możemy otworzyć stronę AWS i przejść do ‘Simple Notification Service‘. Jest to usługa która wysyła powiadomienia. Tworzymy nowy Topic. Wybieramy typ Standard, podajemy nazwę i klikamy na ‘Create topic‘.

aws sns simple notifications service
powiadomienia aws notifications sns
aws sns (powiadomienia) fifo standard

Lambda

Teraz możemy przejść do usługi Lambda. Stworzymy funkcję, która będzie tłumaczyć nasze wiadomości w taki sposób by zrozumiała je aplikacja Teams.

Klikamy na ‘Create function‘ wybieramy ‘Author from scratch‘ podajemy nazwę naszej funkcji, a jako język ustawimy ‘Python 3.8‘.

lambda aws create function
lambda aws create function basic from scratch

Po utworzeniu funkcji zmieniamy jej kod na ten który umieściłem poniżej z jednym wyjątkiem. W miejsce url wklejamy adres który tworzyliśmy w aplikacji Teams podczas dodawania webhooka.

lambda aws function code
#!/usr/bin/python3.8
import urllib3 
import json
http = urllib3.PoolManager() 
def lambda_handler(event, context): 
    url = "https://outlook.office.com/webhook/PODAJ_WŁAŚCIWY_URL"    
    msg = {
        "text": event['Records'][0]['Sns']['Message']
    }
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)
    print({
        "message": event['Records'][0]['Sns']['Message'], 
        "status_code": resp.status, 
        "response": resp.data
    })

Gdy mamy właściwy kod możemy go sprawdzić klikając na test podać nazwę i kliknąć create. Jeśli wszystko dobrze skonfigurowaliśmy powinniśmy dostać odpowiedź 200. Wtedy możemy kliknąć na deploy.

Teraz możemy dodać trigger który będzie wywoływał wysyłanie wiadomości. Do tego celu użyjemy topiku który utworzyliśmy wcześniej w usłudze Amazon SNS. W tym celu klikamy na ‘Add trigger‘ wybieramy SNS i nazwę naszego topika.

lambda aws function add trigger
lambda aws function add trigger sns

To już wszystko. Gdy przejdziemy do topiku w naszej usłudze Amazon SNS możemy ręcznie wysłać wiadomość, która powinna po chwili pojawić się na naszym kanale w aplikacji Teams.

lambda aws function code publish message

Powiadomienia o budżecie

Na koniec podam jeszcze praktyczny przykład, jak można wysyłać powiadomienia o przekroczeniu budżetu.

Na początek musimy ponownie otworzyć naszą funkcję lambda, by dodać do niej niezbędne uprawnienia. Kopiujemy nazwę ARN która za chwilę będzie nam potrzebna. Klikamy na ‘Edit‘ i edytujemy sekcję ‘Access policy – optional‘. Za kwadratowym nawiasem wstawiamy poniższy kod, w którym należy zamienić wartość parametru Resource na nazwę ARN którą wcześniej kopiowaliśmy. Pamiętajcie podczas kopiowania kodu o przecinku za nawiasem.

    {
      "Sid": "AWSBudgetsSNS_Permissions",
      "Effect": "Allow",
      "Principal": {
        "Service": "budgets.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "PODAJ_ARN"
    },
SNS topics aws budget notifications
AWS JSON editor powiadomienia budget notifications SNS

Teraz wystarczy tylko utworzyć nowy budżet, albo edytować istniejący. W AWS podczas tworzenia/edycji przechodzimy do sekcji ‘Set up your notifications‘ jeśli tam oprócz adresu email podamy nazwę ARN naszego topicu to będzie on wysyłał powiadomienia do naszej aplikacji Teams.

powiadomienia aws budget notifications
powiadomienia aws budget set notifications

W identyczny sposób można wysyłać inne powiadomienia w AWS do aplikacji MS Teams.

SLACK

Na sam koniec jak obiecałem Slack. Jeśli chcecie wysyłać wiadomości do Slack zamiast Teams to należy zamienić kod który wpisywaliśmy w funkcji Lambda na ten przedstawiony poniżej. W kodzie trzeba podać tylko prawidłowy URL (tak jak przy Teamsach) i nazwę kanału. Dodatkowo można zmienić nazwę użytkownika która będzie widniała przy alertach.

#!/usr/bin/python3.8
import urllib3
import json
http = urllib3.PoolManager()
def lambda_handler(event, context):
    url = "https://hooks.slack.com/services/PODAJ_WŁAŚCIWY_URL"
    msg = {
        "channel": "#NAZWA_KANAŁU",
        "username": "POWIADOMIENIA_AWS",
        "text": event['Records'][0]['Sns']['Message'],
        "icon_emoji": ""
    }
    
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)
    print({
        "message": event['Records'][0]['Sns']['Message'], 
        "status_code": resp.status, 
        "response": resp.data
    })
aws slack notifications

Więcej na temat Amazon Simple Notification Service znajdziecie w dokumentacji AWS pod linkiem https://docs.aws.amazon.com/sns/

Jeśli temat Amazon Web Service (AWS) was interesuje zachęcam by odwiedzać blog i zaglądać do kategorii AWS w której będzie coraz więcej artykułów na ten temat.