AWS IoT Greengrass Version 1 は 2023 年 6 月 30 日に延長ライフフェーズに参加しました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日以降、 AWS IoT Greengrass V1 は機能、機能強化、バグ修正、またはセキュリティパッチを提供する更新をリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行することを強くお勧めします。 AWS IoT Greengrass Version 2これにより、重要な新機能が追加され、プラットフォーム のサポートが追加されます。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SNS コネクタ
SNS コネクタは、Amazon SNS トピックにメッセージを発行します。これにより、ウェブサーバー、E メールアドレス、および他のメッセージサブスクライバーは Greengrass グループのイベントに応答できます。
このコネクタは、MQTT トピックに関する SNS メッセージ情報を受信し、指定された SNS トピックに送信します。オプションでカスタム Lambda 関数を使用して、メッセージをこのコネクタに発行する前にフィルタリング処理および書式設定するロジックを実装できます。
このコネクタには、次のバージョンがあります。
バージョン |
ARN |
---|---|
4 |
|
3 |
|
2 |
|
1 |
|
バージョンの変更については、「Changelog」を参照してください。
要件
このコネクタには以下の要件があります。
コネクタパラメータ
このコネクタには、以下のパラメータが用意されています。
サンプルコネクタを作成する (AWS CLI)
以下の 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 コンソールでは、グループの [Connectors] (コネクタ) ページからコネクタを追加できます。詳細については、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。
入力データ
このコネクタは、MQTT トピックに関する SNS メッセージ情報を受け取り、その情報をそのままターゲット SNS トピックに発行します。入力メッセージは JSON 形式である必要があります。
- サブスクリプションのトピックフィルター
-
sns/message
- メッセージのプロパティ
-
request
-
SNS トピックに送信するメッセージに関する情報。
必須:
true
タイプ:
object
。以下のプロパティを含みます。message
-
文字列または JSON 形式でのメッセージの内容。例については、「入力例」を参照してください。
JSON を送信するには、
message_structure
プロパティをjson
に設定する必要があります。メッセージは、文字列エンコードされた JSON オブジェクト (default
キーを含む) であることが必要です。必須:
true
タイプ:
string
有効なパターン:
.*
subject
-
メッセージの件名。
必須:
false
: ASCII テキスト (最大 100 文字)。これは、文字、数字、または句読点で始まる必要があります。改行や制御文字は使用しないでください。
有効なパターン:
.*
sns_topic_arn
-
メッセージを発行する SNS トピックの ARN。指定した場合、コネクタは、デフォルトのトピックではなくこのトピックに発行します。
注記
グループロールは、すべてのターゲットトピックに対する
sns:Publish
アクセス許可を付与する必要があります。詳細については、「要件」を参照してください。必須:
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
有効なパターン:
.*
- 制限
-
メッセージサイズは、256 KB の最大 SNS メッセージサイズによって制限されます。
- 入力例: 文字列メッセージ
-
この例では、文字列メッセージを送信します。オプションの
sns_topic_arn
プロパティを指定します。このプロパティは、デフォルトの送信先トピックよりも優先されます。{ "request": { "subject": "Message subject", "message": "Message data", "sns_topic_arn": "arn:aws:sns:
region
:account-id
:topic2-name" }, "id": "request123" } - 入力例: JSON メッセージ
-
この例では、メッセージを文字列エンコードされた JSON オブジェクト (
default
キーを含む) として送信します。{ "request": { "subject": "Message subject", "message": "{ \"default\": \"Message data\" }", "message_structure": "json" }, "id": "request123" }
出力データ
このコネクターは、MQTT トピックで出力データとしてステータス情報を発行します。
- サブスクリプションのトピックフィルター
-
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" }
使用例
コネクタの試用に利用できる Python 3.7 Lambda 関数の例を設定するには、次のステップ (概要) を使用します。
注記
-
他の Python ランタイムを使用する場合は、Python 3.x から Python 3.7 へのシンボリックリンクを作成します。
-
「コネクタの使用を開始する (コンソール)」および「コネクタの使用を開始する (CLI)」トピックには、Twilio 通知コネクタの例を設定およびデプロイする方法を示す詳細なステップが含まれています。
コネクタの要件を満たしていることを確認します。
グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、Greengrass グループロールの管理 (コンソール)またはGreengrass グループロールの管理 (CLI)を参照してください。
-
入力データをコネクタに送信する Lambda 関数を作成して発行します。
サンプルコードを PY ファイルとして保存します。AWS IoT Greengrass Core SDK for Python をダウンロードして解凍します。次に、PY ファイルとルートレベルの
greengrasssdk
フォルダを含む zip パッケージを作成します。この zip パッケージは、AWS Lambda にアップロードするデプロイパッケージです。Python 3.7 Lambda 関数を作成したら、関数バージョンを公開し、エイリアスを作成します。
-
Greengrass グループを設定します。
-
エイリアスで Lambda 関数を追加します (推奨)。Lambda ライフサイクルを長期間有効に (または CLI で
"Pinned": true
に) 設定します。 -
コネクタを追加し、そのパラメータを設定します。
-
コネクタが入力データを受信し、サポートされているトピックフィルターで出力データを送信できるようにするサブスクリプションを追加します。
Lambda 関数をソースに、コネクタをターゲットに設定し、サポートされている入力トピックフィルターを使用します。
コネクタをソースとして、AWS IoT Core をターゲットとして設定し、サポートされている出力トピックフィルターを使用します。このサブスクリプションを使用して、AWS IoT コンソールでステータスメッセージを表示します。
-
-
グループをデプロイします。
-
AWS IoT コンソールの [Test] (テスト) ページで、出力データトピックをサブスクライブして、コネクタからのステータスメッセージを表示します。この例の Lambda 関数は長期間有効であり、グループがデプロイされた直後にメッセージの送信を開始します。
テストが終了したら、Lambda ライフサイクルをオンデマンドに (または CLI で
"Pinned": false
に) 設定して、グループをデプロイできます。これにより、関数がメッセージの送信を停止します。
例
次の例では、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
ライセンス
SNS コネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。
-
AWS SDK for Python (Boto3)
/Apache License 2.0 -
botocore
/Apache License 2.0 -
dateutil
/PSF ライセンス -
docutils
/BSD ライセンス、GNU 一般パブリックライセンス (GPL)、Python Software Foundation ライセンス、パブリックドメイン -
jmespath
/MIT ライセンス -
s3transfer
/Apache License 2.0 -
urllib3
/MIT ライセンス
このコネクタは、Greengrass Core ソフトウェアライセンス契約
変更ログ
次の表に、コネクタの各バージョンにおける変更点を示します。
バージョン |
変更 |
---|---|
4 |
コネクタのコンテナ化モードを設定するための |
3 |
Lambda ランタイムを Python 3.7 にアップグレードしたことで、ランタイム要件が変更。 |
2 |
過剰なログ記録を減らすための修正。 |
1 |
初回リリース。 |
Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。
以下も参照してください。
-
Boto 3 ドキュメントの「発行アクション
」 -
Amazon Simple Notification Service デベロッパーガイドの Amazon Simple Notification Service とは