Greengrass V2 Component install failed - DOCKER_PULL_ERROR

0

I have a set of devices that are deployed in remote locations and move around - sometimes there is an internet connection sometimes not.

I am using the docker application manager and trying to install a component that uses a docker image from ECR.

I received this deployment failed notification:

{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "myComponent",
  "ComponentVersion": "1.2.0",
  "ComponentType": "aws.greengrass.generic",
  "ComponentDescription": "",
  "ComponentPublisher": "",
  "ComponentDependencies": {
    "aws.greengrass.DockerApplicationManager": {
      "VersionRequirement": ">=2.0.0 <2.1.0",
      "DependencyType": "HARD"
    },
    "aws.greengrass.TokenExchangeService": {
      "VersionRequirement": ">=2.0.0 <2.1.0",
      "DependencyType": "HARD"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "Run": {
          "Script": "docker run --rm  --log-opt max-size=10m --log-opt max-file=5 -v /greengrass/v2:/greengrass/v2 -e AWS_REGION=$AWS_REGION  -e SVCUID=$SVCUID   -e AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT=$AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT -e AWS_CONTAINER_AUTHORIZATION_TOKEN=$AWS_CONTAINER_AUTHORIZATION_TOKEN -e AWS_CONTAINER_CREDENTIALS_FULL_URI=$AWS_CONTAINER_CREDENTIALS_FULL_URI -e AWS_IOT_THING_NAME=$AWS_IOT_THING_NAME -e IOT_KEY_PATH=/greengrass/v2/privKey.key -e IOT_CERT_PATH=/greengrass/v2/thingCert.crt -e IOT_CA_PATH=$GG_ROOT_CA_PATH  -e AWS_IOT_HOST=AWSHOST  -e NODE_ENV=prod -v /greengrass/v2/ipc.socket:/greengrass/v2/ipc.socket  --network host --privileged --name test region.dkr.ecr.ap-southeast-2.amazonaws.com/dockerImage:1.2.0"
        },
        "Shutdown": {
          "Script": "docker stop"
        }
      },
      "Artifacts": [
        {
          "Uri": "docker:region.dkr.ecr.ap-southeast-2.amazonaws.com/dockerImage:1.2.0",
          "Unarchive": "NONE",
          "Permission": {
            "Read": "OWNER",
            "Execute": "NONE"
          }
        }
      ]
    }
  ],
  "Lifecycle": {}
}
2023-07-31T05:30:34.288Z [INFO] (pool-2-thread-59) com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader: get-ecr-image. task failed and will be retried. {task-attempt=1, componentIdentifier=myComponen, artifactUri=docker:region.dkr.ecr.ap-southeast-2.amazonaws.com/dockerImage:1.2.0}
com.aws.greengrass.componentmanager.plugins.docker.exceptions.ConnectionException: Network issue when docker pull - net/http: TLS handshake timeout

        at com.aws.greengrass.componentmanager.plugins.docker.DefaultDockerClient.pullImage(DefaultDockerClient.java:143)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.lambda$performDownloadSteps$2(DockerImageDownloader.java:231)
        at com.aws.greengrass.util.RetryUtils.runWithRetry(RetryUtils.java:50)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.lambda$performDownloadSteps$3(DockerImageDownloader.java:230)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.runWithConnectionErrorCheck(DockerImageDownloader.java:294)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.lambda$run$4(DockerImageDownloader.java:283)
        at com.aws.greengrass.util.RetryUtils.runWithRetry(RetryUtils.java:50)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.lambda$run$5(DockerImageDownloader.java:283)
        at com.aws.greengrass.util.RetryUtils.runWithRetry(RetryUtils.java:50)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.run(DockerImageDownloader.java:280)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.performDownloadSteps(DockerImageDownloader.java:228)
        at com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader.download(DockerImageDownloader.java:103)
        at com.aws.greengrass.componentmanager.ComponentManager.prepareArtifacts(ComponentManager.java:453)
        at com.aws.greengrass.componentmanager.ComponentManager.preparePackage(ComponentManager.java:399)
        at com.aws.greengrass.componentmanager.ComponentManager.lambda$preparePackages$1(ComponentManager.java:360)
        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)
Deployment status: Failed
Error
DOCKER_PULL_ERROR: FAILED_NO_STATE_CHANGE: Failed to download artifact name: 'docker:region.dkr.ecr.ap-southeast-2.amazonaws.com/dockerimage:1.2.0' for component myComponent-1.2.0, reason: Failed to download docker image. Unexpected error while trying to perform docker pull - dial tcp 13.239.162.67:443: connect: network is unreachable
Error code hierarchy
• DEPLOYMENT_FAILURE
• ARTIFACT_DOWNLOAD_ERROR
• DOCKER_ERROR
• DOCKER_PULL_ERROR

I understand that the device was probably offline - however I dont think the deployment should fail - it should be able to handle network loss and try again once it is connected?

Am I missing something in my setup to get the correct functionality?

asked 9 months ago75 views
No Answers

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