Clarification of deployment issues

0

I'm writing this post with the intention of clarifying once and for all how the implementation process works, as I'm having trouble understanding its functionality. I'm using Greengrass on 4 devices and I'm utilizing various components. However, when I deploy the implementations, I receive errors on 2 of them. The errors are always the same: the version of the group implementation doesn't match the local implementation. But how can I modify either of them?

023-06-12T23:41:00.474Z [ERROR] (pool-2-thread-58) com.aws.greengrass.deployment.DeploymentService: Error occurred while processing deployment. {deploymentId=cf96f385-ec51-4cb7-85a5-3d20d23884f3, serviceName=DeploymentService, currentState=RUNNING}
java.util.concurrent.ExecutionException: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component aws.greengrass.clientdevices.mqtt.Moquette version constraints: thinggroup/DemoLabGroup requires =2.3.0, thing/DemoLab1 requires =2.3.3.

I've tried removing the aws.greengrass.clientdevices.mqtt.Moquette component from the implementation, but doing so causes the CLI to fail. I understand that I might be directed to the troubleshooting page for a solution, but I'm sorry, I'm not familiar with how to resolve these types of issues, which seem to be quite common.

I would appreciate assistance with this issue, as it is crucial for me to have a clear understanding in order to use Greengrass with confidence.

cespar
asked 10 months ago310 views
2 Answers
1
Accepted Answer

Hi,

I'd recommend you read: https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-deployments.html#component-dependency-resolution.

You have deployed both to the thing and a thing group with incompatible versions. You must remove the component from either the thing or the thing group's deployment manifest then perform that deployment to resolve the conflict.

This happens because you cannot have multiple versions of the same component on the same device. Because the deployment to the thing and thing group want different things, we cannot satisfy their requests so the deployment will fail. You need to then modify the deployment so that only one deployment deploys the component, or they deploy compatible versions.

Remove Moquette from the thing's deployment by making a new deployment to the thing which does not include Moquette. Now you can deploy to the thing group with any version of Moquette that you want.

Cheers,

Michael

AWS
EXPERT
answered 10 months ago
  • In this case, when I remove Mosquette, cli complains, then nucleus, then logmanager... Should I remove all the components from both the group implementation and the device implementation? I prefer, except for exceptions, to handle a single implementation, but due to conflicts I've encountered, I've had to create more, thinking that was the solution. I'm sure I never fully understood it. I thought that if there is a group implementation and a device implementation, the latter is the valid one.

    When you refer to removing "Mosquette" from the implementation of the thing, is it done as indicated on this page? https://docs.aws.amazon.com/es_es/greengrass/v2/developerguide/revise-deployments.html Are there other ways?

    Thank you very much for your response.

  • You need to decide if you want a group or an individual device. Pick one, not both.

    Pick the individual device, now you will only deploy to the thing and not the thing group. Revise the deployment to the group and uncheck ALL components. Now make the deployment, this will remove the group's dependencies from the device. Now you're free to deploy to the thing using a thing (not a thing group) deployment.

  • Thank you very much, this last comment clarified the next steps for me a lot.

0

I have one more question. As I mentioned earlier, I have four core devices, and I would like to keep one of them separate from the group for testing purposes. If everything goes well, I will deploy it to the group. Currently, I'm doing this using a sub-deployment. Is this correct? How should I do it? Thank you very much.

cespar
answered 10 months ago
  • Subdeployment doesn't add a thing to a group, to add a thing then just add it to the group and it will receive the latest deployment for that group. But you will get version conflicts unless you first deploy to the thing to remove all components.

  • Understood. So, what is the use case for subimplementations?

  • Subdeployment can be used to retry failed thing group deployments on individual devices. It can also be used to test changes on a single device before moving those changes to the full group. But it should be used minimally and only for several minutes before removing the subdeployment group.

  • And how can I delete the sub-implementation?

  • Open the thing group page of the iot console and then delete the group.

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions