I am building Snowplow Enrich AWS Fargate Task and I am getting the following error “No top-level ”enrich“ could be found in configuration

Can anyone assist with the following issue? Schemas it is in s3 bucket.

Hi @Vitalie_Jicol - could you please share some more detail like:

  1. The full stacktrace
  2. Your enrich config file
  3. Your enrich input parameters
  4. The version of enrich you are using

The more detail the better!

1 Like

So I think the problem it is with the file permissions/ownership.

This is my Dockerfile:

FROM snowplow/stream-enrich-kinesis:2.0.1
ENV USER="snowplow"
ENV GROUP="snowplow"
COPY ./application.conf /snowplow/configuration
USER root
RUN chown -R snowplow:snowplow /snowplow
USER snowplow
CMD [ "--config", "/snowplow/configuration/application.conf"]

AWS Fargate Task build with Terraform:

......
container_definitions = <<DEFINITION
[
    {
           "name": var.enricher_image_name}",
           "image": ecr_repository_url:var.version",
           "command": [
               "--config",
               "/snowplow/configuration/application.conf",
               "--resolver",
               "dynamodb:var.region/var.enricher_config_table/resolver",
               "--enrichments",
               "dynamodb:var.region/var/enricher_config_table/enrichment"
               ],
             .....................
]

After running Terraform apply, task will will be in RUNNING status, but if I am checking logs I am seeing:
No top-level “enrich” could be found in the configuration"

Now if I am removing, USER snowplow, in Dockerfile, task will run as a root USER and run without any problems, and logs will be fullfilled with the necessary files. But I don’t want to run as a root. Any suggestions where my problem it is?

Problem has been solved. In the dockerfile, this is the right command to copy and changing ownership to snowplow user, without switching to root layer.

COPY --chown=snowplow:snowplow ./application.conf /snowplow/configuration

Hi @Vitalie_Jicol

It’s great that you solved it, but I’m surpised that your dockerfile looks so complicated. I experimented, and I found this simple docker file works just fine for me:

FROM snowplow/stream-enrich-kinesis:2.0.1
COPY ./config.hocon /snowplow/config.hocon

There was no need to chown any file or switch users.

By the way, at snowplow we mount the config files into the container at run time, rather than at build time. You can see an example of this in our terraform module for stream enrich

2 Likes

yes you are right, problem was with the docker file. Wasn’t set correctly initially.