프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

이전 글에 이어서 이번에는 SNS로 트리거 되는 Slack 알림을 Lambda로 만들어보자.

 

 

https://everenew.tistory.com/331

 

AWS boto3로 SNS Topic에 메시지 전송하기 (python)

이번에는 AWS의 SNS Topic(주제)에 메시지를 전송시켜 보자. 주요 코드는 아래의 공식문서를 참고해서 만들었다. https://docs.aws.amazon.com/ko_kr/code-library/latest/ug/python_3_sns_code_examples.html 자격증명 방식 AW

everenew.tistory.com

 

 

 

 

 

 

Slack WebHook 추가

 

 

일단 사용할 slack 채널을 생성하고 webhook를 추가해 주자.

 

 

채널 설정 -> 앱 추가에서 

 

 

 

 

webhook를 추가해서 url을 복사해 주자.

 

 

 

 

 

 

이 url에 올바른 요청을 보내면 해당 slack 채널에 메시지가 보내진다.

 

 

 

 

 

 

 

Lambda 함수 작성

 

1. Lambda python 환경 세팅

 

 

slack의 webhook url에 http 요청을 보내려면 python의 requests 라이브러리를 사용해야 한다.

 

하지만, Lambda 빠르게 동작하기 위해 미리 사용할 라이브러리 데이터를 zip형식으로 업로드해야 사용해 할 수 있다. 

 

 

 

아래처럼 따라 해서 zip파일을 만들자

 

// 폴더를 만들고 폴더로 이동 후
pip install requests -t . --no-user

 

 

 

requests.zip으로 압축을 해서 lambda 함수에 업로드를 해주면 import requests를 사용할 수 있다.

 

 

 

 

 

그리고 만들었던 webhook url은 환경변수로서 저장해 두자.

 

 

 

 

 

2. 코드 작성

 

 

이제 lambda_function.py에 아래와 같이 코드를 작성해 주자.

 

 

slack 전송 코드는 아래 블로그의 게시글을 참조하였다.

https://jenakim47.tistory.com/99

 

Python으로 Slack에 메세지 전송하는 방법(Incoming Webhooks)

환경 Slack Channel에 Incoming Webhooks 추가 https://api.slack.com/messaging/webhooks Json으로 HTTP Requests로 메세지를 전송 https://api.slack.com/methods/chat.postMessage 샘플 curl 요청 curl -X POST --data-urlencode "payload={\"channel\":

jenakim47.tistory.com

 

 

 

 

import json
import requests
import os

def send():
    url = os.environ['webhook']
    header = {'Content-type': 'application/json'}
        
    icon_emoji = ":slack:"
    username = "모니터링"
    attachments = [{
        "color": "good",
        "text": "크롤링 완료"
    }]

    data = {"username": username, "attachments": attachments, "icon_emoji": icon_emoji}
        
    # 메세지 전송
    requests.post(url, headers=header, json=data)

def lambda_handler(event, context):
    # 함수 호출
    send()
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

 

 

 

 

 

3. SNS 트리거 작성

 

SNS는 Topic의 구독자들에게 message를 전송해 준다.

Lambda가 SNS topic을 구독하면, topic에 message를 publish 하면 Lambda 함수가 트리거가 된다.

 

 

 

 

트리거 추가를 눌러서 생성한 Topic을 트리거로 설정해 주자.

 

 

 

 

 

 

4. 테스트

 

 

이제 이전글에서 작성한 python 코드를 동작시켜서 SNS Topic에 메시지를 보내면, Lambda 함수가 실행되어 채널에 메시지가 전송된다.

 

메시지 publish

 

 

메시지 전송됨.

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함