aws-greengrass / aws-greengrass-shadow-manager

A GreengrassV2 Component that provides offline device shadow documents and optional synchronization to the IoT device shadow service.
Apache License 2.0
9 stars 5 forks source link

clientV2.updateThingShadow没有把本地影子更新同步到云端 #185

Closed ArvinSpace closed 1 year ago

ArvinSpace commented 1 year ago

发现三个问题:

  1. delta接收消息执行了两次(只订阅了一次),从日志可以看出[INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. Received new message on topic $aws/things/Arvin-INDICar-One-Basic-9/shadow/name/car_control/update/delta: {"version":149,"timestamp":1684115955,"state":{"vehicle_body":{"lock":{"state":"0","value":"0"}}},"metadata":{"vehicle_body":{"lock":{"state":{"timestamp":1684115955},"value":{"timestamp":1684115955}}}}}. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
  2. updateThingShadow未同步到云端
  3. BaseSyncRequest.getCloudShadowDocument和CloudUpdateSyncRequest.execute报错
系统:amazonlinux:2
aws-iot-device-sdk-java-v2 1.12.1
JDK 11.0.13
AWS组件与配置

aws.greengrass.Nucleus  2.9.6

aws.greengrass.ShadowManager    2.3.2
{
  "reset": [
    ""
  ],
  "merge": {
    "strategy": {
      "type": "realTime"
    },
    "synchronize": {
      "coreThing": {
        "classic": false,
        "namedShadows": [
          "car_control"
        ]
      },
      "direction": "betweenDeviceAndCloud"
    }
  }
}

aws.greengrass.clientdevices.Auth   2.3.2
{
  "reset": [
    ""
  ],
  "merge": {
    "deviceGroups": {
      "formatVersion": "2021-03-05",
      "definitions": {
        "MyDeviceGroup": {
          "selectionRule": "thingName: Arvin-INDICar-One-Basic-*",
          "policyName": "MyClientDevicePolicy"
        }
      },
      "policies": {
        "MyClientDevicePolicy": {
          "AllowConnect": {
            "statementDescription": "Allow client devices to connect.",
            "operations": [
              "mqtt:connect"
            ],
            "resources": [
              "*"
            ]
          },
          "AllowPublish": {
            "statementDescription": "Allow client devices to publish to all topics.",
            "operations": [
              "mqtt:publish"
            ],
            "resources": [
              "*"
            ]
          },
          "AllowSubscribe": {
            "statementDescription": "Allow client devices to subscribe to all topics.",
            "operations": [
              "mqtt:subscribe"
            ],
            "resources": [
              "*"
            ]
          }
        }
      }
    }
  }
}

aws.greengrass.clientdevices.IPDetector 2.1.6

aws.greengrass.clientdevices.mqtt.Bridge    2.2.5
{
  "reset": [
    ""
  ],
  "merge": {
    "mqttTopicMapping": {
      "HelloWorldIotCoreMapping": {
        "topic": "clients/+/hello/world",
        "source": "LocalMqtt",
        "target": "IotCore"
      },
      "HelloWorldPubsubMapping": {
        "topic": "clients/+/hello/world",
        "source": "LocalMqtt",
        "target": "Pubsub"
      },
      "ShadowsLocalMqttToPubsub": {
        "topic": "$aws/things/+/shadow/#",
        "source": "LocalMqtt",
        "target": "Pubsub"
      },
      "ShadowsPubsubToLocalMqtt": {
        "topic": "$aws/things/+/shadow/#",
        "source": "Pubsub",
        "target": "LocalMqtt"
      }
    }
  }
}

aws.greengrass.clientdevices.mqtt.Moquette  2.3.2
自定义组件CarControl配置
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "accessControl": {
        "aws.greengrass.ShadowManager": {
          "com.iot.aws.arvin.sample.CarControl:shadow:1": {
            "policyDescription": "Allows access to core devices' named shadows",
            "operations": [
              "aws.greengrass#GetThingShadow",
              "aws.greengrass#UpdateThingShadow"
            ],
            "resources": [
              "$aws/things/{iot:thingName}/shadow/name/car_control"
            ]
          }
        },
        "aws.greengrass.ipc.pubsub": {
          "com.iot.aws.arvin.sample.CarControl:pubsub:1": {
            "policyDescription": "Allows access to core devices' named shadow updates",
            "operations": [
              "aws.greengrass#SubscribeToTopic"
            ],
            "resources": [
              "$aws/things/{iot:thingName}/shadow/name/car_control/update/delta"
            ]
          }
        }
      }
    }
  }
