

지원 종료 공지: 2026년 10월 7일에는에 대한 지원을 중단할 AWS 예정입니다 AWS IoT Greengrass Version 1. 2026년 10월 7일 이후에는 더 이상 AWS IoT Greengrass V1 리소스에 액세스할 수 없습니다. 자세한 내용은 [에서 마이그레이션 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)을 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# SNS 커넥터
<a name="sns-connector"></a>

SNS [커넥터는](connectors.md) Amazon SNS 주제에 메시지를 게시합니다. 이렇게 하면 웹 서버, 이메일 주소 및 기타 메시지 구독자가 Greengrass 그룹의 이벤트에 응답할 수 있게 됩니다.

이 커넥터는 MQTT 주제에 대한 SNS 메시지 정보를 수신하고 이 메시지를 지정된 SNS 주제에 전송합니다. 선택적으로 사용자 지정 Lambda 함수를 사용하여 메시지에 대한 필터링 또는 형식 지정 로직을 구현한 후 메시지를 이 커넥터에 게시할 수 있습니다.

이 커넥터의 버전은 다음과 같습니다.


| 버전 | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:{{region}}::/connectors/SNS/versions/4` | 
| 3 | `arn:aws:greengrass:{{region}}::/connectors/SNS/versions/3` | 
| 2 | `arn:aws:greengrass:{{region}}::/connectors/SNS/versions/2` | 
| 1 | `arn:aws:greengrass:{{region}}::/connectors/SNS/versions/1` | 

버전 변경 사항에 대한 자세한 내용은 [Changelog](#sns-connector-changelog)를 참조하십시오.

## 요구 사항
<a name="sns-connector-req"></a>

이 커넥터에는 다음과 같은 요구 사항이 있습니다.

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass 코어 소프트웨어 v1.9.3 이상.
+ <a name="conn-req-py-3.7-and-3.8"></a>코어 장치에 설치되고 PATH 환경 변수에 추가된 [Python](https://www.python.org/) 버전 3.7 또는 3.8입니다.
**참고**  <a name="use-runtime-py3.8"></a>
Python 3.8을 사용하려면 다음 명령을 실행하여 기본 Python 3.7 설치 폴더에서 설치된 Python 3.8 바이너리로 연결되는 심볼릭 링크를 만드십시오.  

  ```
  sudo ln -s {{path-to-python-3.8}}/python3.8 /usr/bin/python3.7
  ```
이렇게 하면 AWS IoT Greengrass에 대한 Python 요구 사항을 충족하도록 장치가 구성됩니다.
+ <a name="conn-sns-req-sns-config"></a>구성된 SNS 주제입니다. 자세한 설명은 *Amazon Simple Notification Service 개발자 안내서*에서 [Amazon SNS 주제 생성](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)을 참조하세요.
+ <a name="conn-sns-req-iam-policy"></a>다음 예제 IAM 정책에서 보듯이, 대상 Amazon SNS 주제에 대해 `sns:Publish` 작업을 할 수 있도록 [Greengrass 그룹 역할](group-role.md)이 구성되었습니다.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "sns:Publish"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:sns:{{us-east-1}}:{{123456789012}}:{{topic-name}}"
              ]
          }
      ]
  }
  ```

