

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# コンポーネントのシャドウとやり取りする
<a name="interact-with-shadows-in-components"></a>

ローカルシャドウサービスを使用して、ローカルシャドウドキュメントと、クライアントデバイスシャドウドキュメントの、読み取りと変更を実行する、カスタムコンポーネント (Lambda 関数コンポーネントなど) を開発できます。

カスタムコンポーネントは、 AWS IoT Device SDK または AWS IoT Greengrass コンポーネント SDK の AWS IoT Greengrass Core IPC ライブラリを使用してローカルシャドウサービスとやり取りします。[シャドウマネージャー](shadow-manager-component.md)コンポーネントを使用すると、コアデバイスでローカルシャドウサービスを有効にできます。

Greengrass コアデバイスにシャドウマネージャーコンポーネントをデプロイするには、`aws.greengrass.ShadowManager` コンポーネントを含む[デプロイを作成](create-deployments.md)します。

**注記**  
デフォルトでは、シャドウマネージャーコンポーネントをデプロイすると、ローカルシャドウのオペレーションのみが有効になります。 AWS IoT Greengrass がコアデバイスシャドウまたはクライアントデバイスのシャドウのシャドウ状態情報を の対応するクラウドシャドウドキュメントに同期できるようにするには AWS IoT Core、 `synchronize`パラメータを含むシャドウマネージャーコンポーネントの設定更新を作成する必要があります。詳細については、「[ローカルデバイスシャドウを と同期する AWS IoT Core](sync-shadows-with-iot-core.md)」を参照してください。

**Topics**
+ [シャドウの状態の取得と変更](#interact-shadow-states)
+ [シャドウの状態の変化に対応する](#react-shadow-events)

## シャドウの状態の取得と変更
<a name="interact-shadow-states"></a>

シャドウ IPC 操作は、ローカルシャドウドキュメントの状態情報を取得および更新します。シャドウマネージャーコンポーネントは、これらのシャドウドキュメントのコアデバイスへの保存処理を行います。

**ローカルシャドウの状態を変更するには**

1. カスタムコンポーネントのレシピに承認ポリシーを追加して、コンポーネントがローカルシャドートピックに関するメッセージを受信できるようにします。

   承認ポリシーの例は、「[Local shadow IPC authorization policy examples](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples)」(ローカルシャドウ IPC 承認ポリシーの例) を参照してください。

1. シャドウ IPC オペレーションを使用して、シャドウの状態情報を取得および変更します。コンポーネントコードでシャドウ IPC オペレーションを使用する方法については、「[ローカルシャドウとやり取り](ipc-local-shadows.md)」を参照してください。

**注記**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
コアデバイスがクライアントデバイスシャドウとやり取りできるようにするには、MQTT ブリッジコンポーネントを設定してデプロイする必要もあります。詳細については、「[Enable shadow manager to communicate with client devices](work-with-client-device-shadows.md)」(シャドウマネージャーがクライアントデバイスと通信できるようにする) を参照してください。

## シャドウの状態の変化に対応する
<a name="react-shadow-events"></a>

Greengrass コンポーネントはコアデバイスで通信を行うために、ローカルパブリッシュ/サブスクライブインターフェイスを使用します。カスタムコンポーネントがシャドウの状態の変更に対応できるようにするには、ローカルのパブリッシュ/サブスクライブトピックにサブスクライブします。これにより、コンポーネントはローカルシャドートピックに関するメッセージを受信し、それらのメッセージを処理できます。

ローカルシャドウトピックは、 AWS IoT デバイスシャドウ MQTT トピックと同じ形式を使用します。シャドウトピックの詳細については、「*AWS IoT デベロッパーガイド*」の「[Device Shadow MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html)」を参照してください。

**ローカルシャドウの状態の変化に対応するには**

1. カスタムコンポーネントのレシピにアクセスコントロールポリシーを追加して、コンポーネントがローカルシャドートピックに関するメッセージを受信できるようにします。

   承認ポリシーの例は、「[Local shadow IPC authorization policy examples](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples)」(ローカルシャドウ IPC 承認ポリシーの例) を参照してください。

1. コンポーネントでカスタムアクションを開始するには、メッセージを受信するシャドートピックにサブスクライブする `SubscribeToTopic` IPC オペレーションを使用します。コンポーネントコードでローカルパブリッシュ/サブスクライブ IPC オペレーションを使用する方法については、「[ローカルメッセージをパブリッシュ/サブスクライブする](ipc-publish-subscribe.md)」を参照してください。

1. Lambda 関数を呼び出すには、イベントソース設定を使用してシャドートピックの名前を指定し、それがローカルパブリッシュ/サブスクライブトピックであることを指定します。Lambda 関数コンポーネントの作成方法については、「[AWS Lambda 関数を実行する](run-lambda-functions.md)」を参照してください。

**注記**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
コアデバイスがクライアントデバイスシャドウとやり取りできるようにするには、MQTT ブリッジコンポーネントを設定してデプロイする必要もあります。詳細については、「[Enable shadow manager to communicate with client devices](work-with-client-device-shadows.md)」(シャドウマネージャーがクライアントデバイスと通信できるようにする) を参照してください。