代码

        GreengrassCoreIPCClientV2 clientV2 = GreengrassCoreIPCClientV2.builder().build();

        UpdateThingShadowRequest request = new UpdateThingShadowRequest()
            .withThingName(thingName)
            .withShadowName(shadowName)
            .withPayload(payload);
        try {
            outInfoLog(String.format("UpdateThingShadowRequest begin %s%n", ShadowUtils.gson.toJson(request)));
            clientV2.updateThingShadow(request);
            outInfoLog("UpdateThingShadowRequest end");
        } catch (Exception e) {
            outErrorLog("update shadow reported fail.");
            e.printStackTrace();
        }

payload数据是:
{"state":{"reported":{"vehicle_body":{"lock":{"state":"0","value":"0"}}}}}
自定义组件CarControl日志

2023-05-15T01:56:14.183Z [INFO] (pool-2-thread-32) com.iot.aws.arvin.sample.CarControl: shell-runner-start. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=STARTING, command=["java -jar /greengrass/v2/packages/artifacts-unarchived/com.iot.aws.arvin.sampl..."]}
2023-05-15T01:56:14.349Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. thingName-----------:Arvin-INDICar-One-Basic-9. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:56:14.512Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. May 15, 2023 1:56:14 AM software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection$1 onConnectionSetup. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:56:14.513Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. INFO: Socket connection /greengrass/v2/ipc.socket:8888 to server result [AWS_ERROR_SUCCESS]. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:56:14.556Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. May 15, 2023 1:56:14 AM software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection$1 onProtocolMessage. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:56:14.556Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. INFO: Connection established with event stream RPC server. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:56:14.605Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. Successfully subscribed to topic: $aws/things/Arvin-INDICar-One-Basic-9/shadow/name/car_control/update/delta. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:56:14.609Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. CarControl>. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.883Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. Received new message on topic $aws/things/Arvin-INDICar-One-Basic-9/shadow/name/car_control/update/delta: {"version":149,"timestamp":1684115955,"state":{"vehicle_body":{"lock":{"state":"0","value":"0"}}},"metadata":{"vehicle_body":{"lock":{"state":{"timestamp":1684115955},"value":{"timestamp":1684115955}}}}}. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.884Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.885Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. Received new message on topic $aws/things/Arvin-INDICar-One-Basic-9/shadow/name/car_control/update/delta: {"version":149,"timestamp":1684115955,"state":{"vehicle_body":{"lock":{"state":"0","value":"0"}}},"metadata":{"vehicle_body":{"lock":{"state":{"timestamp":1684115955},"value":{"timestamp":1684115955}}}}}. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.885Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.892Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. lock state change to: OFF. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.894Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. lock state change to: OFF. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.894Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. lock value change to: 0. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.894Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. lock value change to: 0. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.896Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. builded jsonStr:{"state":{"reported":{"vehicle_body":{"lock":{"state":"0","value":"0"}}}}}. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.897Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. builded jsonStr:{"state":{"reported":{"vehicle_body":{"lock":{"state":"0","value":"0"}}}}}. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.897Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. WARNING: An illegal reflective access operation has occurred. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.898Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. WARNING: Illegal reflective access by com.google.gson.internal.reflect.ReflectionHelper (file:/greengrass/v2/packages/artifacts-unarchived/com.iot.aws.arvin.sample.CarControl/1.1.0/CarControl/lib/gson-2.9.0.jar) to constructor java.util.Optional(). {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.898Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. WARNING: Please consider reporting this to the maintainers of com.google.gson.internal.reflect.ReflectionHelper. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.898Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.899Z [WARN] (Copier) com.iot.aws.arvin.sample.CarControl: stderr. WARNING: All illegal access operations will be denied in a future release. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.899Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. UpdateThingShadowRequest begin {"thingName":{"value":"Arvin-INDICar-One-Basic-9"},"shadowName":{"value":"car_control"},"payload":{"value":[123,34,115,116,97,116,101,34,58,123,34,114,101,112,111,114,116,101,100,34,58,123,34,118,101,104,105,99,108,101,95,98,111,100,121,34,58,123,34,108,111,99,107,34,58,123,34,115,116,97,116,101,34,58,34,48,34,44,34,118,97,108,117,101,34,58,34,48,34,125,125,125,125,125]}}. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.900Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.900Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. UpdateThingShadowRequest begin {"thingName":{"value":"Arvin-INDICar-One-Basic-9"},"shadowName":{"value":"car_control"},"payload":{"value":[123,34,115,116,97,116,101,34,58,123,34,114,101,112,111,114,116,101,100,34,58,123,34,118,101,104,105,99,108,101,95,98,111,100,121,34,58,123,34,108,111,99,107,34,58,123,34,115,116,97,116,101,34,58,34,48,34,44,34,118,97,108,117,101,34,58,34,48,34,125,125,125,125,125]}}. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.900Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.915Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. UpdateThingShadowRequest end. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
2023-05-15T01:59:15.916Z [INFO] (Copier) com.iot.aws.arvin.sample.CarControl: stdout. UpdateThingShadowRequest end. {scriptName=services.com.iot.aws.arvin.sample.CarControl.lifecycle.Run, serviceName=com.iot.aws.arvin.sample.CarControl, currentState=RUNNING}
shadowmanager日志

2023-05-15T01:44:14.165Z [INFO] (nioEventLoopGroup-3-1) io.moquette.broker.metrics.MQTTMessageLogger: C->B CONNECT <null>. {}
2023-05-15T01:44:14.170Z [INFO] (nioEventLoopGroup-3-1) com.aws.greengrass.mqtt.moquette.ClientDeviceAuthorizer: Successfully authenticated client device. {clientId=mqtt-bridge-31s5ex147q7, sessionId=d45117d1-bc2a-49be-a266-557157ba8b26}
2023-05-15T01:44:14.179Z [INFO] (pool-2-thread-16) com.aws.greengrass.mqtt.bridge.clients.MQTTClient: Connected to broker. {clientId=mqtt-bridge-31s5ex147q7, brokerUri=ssl://localhost:8883}
2023-05-15T01:44:14.184Z [INFO] (nioEventLoopGroup-3-1) io.moquette.broker.metrics.MQTTMessageLogger: C->B SUBSCRIBE <mqtt-bridge-31s5ex147q7> to topics [MqttTopicSubscription[topicFilter=$aws/things/+/shadow/#, option=SubscriptionOption[qos=AT_LEAST_ONCE, noLocal=false, retainAsPublished=false, retainHandling=SEND_AT_SUBSCRIBE]]]. {}
2023-05-15T01:44:14.190Z [INFO] (nioEventLoopGroup-3-1) io.moquette.broker.metrics.MQTTMessageLogger: C->B SUBSCRIBE <mqtt-bridge-31s5ex147q7> to topics [MqttTopicSubscription[topicFilter=clients/+/hello/world, option=SubscriptionOption[qos=AT_LEAST_ONCE, noLocal=false, retainAsPublished=false, retainHandling=SEND_AT_SUBSCRIBE]]]. {}
2023-05-15T01:44:17.759Z [INFO] (Thread-4) com.aws.greengrass.mqttclient.AwsIotMqttClient: Connecting to AWS IoT Core. {clientId=Arvin-INDICar-One-Basic-9}
2023-05-15T01:44:17.760Z [INFO] (Thread-4) com.aws.greengrass.mqttclient.AwsIotMqttClient: Connection purposefully interrupted. {clientId=Arvin-INDICar-One-Basic-9}
2023-05-15T01:44:18.713Z [INFO] (Thread-4) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=Arvin-INDICar-One-Basic-9, sessionPresent=false}
2023-05-15T01:44:18.715Z [INFO] (Thread-4) com.aws.greengrass.shadowmanager.sync.strategy.RealTimeSyncStrategy: sync. Start real time syncing. {}
2023-05-15T01:44:18.716Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Start processing sync requests. {}
2023-05-15T01:44:18.722Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Executing sync request. {Type=FullShadowSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:44:18.815Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.IotDataPlaneClientFactory: initialize-iot-data-client. {service-region=us-east-1, service-endpoint=<endpoint>-ats.iot.us-east-1.amazonaws.com}
2023-05-15T01:44:19.513Z [INFO] (pool-2-thread-19) com.aws.greengrass.clientdevices.auth.connectivity.CISShadowMonitor: Subscribed to shadow update delta topic. {}
2023-05-15T01:44:19.786Z [ERROR] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.model.BaseSyncRequest: Could not execute cloud shadow get request. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:44:19.788Z [ERROR] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Skipping sync request. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
com.aws.greengrass.shadowmanager.exception.SkipSyncRequestException: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: cca9b7cc-680d-f1ab-c7e7-d0c7630c80a2)
    at com.aws.greengrass.shadowmanager.sync.model.BaseSyncRequest.getCloudShadowDocument(BaseSyncRequest.java:407)
    at com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest.execute(FullShadowSyncRequest.java:79)
    at com.aws.greengrass.shadowmanager.sync.SyncHandler.lambda$static$0(SyncHandler.java:98)
    at com.aws.greengrass.util.RetryUtils.runWithRetry(RetryUtils.java:50)
    at com.aws.greengrass.shadowmanager.sync.SyncHandler.lambda$static$1(SyncHandler.java:96)
    at com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy.lambda$new$0(BaseSyncStrategy.java:155)
    at com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy.syncLoop(BaseSyncStrategy.java:366)
    at com.aws.greengrass.shadowmanager.sync.strategy.RealTimeSyncStrategy.syncLoop(RealTimeSyncStrategy.java:77)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: cca9b7cc-680d-f1ab-c7e7-d0c7630c80a2)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:82)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:60)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:41)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:40)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:30)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:73)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:42)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:78)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:40)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:50)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:81)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:56)
    at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:48)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:31)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)
    at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:193)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:171)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:82)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:179)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76)
    at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
    at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56)
    at software.amazon.awssdk.services.iotdataplane.DefaultIotDataPlaneClient.getThingShadow(DefaultIotDataPlaneClient.java:221)
    at com.aws.greengrass.shadowmanager.sync.IotDataPlaneClientWrapper.getThingShadow(IotDataPlaneClientWrapper.java:95)
    at com.aws.greengrass.shadowmanager.sync.model.BaseSyncRequest.getCloudShadowDocument(BaseSyncRequest.java:374)
    ... 12 more