------

  이 커넥터를 사용하면 입력 메시지 페이로드의 기본 주제를 동적으로 재정의할 수 있습니다. 이 기능을 사용하여 구현하는 경우, IAM 정책은 모든 대상 주제에 대해 `sns:Publish` 권한을 허용해야 합니다. 리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다(예: 와일드카드 \* 이름 지정 스키마를 통해).

  <a name="set-up-group-role"></a>그룹 역할 요구 사항의 경우, 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 [Greengrass 그룹 역할 관리(콘솔)](group-role.md#manage-group-role-console) 또는 [Greengrass 그룹 역할 관리(CLI)](group-role.md#manage-group-role-cli)을 참조하세요.

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass 코어 소프트웨어 v1.7 이상.
+ 코어 장치에 설치되고 PATH 환경 변수에 추가된 [Python](https://www.python.org/) 버전 2.7입니다.
+ <a name="conn-sns-req-sns-config"></a>구성된 SNS 주제입니다. 자세한 설명은 *Amazon Simple Notification Service 개발자 안내서*에서 [Amazon SNS 주제 생성](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)을 참조하세요.
+ <a name="conn-sns-req-iam-policy"></a>다음 예제 IAM 정책에서 보듯이, 대상 Amazon SNS 주제에 대해 `sns:Publish` 작업을 할 수 있도록 [Greengrass 그룹 역할](group-role.md)이 구성되었습니다.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "sns:Publish"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:sns:{{us-east-1}}:{{123456789012}}:{{topic-name}}"
              ]
          }
      ]
  }
  ```

------

  이 커넥터를 사용하면 입력 메시지 페이로드의 기본 주제를 동적으로 재정의할 수 있습니다. 이 기능을 사용하여 구현하는 경우, IAM 정책은 모든 대상 주제에 대해 `sns:Publish` 권한을 허용해야 합니다. 리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다(예: 와일드카드 \* 이름 지정 스키마를 통해).

  <a name="set-up-group-role"></a>그룹 역할 요구 사항의 경우, 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 [Greengrass 그룹 역할 관리(콘솔)](group-role.md#manage-group-role-console) 또는 [Greengrass 그룹 역할 관리(CLI)](group-role.md#manage-group-role-cli)을 참조하세요.

------

## 커넥터 파라미터
<a name="sns-connector-param"></a>

이 커넥터는 다음 파라미터를 제공합니다.

------
#### [ Version 4 ]

`DefaultSNSArn`  <a name="sns-DefaultSNSArn"></a>
메시지를 게시할 기본 SNS 주제의 ARN입니다. 입력 메시지 페이로드의 `sns_topic_arn` 속성으로 대상 주제를 재정의할 수 있습니다.  
그룹 역할은 모든 대상 주제에 대해 `sns:Publish` 권한을 허용해야 합니다. 자세한 내용은 [요구 사항](#sns-connector-req) 단원을 참조하십시오.
 AWS IoT 콘솔의 표시 이름: **기본 SNS 주제 ARN**  
필수: `true`  
유형: `string`  
유효한 패턴: `arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$`

`IsolationMode`  <a name="IsolationMode"></a>
이 커넥터의 [컨테이너화](connectors.md#connector-containerization) 모드입니다. 기본값은 입니다. 즉`GreengrassContainer`, 커넥터는 AWS IoT Greengrass 컨테이너 내의 격리된 런타임 환경에서 실행됩니다.  
그룹의 기본 컨테이너화 설정은 커넥터에는 적용되지 않습니다.
 AWS IoT 콘솔의 표시 이름: **컨테이너 격리 모드**  
필수: `false`  
유형: `string`  
유효한 값: `GreengrassContainer` 또는 `NoContainer`  
유효한 패턴: `^NoContainer$|^GreengrassContainer$`

------
#### [ Versions 1 - 3 ]

`DefaultSNSArn`  <a name="sns-DefaultSNSArn"></a>
메시지를 게시할 기본 SNS 주제의 ARN입니다. 입력 메시지 페이로드의 `sns_topic_arn` 속성으로 대상 주제를 재정의할 수 있습니다.  
그룹 역할은 모든 대상 주제에 대해 `sns:Publish` 권한을 허용해야 합니다. 자세한 내용은 [요구 사항](#sns-connector-req) 단원을 참조하십시오.
 AWS IoT 콘솔의 표시 이름: **기본 SNS 주제 ARN**  
필수: `true`  
유형: `string`  
유효한 패턴: `arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$`

------

### 커넥터 만들기 예(AWS CLI)
<a name="sns-connector-create"></a>

다음 CLI 명령은 SNS 커넥터가 포함된 초기 버전을 사용하여 `ConnectorDefinition`을 생성합니다.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MySNSConnector",
            "ConnectorArn": "arn:aws:greengrass:{{region}}::/connectors/SNS/versions/4",
            "Parameters": {
                "DefaultSNSArn": "arn:aws:sns:{{region}}:{{account-id}}:topic-name",
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

 AWS IoT Greengrass 콘솔의 커넥터 페이지에서 커넥터를 추가할 수 **있습니다**. 자세한 내용은 [Greengrass 커넥터 시작하기(콘솔)](connectors-console.md) 단원을 참조하십시오.

## 입력 데이터
<a name="sns-connector-data-input"></a>

이 커넥터는 MQTT 주제에 대한 SNS 메시지 정보를 수락한 다음 이 메시지를 있는 그대로 대상 SNS 주제에 게시합니다. 입력 메시지는 JSON 형식이어야 합니다.

<a name="topic-filter"></a>**구독의 주제 필터**  
`sns/message`

**메시지 속성**    
`request`  
SNS 주제로 보낼 메시지에 대한 정보입니다.  
필수: `true`  
유형: 다음 속성을 포함하는 `object`:    
`message`  
문자열 또는 JSON 형식의 메시지 내용입니다. 예제는 [입력 예](#sns-connector-data-input-example)를 참조하십시오.  
JSON을 보내려면 `message_structure` 속성이 `json`으로 설정되어야 하며 메시지는 `default` 키가 포함되고 문자열 인코딩을 거친 JSON 객체여야 합니다.  
필수: `true`  
유형: `string`  
유효한 패턴: `.*`  
`subject`  
메시지의 제목입니다.  
필수: `false`  
유형: 100자 이하의 ASCII 텍스트여야 합니다. 문자, 숫자 또는 구두점으로 시작해야 합니다. 줄 바꿈이나 컨트롤 문자를 넣으면 안 됩니다.  
유효한 패턴: `.*`  
`sns_topic_arn`  
메시지를 게시할 SNS 주제의 ARN입니다. 지정된 경우 커넥터는 기본 주제 대신 이 주제에 게시합니다.  
그룹 역할은 모든 대상 주제에 대해 `sns:Publish` 권한을 허용해야 합니다. 자세한 내용은 [요구 사항](#sns-connector-req) 단원을 참조하십시오.
필수: `false`  
유형: `string`  
유효한 패턴: `arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$`  
`message_structure`  
메시지의 구조입니다.  
필수: `false`. JSON 메시지를 전송하도록 지정해야 합니다.  
유형: `string`  
유효한 값: `json`  
`id`  
요청에 대한 임의의 ID입니다. 이 속성은 입력 요청을 출력 응답에 매핑하는 데 사용됩니다. 지정하면 응답 객체의 `id` 속성이 이 값으로 설정됩니다. 이 기능을 사용하지 않는 경우 이 속성을 생략하거나 빈 문자열로 지정할 수 있습니다.  
필수: `false`  
유형: `string`  
유효한 패턴: `.*`

**Limits**  
메시지 크기는 최대 SNS 메시지 크기인 256KB로 제한됩니다.

**입력 예: 문자열 메시지**  <a name="sns-connector-data-input-example"></a>
이 예제에서는 문자열 메시지를 보냅니다. 기본 대상 주제를 재정의하는 선택적 `sns_topic_arn` 속성을 지정합니다.  

```
{
    "request": {
        "subject": "Message subject",
        "message": "Message data",
        "sns_topic_arn": "arn:aws:sns:{{region}}:{{account-id}}:topic2-name"
    },
    "id": "request123"
}
```

**입력 예: JSON 메시지**  
이 예제에서는 메시지를 `default` 키가 포함되며 문자열 인코딩을 거친 JSON 객체로서 보냅니다.  

```
{
    "request": {
        "subject": "Message subject",
        "message": "{ \"default\": \"Message data\" }",
        "message_structure": "json"
    },
    "id": "request123"
}
```

## 출력 데이터
<a name="sns-connector-data-output"></a>

이 커넥터는 상태 정보를 MQTT 주제에 출력 데이터로 게시합니다.

<a name="topic-filter"></a>**구독의 주제 필터**  
`sns/message/status`

**출력 예: 성공**  

```
{
    "response": {
        "sns_message_id": "f80a81bc-f44c-56f2-a0f0-d5af6a727c8a",
        "status": "success"
    },
    "id": "request123"
}
```

**출력 예: 실패**  

```
{
   "response" : {
        "error": "InvalidInputException",
        "error_message": "SNS Topic Arn is invalid",
        "status": "fail"
   },
   "id": "request123"
}
```

## 사용 예
<a name="sns-connector-usage"></a>

<a name="connectors-setup-intro"></a>다음 상위 수준 단계를 사용하여 커넥터를 사용해 보는 데 이용할 수 있는 예제 Python 3.7 Lambda 함수를 설정합니다.

**참고**  <a name="connectors-setup-get-started-topics"></a>
다른 Python 런타임을 사용하는 경우 Python3.x에서 Python 3.7로의 심볼릭 링크를 만들 수 있습니다.
[커넥터 시작하기(콘솔)](connectors-console.md) 및 [커넥터 시작하기(CLI)](connectors-cli.md) 주제에는 예제 Twilio 알림 커넥터를 구성하고 배포하는 방법을 보여주는 자세한 단계가 포함되어 있습니다.

1. 커넥터에 대한 [요구 사항](#sns-connector-req)을 충족하는지 확인합니다.

   <a name="set-up-group-role"></a>그룹 역할 요구 사항의 경우, 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 [Greengrass 그룹 역할 관리(콘솔)](group-role.md#manage-group-role-console) 또는 [Greengrass 그룹 역할 관리(CLI)](group-role.md#manage-group-role-cli)을 참조하세요.

1. <a name="connectors-setup-function"></a>입력 데이터를 커넥터로 보내는 Lambda 함수를 생성하고 게시합니다.

   [예제 코드](#sns-connector-usage-example)를 PY 파일로 저장합니다. <a name="connectors-setup-function-sdk"></a>[Python용AWS IoT Greengrass 코어 SDK](lambda-functions.md#lambda-sdks-core)를 다운로드하고 압축을 풉니다. 그런 다음 루트 수준에서 PY 파일과 `greengrasssdk` 폴더를 포함하는 zip 패키지를 생성합니다. 이 zip 패키지는 AWS Lambda에 업로드하는 배포 패키지입니다.

   <a name="connectors-setup-function-publish"></a>Python 3.7 Lambda 함수를 생성한 후 함수 버전을 게시하고 별칭을 만듭니다.

1. Greengrass 그룹을 구성합니다.

   1. <a name="connectors-setup-gg-function"></a>별칭으로 Lambda 함수를 추가합니다(권장). Lambda 수명 주기를 수명이 긴 함수(또는 CLI의 `"Pinned": true`)로 구성합니다.

   1. 커넥터를 추가하고 해당 [파라미터](#sns-connector-param)를 구성합니다.

   1. 커넥터가 [입력 데이터](#sns-connector-data-input)를 수신하고 지원되는 주제 필터에서 [출력 데이터](#sns-connector-data-output)를 전송할 수 있도록 허용하는 구독을 추가합니다.
      + <a name="connectors-setup-subscription-input-data"></a>Lambda 함수를 소스로, 커넥터를 대상으로 설정하고 지원되는 입력 주제 필터를 사용합니다.
      + <a name="connectors-setup-subscription-output-data"></a>커넥터를 소스로, AWS IoT Core 를 대상으로 설정하고 지원되는 출력 주제 필터를 사용합니다. 이 구독을 사용하여 AWS IoT 콘솔에서 상태 메시지를 볼 수 있습니다.

1. <a name="connectors-setup-deploy-group"></a>그룹을 배포합니다.

1. <a name="connectors-setup-test-sub"></a> AWS IoT 콘솔의 **테스트** 페이지에서 출력 데이터 주제를 구독하여 커넥터의 상태 메시지를 확인합니다. 예제 Lambda 함수는 수명이 긴 함수로 그룹이 배포된 직후 메시지 전송을 시작합니다.

   테스트를 마치면 Lambda 수명 주기를 온디맨드 함수(또는 CLI의 `"Pinned": false`)로 설정하고 그룹을 배포할 수 있습니다. 이렇게 하면 함수가 메시지 전송을 중지합니다.

### 예제
<a name="sns-connector-usage-example"></a>

다음 예제 Lambda 함수는 커넥터에 입력 메시지를 보냅니다.

```
import greengrasssdk
import time
import json

