내 Amazon SNS 주제에 대한 프라이빗 HTTP 또는 HTTPS 엔드포인트를 구독하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 6월 3일

Amazon SNS(Amazon Simple Notification Service) 주제에 대한 프라이빗 HTTP 또는 HTTPS 엔드포인트를 구독하고 싶습니다. 어떻게 설정해야 합니까?

간략한 설명

Amazon SNS 주제에 대한 프라이빗 HTTP 또는 HTTPS 엔드포인트를 가입하려면 다음을 수행합니다.

해결 방법

프라이빗 엔드포인트와 동일한 Amazon VPC에 Amazon VPC 보안 그룹(LambdaSG) 생성

1.    Amazon VPC 콘솔을 엽니다.

2.    왼쪽 탐색 패널의 보안에서 보안 그룹을 선택합니다. 그런 다음 보안 그룹 만들기를 선택합니다.

3.    보안 그룹 이름LambdaSG를 입력합니다.

4.    VPC의 경우 프라이빗 엔드포인트가 있는 Amazon VPC를 선택합니다.

5.    보안 그룹 생성을 선택합니다.

프라이빗 엔드포인트와 동일한 Amazon VPC 및 서브넷 내에 Lambda 함수를 생성하여 LambdaSG 보안 그룹에 추가

1.    Lambda 콘솔을 엽니다.

2.    [함수 생성(Create function)]을 선택합니다.

3.    [새로 작성]을 선택합니다.

4.    함수 이름에 함수의 목적을 설명하는 이름을 입력합니다. 예를 들어, Private-endpoint-Amazon-SNS-topic-subscription(프라이빗-엔드포인트-아마존-SNS-주제-구독).

5.    런타임에서 Python 3.8을 선택합니다.

6.    고급 설정을 선택합니다.

7.    VPC의 경우(선택 사항) 프라이빗 엔드포인트가 있는 Amazon VPC를 선택합니다. 서브넷보안 그룹의 드롭다운 목록이 나타납니다.

8.    서브넷의 경우 프라이빗 엔드포인트가 속해 있는 서브넷을 선택합니다.

9.    보안 그룹의 경우 LambdaSG를 선택합니다.

10.    함수 생성을 선택합니다.

Lambda 함수의 보안 그룹에서 인바운드 연결을 허용하도록 프라이빗 엔드포인트의 보안 그룹 규칙을 편집

1.    Amazon VPC 콘솔을 엽니다.

2.    왼쪽 탐색 패널의 보안에서 보안 그룹을 선택합니다.

3.    프라이빗 엔드포인트의 보안 그룹 이름을 선택합니다.

4.    인바운드 규칙 편집을 선택합니다.

5.    유형은 사용 사례에 따라 HTTP 또는 HTTPS를 선택합니다. 프로토콜포트 범위 필드가 자동으로 채워집니다.

6.    소스에서 사용자 정의를 선택합니다. 그런 다음 LambdaSG 보안 그룹을 선택합니다.

7.    규칙 저장을 선택합니다.

수신되는 Amazon SNS 알림을 프라이빗 엔드포인트로 전달하도록 Lambda 함수를 구성

1.    Lambda 함수의 Python 요청 라이브러리가 포함된 Lambda 배포 패키지를 만듭니다. 자습서에서 배포 패키지 만들기: Python 3.8에서 람다 함수 만들기의 지침을 따릅니다. 3단계에서는 자습서에 제공된 코드를 다음 예제 코드 조각으로 바꿉니다.

요청 라이브러리를 사용하여 Amazon SNS의 수신 알림을 프라이빗 엔드포인트로 게시하는 Python 코드 조각

중요: url 값을 프라이빗 엔드포인트의 URL로 바꿉니다.

import json
import requests
 
def lambda_handler(event, context):
    url = "<PRIVATE_HTTP/S_ENDPOINT_URL>"
 
    sns_message_payload = event["Records"][0]["Sns"]
 
    sns_message_headers = {
        "x-amz-sns-message-id": sns_message_payload['MessageId'],
        "x-amz-sns-message-type": sns_message_payload["Type"],
        "x-amz-sns-subscription-arn" : event["Records"][0]["EventSubscriptionArn"],
        "x-amz-sns-topic-arn" : sns_message_payload["TopicArn"]
    }
 
    try:
        r = requests.post(url = url, data = json.dumps(sns_message_payload), headers = sns_message_headers)
    except Exceptions as e:
        print(e)
 
    print(r.content)
 
    return {
        'statusCode': 200,
        'body': json.dumps(r.content)
    }

2.    배포 패키지를 사용하여 앞에서 만든 Lambda 함수를 업데이트합니다.

Amazon SNS 주제에 대한 람다 함수 구독


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?