2023-05-15T01:44:20.599Z [INFO] (pool-2-thread-19) com.aws.greengrass.clientdevices.auth.connectivity.CISShadowMonitor: Subscribed to shadow get accepted topic. {}

2023-05-15T01:58:41.442Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Executing sync request. {Type=LocalUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:58:41.453Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.ipc.UpdateThingShadowRequestHandler: Successfully updated shadow. {service-name=aws.greengrass.ShadowManager, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, local-version=148}
2023-05-15T01:58:41.455Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.ShadowManagerDAOImpl: Updating sync info. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, cloud-version=22, local-version=148}
2023-05-15T01:58:41.457Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Executing sync request. {Type=CloudUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:59:07.828Z [INFO] (pool-1-thread-1) com.aws.greengrass.detector.IpDetectorManager: Acquired host IP addresses. {IpAddresses=[/172.17.0.2]}
2023-05-15T01:59:15.864Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Executing sync request. {Type=LocalUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:59:15.872Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.ipc.UpdateThingShadowRequestHandler: Successfully updated shadow. {service-name=aws.greengrass.ShadowManager, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, local-version=149}
2023-05-15T01:59:15.874Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.ShadowManagerDAOImpl: Updating sync info. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, cloud-version=23, local-version=149}
2023-05-15T01:59:15.876Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Executing sync request. {Type=CloudUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:59:15.906Z [INFO] (Thread-23) com.aws.greengrass.shadowmanager.ipc.UpdateThingShadowRequestHandler: Successfully updated shadow. {service-name=com.iot.aws.arvin.sample.CarControl, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, local-version=150}
2023-05-15T01:59:15.907Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Executing sync request. {Type=CloudUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:59:15.913Z [INFO] (Thread-23) com.aws.greengrass.shadowmanager.ipc.UpdateThingShadowRequestHandler: Successfully updated shadow. {service-name=com.iot.aws.arvin.sample.CarControl, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, local-version=151}
2023-05-15T01:59:15.979Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.IotDataPlaneClientFactory: initialize-iot-data-client. {service-region=us-east-1, service-endpoint=<endpoint>-ats.iot.us-east-1.amazonaws.com}
2023-05-15T01:59:17.160Z [ERROR] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Skipping sync request. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
com.aws.greengrass.shadowmanager.exception.SkipSyncRequestException: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: 1adb7083-da18-7e25-8ae5-ced704b73301)
    at com.aws.greengrass.shadowmanager.sync.model.CloudUpdateSyncRequest.execute(CloudUpdateSyncRequest.java:148)
    at com.aws.greengrass.shadowmanager.sync.SyncHandler.lambda$static$0(SyncHandler.java:98)
    at com.aws.greengrass.util.RetryUtils.runWithRetry(RetryUtils.java:50)
    at com.aws.greengrass.shadowmanager.sync.SyncHandler.lambda$static$1(SyncHandler.java:96)
    at com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy.lambda$new$0(BaseSyncStrategy.java:155)
    at com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy.syncLoop(BaseSyncStrategy.java:366)
    at com.aws.greengrass.shadowmanager.sync.strategy.RealTimeSyncStrategy.syncLoop(RealTimeSyncStrategy.java:77)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: 1adb7083-da18-7e25-8ae5-ced704b73301)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:82)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:60)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:41)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:40)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:30)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:73)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:42)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:78)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:40)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:50)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:81)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:56)
    at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:48)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:31)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)
    at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:193)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:171)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:82)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:179)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76)
    at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
    at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56)
    at software.amazon.awssdk.services.iotdataplane.DefaultIotDataPlaneClient.updateThingShadow(DefaultIotDataPlaneClient.java:411)
    at com.aws.greengrass.shadowmanager.sync.IotDataPlaneClientWrapper.updateThingShadow(IotDataPlaneClientWrapper.java:79)
    at com.aws.greengrass.shadowmanager.sync.model.CloudUpdateSyncRequest.execute(CloudUpdateSyncRequest.java:109)
    ... 11 more