iot_client = greengrasssdk.client('iot-data')
send_topic = 'sns/message'

def create_request_with_all_fields():
    return  {
        "request": {
            "message": "Message from SNS Connector Test"
        },
        "id" : "req_123"
    }

def publish_basic_message():
    messageToPublish = create_request_with_all_fields()
    print("Message To Publish: ", messageToPublish)
    iot_client.publish(topic=send_topic,
        payload=json.dumps(messageToPublish))

publish_basic_message()

def lambda_handler(event, context):
    return
```

## 라이선스
<a name="sns-connector-license"></a>

SNS 커넥터에는 다음 타사 소프트웨어/라이선스가 포함되어 있습니다.<a name="boto-3-licenses"></a>
+ [AWS SDK for Python (Boto3)](https://pypi.org/project/boto3/)/Apache 라이선스 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache 라이선스 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF 라이선스
+ [docutils](https://pypi.org/project/docutils/)/BSD 라이선스, GNU 일반 공개 라이선스(GPL), Python Software Foundation 라이선스, 퍼블릭 도메인
+ [jmespath](https://pypi.org/project/jmespath/)/MIT 라이선스
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache 라이선스 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT 라이선스

이 커넥터는 [Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 따라 릴리스됩니다.

## Changelog
<a name="sns-connector-changelog"></a>

다음 표에서는 의 각 릴리스에서 변경된 중요 사항에 대해 설명합니다.


| 버전 | 변경 사항 | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>커넥터에 대한 컨테이너화 모드를 구성하는 `IsolationMode` 파라미터가 추가되었습니다. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>Lambda 런타임 요구 사항을 변경하는 Python 3.7로 런타임을 업그레이드했습니다. | 
| 2 | 과도한 로깅을 줄이도록 고정합니다. | 
| 1 | 최초 릴리스입니다. | 

<a name="one-conn-version"></a>Greengrass 그룹은 한 번에 하나의 커넥터 버전만 포함할 수 있습니다. 커넥터 버전 업그레이드에 대한 자세한 내용은 [커넥터 버전 업그레이드](connectors.md#upgrade-connector-versions)을 참조하십시오.

## 다음 사항도 참조하세요.
<a name="sns-connector-see-also"></a>
+ [Greengrass 커넥터를 사용하여 서비스 및 프로토콜과 통합](connectors.md)
+ [Greengrass 커넥터 시작하기(콘솔)](connectors-console.md)
+ [Greengrass 커넥터 시작하기(CLI)](connectors-cli.md)
+ Boto 3 설명서의 [게시 작업](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns.html#SNS.Client.publish)
+ *Amazon Simple Notification Service 개발자 가이드*의 [Amazon Simple Notification Service란?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)