웹후크를 사용하여 Amazon Chime, Slack 또는 Microsoft Teams에 Amazon SNS 메시지를 게시하려면 어떻게 해야 하나요?

4분 분량
0

웹훅을 사용하여 AWS 환경을 Amazon Chime 채팅방이나 Slack 또는 Microsoft Teams 채널에 연결하려고 합니다. Amazon Simple Notification Service(SNS)에서 웹훅으로 알림을 보내려면 어떻게 해야 하나요?

간략한 설명

Amazon SNS를 사용하여 웹훅 URL과 같은 HTTP 또는 HTTPS 엔드포인트에 알림 메시지를 보낼 수 있습니다. 그러나 일부 웹훅은 HTTP 또는 HTTPS 구독을 확인할 때 Amazon SNS가 지원하지 않는 JSON 키 값 쌍을 예상합니다.

예를 들어, Amazon Chime 웹훅은 “Content” 키에 해당하는 메시지 문자열이 포함된 JSON 요청을 예상합니다. 마찬가지로 Slack 및 Microsoft Teams 웹훅은 모두 “text” 키에 해당하는 메시지 문자열이 포함된 JSON 요청을 예상합니다.

웹훅 엔드포인트에서 처리할 Amazon SNS 메시지 본문 JSON 문서를 변환하려면, AWS Lambda 함수를 사용하세요.

참고: Amazon SNS 메시지에서 본문 JSON 문서의 키 값 쌍 목록은 HTTP 및 HTTPS 알림 JSON 형식을 참조하세요.

해결 방법

SNS 주제 생성

아직 만들지 않았다면 고유한 이름으로 SNS 주제를 만드세요.

Lambda 함수 생성

Lambda 함수를 생성하기 위한 지침은 AWS Lambda 시작하기를 참조하세요. 자세한 내용을 보려면 Amazon SNS에서 AWS Lambda 사용을 참조하세요.

Lambda 함수 코드에는 사용 중인 웹훅 엔드포인트 유형에 맞게 SNS 주제의 알림 메시지를 변환하는 로직이 포함되어야 합니다. 예를 보려면, 다음과 같은 Amazon Chime, Slack, Microsoft Teams 웹훅용 Python 코드 스니펫을 참조하세요. 이러한 코드 예제는 있는 그대로 제공됩니다. Python 3.7 런타임과 호환됩니다.

Amazon Chime용 Python 코드 스니펫 예제

Amazon Chime 웹훅에는 “Content” 키에 해당하는 메시지 문자열이 포함된 JSON 요청이 필요합니다. 자세한 내용을 보려면 Amazon Chime용 웹훅을 참조하세요.

참고: 아마존 차임 웹훅용 함수 코드 예시에서는 https://hooks.chime.aws/incomingwebhooks/xxxxxxx를 웹훅 URL로 대체합니다.

import urllib3
import json

http = urllib3.PoolManager()


def lambda_handler(event, context):
    url = "https://hooks.chime.aws/incomingwebhooks/xxxxxxx"
    msg = {"Content": 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,
        }
    )

**Slack용 Python 코드 스니펫 예제 **

Slack 수신 웹훅에는 “text” 키에 해당하는 메시지 문자열이 포함된 JSON 요청이 필요합니다. 또한 사용자 이름 및 아이콘을 추가하거나 웹훅의 기본 채널을 재정의하는 등 메시지 사용자 지정을 지원합니다. 자세한 내용을 보려면, Slack 웹사이트에서 수신 웹훅을 사용하여 메시지 보내기를 참조하세요.

참고: 이 예제 Slack 수신 웹훅용 함수 코드에서는 https://hooks.slack.com/services/xxxxxxx를 수신 웹훅 URL로 바꾸세요. 또한 #CHANNEL_NAME을 대상 채널 이름으로 바꾸세요.

import urllib3
import json

http = urllib3.PoolManager()


def lambda_handler(event, context):
    url = "https://hooks.slack.com/services/xxxxxxx"
    msg = {
        "channel": "#CHANNEL_NAME",
        "username": "WEBHOOK_USERNAME",
        "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,
        }
    )

Microsoft Teams용 Python 코드 스니펫 예제

Microsoft Teams의 수신 웹훅에는 “text” 키에 해당하는 메시지 문자열이 포함된 JSON 요청도 필요합니다. 자세한 내용을 보려면 Microsoft 문서 웹사이트에서 메시지 생성 및 보내기를 참조하세요.

참고: Microsoft Teams 수신 웹훅에 대한 이 예제 함수 코드에서는 https://outlook.office.com/webhook/xxxxxxx를 웹훅 URL로 바꾸세요.

import urllib3
import json

http = urllib3.PoolManager()


def lambda_handler(event, context):
    url = "https://outlook.office.com/webhook/xxxxxxx"
    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,
        }
    )

Lambda 함수 테스트

  1. Lambda 콘솔의 함수 페이지에서 함수를 선택합니다.
  2. 테스트 드롭다운 목록을 선택합니다. 그런 다음, 테스트 이벤트 구성을 선택합니다.
  3. 테스트 이벤트 구성 대화 상자에서 새 이벤트 생성을 선택합니다.
  4. 이벤트 템플릿에서 SNS 주제 알림을 선택합니다.
  5. 이벤트 이름에 테스트 이벤트의 이름을 입력합니다.
  6. 저장을 선택하세요.
  7. 저장한 후 테스트를 선택합니다. 그런 다음, 실행 결과를 검토합니다.
  • 상태 코드가 200 인 상태에서 테스트 호출이 성공한 경우:
    Amazon SNS 알림 메시지는 웹훅에서 수락되며, 웹훅은 이를 해당 채널로 전송합니다.
  • 4xx 상태 코드와 함께 호출이 실패하는 경우:
    웹훅 URL을 확인하여 키 값 쌍이 정확하고 대상 웹훅에서 허용되는지 확인합니다.

Lambda 콘솔에서 함수를 테스트하는 방법에 대한 자세한 내용을 보려면 Lambda 함수 호출을 참조하세요.

Lambda 함수에 SNS 주제 트리거 추가

Lambda 콘솔에서 테스트로 웹훅에 SNS 메시지를 전송한 후, SNS 주제에 함수를 구독하세요. Lambda 콘솔에서 이를 구성하려면, SNS 주제 트리거를 추가하세요.

  1. Lambda 콘솔의 함수 페이지에서 함수를 선택합니다.
  2. 함수 개요에서 트리거 추가를 선택합니다. 자세한 내용을 보려면 AWS Lambda 함수 호출을 참조하세요.
  3. 트리거 구성에서 트리거 선택을 선택합니다. 그런 다음, SNS를 선택합니다.
  4. SNS 주제의 경우, 이전에 생성한 SNS 주제를 선택합니다.
  5. 추가를 선택합니다.

자세한 내용을 보려면 함수 구성(콘솔)을 참조하세요.

함수가 SNS 주제를 구독하면, 주제에 게시된 메시지가 함수로 전달된 다음 웹훅으로 전달됩니다.

**참고:**다른 AWS 서비스를 통해 Amazon SNS 알림을 받는 방법에 대한 자세한 내용을 보려면 AWS Chatbot을 사용한 AWS 서비스 모니터링을 참조하세요.


관련 정보

채팅방에 웹훅 추가

원시 메시지 전송

동일한 계정의 Amazon SNS 주제에 Lambda 함수를 구독하려면 어떻게 해야 하나요?

AWS CloudFormation의 푸시 기반 이벤트 소스에 Lambda 함수를 구독할 때 발생하는 오류를 어떻게 해결할 수 있나요?

댓글 없음