2023-05-15T01:59:17.162Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Executing sync request. {Type=CloudUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
2023-05-15T01:59:18.097Z [ERROR] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy: sync. Skipping sync request. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
com.aws.greengrass.shadowmanager.exception.SkipSyncRequestException: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: 7b61ba88-d8f4-49d8-2f14-67f5d7342a12)
    at com.aws.greengrass.shadowmanager.sync.model.CloudUpdateSyncRequest.execute(CloudUpdateSyncRequest.java:148)
    at com.aws.greengrass.shadowmanager.sync.SyncHandler.lambda$static$0(SyncHandler.java:98)
    at com.aws.greengrass.util.RetryUtils.runWithRetry(RetryUtils.java:50)
    at com.aws.greengrass.shadowmanager.sync.SyncHandler.lambda$static$1(SyncHandler.java:96)
    at com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy.lambda$new$0(BaseSyncStrategy.java:155)
    at com.aws.greengrass.shadowmanager.sync.strategy.BaseSyncStrategy.syncLoop(BaseSyncStrategy.java:366)
    at com.aws.greengrass.shadowmanager.sync.strategy.RealTimeSyncStrategy.syncLoop(RealTimeSyncStrategy.java:77)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: 7b61ba88-d8f4-49d8-2f14-67f5d7342a12)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:82)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:60)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:41)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:40)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:30)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:73)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:42)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:78)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:40)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:50)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:81)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:56)
    at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:36)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:48)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:31)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)
    at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)
    at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:193)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:171)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:82)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:179)
    at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76)
    at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
    at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56)
    at software.amazon.awssdk.services.iotdataplane.DefaultIotDataPlaneClient.updateThingShadow(DefaultIotDataPlaneClient.java:411)
    at com.aws.greengrass.shadowmanager.sync.IotDataPlaneClientWrapper.updateThingShadow(IotDataPlaneClientWrapper.java:79)
    at com.aws.greengrass.shadowmanager.sync.model.CloudUpdateSyncRequest.execute(CloudUpdateSyncRequest.java:109)
    ... 11 more
saranyailla commented 1 year ago

Hi, From the logs, it looks like the IoT data endpoint is not configured properly.

2023-05-15T01:59:15.979Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.IotDataPlaneClientFactory: initialize-iot-data-client. {service-region=us-east-1, service-endpoint=<endpoint>-ats.iot.us-east-1.amazonaws.com}

Could you check the iotDataEndpoint set in the configuration ofaws.greengrass.Nucleus component?

ArvinSpace commented 1 year ago

Hi, From the logs, it looks like the IoT data endpoint is not configured properly.

2023-05-15T01:59:15.979Z [INFO] (pool-2-thread-18) com.aws.greengrass.shadowmanager.sync.IotDataPlaneClientFactory: initialize-iot-data-client. {service-region=us-east-1, service-endpoint=<endpoint>-ats.iot.us-east-1.amazonaws.com}

Could you check the iotDataEndpoint set in the configuration ofaws.greengrass.Nucleus component?

endpoint没有问题,完整的日志中打印的是正确的,我只是使用<endpoint>替换以隐藏了

saranyailla commented 1 year ago

Ok, that makes sense. Does the IoT thing policy for Arvin-INDICar-One-Basic-9 have enough permissions to do shadow operations? Also, could you enable DEBUG level logs and share them as well?

ArvinSpace commented 1 year ago

Ok, that makes sense. Does the IoT thing policy for Arvin-INDICar-One-Basic-9 have enough permissions to do shadow operations? Also, could you enable DEBUG level logs and share them as well?

是的,有足够的权限。 相关的权限如下:

    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish",
        "iot:Receive",
        "iot:Subscribe"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "greengrass:*",
      "Resource": "*"
    }
saranyailla commented 1 year ago

The thing policy must specify the permissions as shown below (taken from this doc) to perform shadow operations as needed.

Device Shadow Policy Actions

saranyailla commented 1 year ago

From the logs, it looks like the cloud shadow was updated twice which triggered two local update requests (bi-directional sync). Hence, the CarControl component was also seeing two updates on the cloud shadow update subscription topic.

2023-05-15T01:58:41.442Z [INFO] (pool-2-thread-18) xxxx.BaseSyncStrategy: sync. Executing sync request. {Type=LocalUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
...
2023-05-15T01:58:41.455Z [INFO] (pool-2-thread-18) xxxx.ShadowManagerDAOImpl: Updating sync info. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, cloud-version=22, local-version=148}
...
...
2023-05-15T01:59:15.864Z [INFO] (pool-2-thread-18) xxxx.BaseSyncStrategy: sync. Executing sync request. {Type=LocalUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
...
2023-05-15T01:59:15.874Z [INFO] (pool-2-thread-18) xxxx.ShadowManagerDAOImpl: Updating sync info. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, cloud-version=23, local-version=149}
...
ArvinSpace commented 1 year ago

The thing policy must specify the permissions as shown below (taken from this doc) to perform shadow operations as needed.

Device Shadow Policy Actions

  • iot:DeleteThingShadow
  • iot:GetThingShadow
  • iot:ListNamedShadowsForThing
  • iot:UpdateThingShadow

设备证书对应策略加上这些权限之后就可以同步影子数据到云端了,非常感谢

ArvinSpace commented 1 year ago

From the logs, it looks like the cloud shadow was updated twice which triggered two local update requests (bi-directional sync). Hence, the CarControl component was also seeing two updates on the cloud shadow update subscription topic.

2023-05-15T01:58:41.442Z [INFO] (pool-2-thread-18) xxxx.BaseSyncStrategy: sync. Executing sync request. {Type=LocalUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
...
2023-05-15T01:58:41.455Z [INFO] (pool-2-thread-18) xxxx.ShadowManagerDAOImpl: Updating sync info. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, cloud-version=22, local-version=148}
...
...
2023-05-15T01:59:15.864Z [INFO] (pool-2-thread-18) xxxx.BaseSyncStrategy: sync. Executing sync request. {Type=LocalUpdateSyncRequest, thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control}
...
2023-05-15T01:59:15.874Z [INFO] (pool-2-thread-18) xxxx.ShadowManagerDAOImpl: Updating sync info. {thing name=Arvin-INDICar-One-Basic-9, shadow name=car_control, cloud-version=23, local-version=149}
...

我是在AWS IoT控制台进入物品>Arvin-INDICar-One-Basic-9>car_control影子页面,点击设备影子文档右边的编辑按钮,然后修改影子的desired数据,最后点击更新按钮。

saranyailla commented 1 year ago

Closing the issue. Please reopen if needed. Thanks!