Josh Lloyd
07/13/2021, 8:32 PM[EcsRunLauncher] Launching run in task arn:aws:ecs:us-east-1:...:task/dagster-cluster/... on cluster arn:aws:ecs:us-east-1:...:cluster/dagster-cluster
It’s been several minutes now and nothing has happened. I’ll have to terminate it manually.
I checked the cloudwatch logs and I saw a new run
log stream that gave an error after 3 lines:
Error: Got unexpected extra arguments (dagster api execute_run {...})
this is an abbreviated version of the error, it lists all the arguments (which are many) but it doesn’t give any indication which arguments are extrajordan
07/13/2021, 8:38 PMJosh Lloyd
07/13/2021, 8:56 PMCMD
that runs the grpc server dagster api grpc …
could that cause an issue? I can’t imagine I can get around having that in the dockerfile.Josh Lloyd
07/13/2021, 8:57 PMjordan
07/13/2021, 9:05 PMjordan
07/13/2021, 9:08 PMCMD
or ENTRYPOINT
) with the overridden command.
Got unexpected extra arguments
is actually coming from Click https://github.com/pallets/click/blob/ddcabdd4f22f438c0c963150b930d0d09b04dea7/src/click/core.py#L1385
And all of our Dagster CLIs are written with the framework. So I suspect it’s actually doing dagster api grpc ... dagster api execute_run ...
and seeing the overridden command as extra arguments to the grpc command.Josh Lloyd
07/13/2021, 9:18 PMCMD
out of the dockerfile, and put it in the task definition, and redeployed the pipeline container, but to no avail. I get the same errorjordan
07/13/2021, 9:21 PMJosh Lloyd
07/13/2021, 9:24 PMecs_task_definition_meltano = aws.ecs.TaskDefinition(
resource_name='ecs_task_definition_meltano',
family='meltano-fargate-task',
memory='512',
cpu='256',
network_mode='awsvpc',
requires_compatibilities=['FARGATE'],
execution_role_arn=iam_role_task_execution.arn,
task_role_arn=iam_role_task.arn,
container_definitions=Output.all(
ecr_meltano=ecr_registry_meltano.repository_url,
grp_name=logs_dagster.name,
).apply(
lambda args: json.dumps(
[
{
'name': 'wdt_meltano',
'image': args['ecr_meltano'],
'command': ["dagster", "api", "grpc", "-h", "0.0.0.0", "-p", "4000", "-d", "orchestrate",
"--python-file", "orchestrate/dagster_repos.py"],
'environment': [
{'name': 'DAGSTER_CURRENT_IMAGE', 'value': args['ecr_meltano']},
{"name": "DAGSTER_POSTGRES_HOSTNAME", "value": "elt_system_db"}
],
'secrets': dagster_postgres_secrets,
"logConfiguration": log_config(args['grp_name']),
"dependsOn": [{"condition": "SUCCESS", "containerName": "meltano_resolvconf_initcontainer"}],
"essential": True
},
{
'name': 'meltano_resolvconf_initcontainer',
'image': "docker/ecs-searchdomain-sidecar:1.0",
'command': ['us-east-1.compute.internal', 'dagster.prod'],
"logConfiguration": log_config(args['grp_name']),
"essential": False
},
]
)
),
)
Josh Lloyd
07/13/2021, 9:25 PMFROM python:3.7-slim
ENV DAGSTER_APP=/opt/dagster/app
WORKDIR $DAGSTER_APP
# Install any requirements
RUN apt-get -y update
RUN apt-get -y install git gcc
COPY orchestrate/pipelines.requirements.txt .
RUN pip install -r pipelines.requirements.txt
# Set $DAGSTER_HOME and copy dagster instance there
ENV DAGSTER_HOME=/opt/dagster/dagster_home
RUN mkdir -p $DAGSTER_HOME
# Add repository code
COPY meltano.yml $DAGSTER_APP
COPY orchestrate $DAGSTER_APP/orchestrate
COPY extract $DAGSTER_APP/extract
COPY transform $DAGSTER_APP/transform
# Install all plugins into the `.meltano` directory
RUN meltano install
RUN meltano invoke dbt:deps
# Pin `discovery.yml` manifest by copying cached version to project root
RUN cp -n .meltano/cache/discovery.yml . 2>/dev/null || :
# Don't allow changes to containerized project files
ENV MELTANO_PROJECT_READONLY 1
# Run dagster gRPC server on port 4000
EXPOSE 4000
# Expose default port used by `meltano ui`
EXPOSE 5000
jordan
07/13/2021, 9:27 PMJosh Lloyd
07/13/2021, 9:29 PMjordan
07/13/2021, 9:34 PMaws ecs describe-tasks --cluster $CLUSTER --tasks $TASK
and aws ecs describe-task-definition --task-definition $TASK_DEFINITION
Perhaps something will shake out when we look at those in detail.Josh Lloyd
07/13/2021, 9:41 PMJosh Lloyd
07/13/2021, 9:41 PM{
"tasks": [
{
"attachments": [
{
"id": "83e9438c-b280-4320-b132-fa3d7ca56532",
"type": "ElasticNetworkInterface",
"status": "DELETED",
"details": [
{
"name": "subnetId",
"value": "subnet-0cdfa5c9f277f103f"
},
{
"name": "networkInterfaceId",
"value": "eni-0d260ab344cc886ff"
},
{
"name": "macAddress",
"value": "0e:52:7a:86:b6:f1"
},
{
"name": "privateDnsName",
"value": "ip-10-171-31-194.ec2.internal"
},
{
"name": "privateIPv4Address",
"value": "10.171.31.194"
}
]
}
],
"availabilityZone": "us-east-1b",
"clusterArn": "arn:aws:ecs:<>:<>:cluster/dagster-cluster",
"connectivity": "CONNECTED",
"connectivityAt": "2021-07-13T15:38:04.608000-06:00",
"containers": [
{
"containerArn": "arn:aws:ecs:<>:<>:container/dagster-cluster/5230dbd6c06642179c2cba75873a2471/419d1b0a-cb47-4cf6-9007-86da2ee13102",
"taskArn": "arn:aws:ecs:<>:<>:task/dagster-cluster/5230dbd6c06642179c2cba75873a2471",
"name": "run",
"image": "<>.<http://dkr.ecr.us-east-1.amazonaws.com/wdt-meltano|dkr.ecr.us-east-1.amazonaws.com/wdt-meltano>",
"imageDigest": "sha256:922f459660a303fa4aef58c52d551071100f3657eff65851f3bf7608d4d6a469",
"runtimeId": "5230dbd6c06642179c2cba75873a2471-718098122",
"lastStatus": "STOPPED",
"exitCode": 2,
"networkBindings": [],
"networkInterfaces": [
{
"attachmentId": "83e9438c-b280-4320-b132-fa3d7ca56532",
"privateIpv4Address": "10.171.31.194"
}
],
"healthStatus": "UNKNOWN",
"cpu": "0"
},
{
"containerArn": "arn:aws:ecs:<>:<>:container/dagster-cluster/5230dbd6c06642179c2cba75873a2471/d5cd096a-0023-4d6f-992f-84e94bd6a857",
"taskArn": "arn:aws:ecs:<>:<>:task/dagster-cluster/5230dbd6c06642179c2cba75873a2471",
"name": "daemon_resolvconf_initcontainer",
"image": "docker/ecs-searchdomain-sidecar:1.0",
"runtimeId": "5230dbd6c06642179c2cba75873a2471-904540743",
"lastStatus": "STOPPED",
"exitCode": 0,
"networkBindings": [],
"networkInterfaces": [
{
"attachmentId": "83e9438c-b280-4320-b132-fa3d7ca56532",
"privateIpv4Address": "10.171.31.194"
}
],
"healthStatus": "UNKNOWN",
"cpu": "0"
}
],
"cpu": "256",
"createdAt": "2021-07-13T15:38:00.588000-06:00",
"desiredStatus": "STOPPED",
"enableExecuteCommand": false,
"executionStoppedAt": "2021-07-13T15:38:57.885000-06:00",
"group": "family:dagster-run",
"healthStatus": "UNKNOWN",
"lastStatus": "STOPPED",
"launchType": "FARGATE",
"memory": "512",
"overrides": {
"containerOverrides": [
{
"name": "daemon_resolvconf_initcontainer"
},
{
"name": "run",
"command": [
"dagster",
"api",
"execute_run",
"{\"__class__\": \"ExecuteRunArgs\", \"instance_ref\": {\"__class__\": \"InstanceRef\", \"compute_logs_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"LocalComputeLogManager\", \"config_yaml\": \"base_dir: /opt/dagster/dagster_home/storage\\n\", \"module_name\": \"dagster.core.storage.local_compute_log_manager\"}, \"custom_instance_class_data\": null, \"event_storage_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"PostgresEventLogStorage\", \"config_yaml\": \"postgres_db:\\n db_name:\\n env: DAGSTER_POSTGRES_DB\\n hostname:\\n env: DAGSTER_POSTGRES_HOSTNAME\\n password:\\n env: DAGSTER_POSTGRES_PASSWORD\\n port: 5432\\n username:\\n env: DAGSTER_POSTGRES_USER\\n\", \"module_name\": \"dagster_postgres.event_log\"}, \"local_artifact_storage_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"LocalArtifactStorage\", \"config_yaml\": \"base_dir: /opt/dagster/dagster_home/\\n\", \"module_name\": \"dagster.core.storage.root\"}, \"run_coordinator_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"QueuedRunCoordinator\", \"config_yaml\": \"{}\\n\", \"module_name\": \"dagster.core.run_coordinator\"}, \"run_launcher_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"EcsRunLauncher\", \"config_yaml\": \"{}\\n\", \"module_name\": \"dagster_aws.ecs\"}, \"run_storage_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"PostgresRunStorage\", \"config_yaml\": \"postgres_db:\\n db_name:\\n env: DAGSTER_POSTGRES_DB\\n hostname:\\n env: DAGSTER_POSTGRES_HOSTNAME\\n password:\\n env: DAGSTER_POSTGRES_PASSWORD\\n port: 5432\\n username:\\n env: DAGSTER_POSTGRES_USER\\n\", \"module_name\": \"dagster_postgres.run_storage\"}, \"schedule_storage_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"PostgresScheduleStorage\", \"config_yaml\": \"postgres_db:\\n db_name:\\n env: DAGSTER_POSTGRES_DB\\n hostname:\\n env: DAGSTER_POSTGRES_HOSTNAME\\n password:\\n env: DAGSTER_POSTGRES_PASSWORD\\n port: 5432\\n username:\\n env: DAGSTER_POSTGRES_USER\\n\", \"module_name\": \"dagster_postgres.schedule_storage\"}, \"scheduler_data\": {\"__class__\": \"ConfigurableClassData\", \"class_name\": \"DagsterDaemonScheduler\", \"config_yaml\": \"{}\\n\", \"module_name\": \"dagster.core.scheduler\"}, \"settings\": {\"telemetry\": null}}, \"pipeline_origin\": {\"__class__\": \"PipelinePythonOrigin\", \"pipeline_name\": \"google_analytics_pipeline\", \"repository_origin\": {\"__class__\": \"RepositoryPythonOrigin\", \"code_pointer\": {\"__class__\": \"FileCodePointer\", \"fn_name\": \"widen_elt_repository\", \"python_file\": \"orchestrate/dagster_repos.py\", \"working_directory\": \"orchestrate\"}, \"container_image\": \"<http://974251539015.dkr.ecr.us-east-1.amazonaws.com/wdt-meltano\|974251539015.dkr.ecr.us-east-1.amazonaws.com/wdt-meltano\>", \"executable_path\": \"/usr/local/bin/python\"}}, \"pipeline_run_id\": \"56566ceb-6ced-42b0-b265-755167a5d0e9\"}"
]
}
],
"inferenceAcceleratorOverrides": []
},
"platformVersion": "1.4.0",
"pullStartedAt": "2021-07-13T15:38:13.685000-06:00",
"pullStoppedAt": "2021-07-13T15:38:50.434000-06:00",
"startedAt": "2021-07-13T15:38:55.879000-06:00",
"stopCode": "EssentialContainerExited",
"stoppedAt": "2021-07-13T15:39:21.359000-06:00",
"stoppedReason": "Essential container in task exited",
"stoppingAt": "2021-07-13T15:39:07.919000-06:00",
"tags": [],
"taskArn": "arn:aws:ecs:<>:<>:task/dagster-cluster/5230dbd6c06642179c2cba75873a2471",
"taskDefinitionArn": "arn:aws:ecs:<>:<>:task-definition/dagster-run:4",
"version": 6,
"ephemeralStorage": {
"sizeInGiB": 20
}
}
],
"failures": []
}
Josh Lloyd
07/13/2021, 9:45 PMJosh Lloyd
07/13/2021, 9:45 PM{
"taskDefinition": {
"taskDefinitionArn": "arn:aws:ecs:<>:<>:task-definition/dagster-run:4",
"containerDefinitions": [
{
"name": "daemon_resolvconf_initcontainer",
"image": "docker/ecs-searchdomain-sidecar:1.0",
"cpu": 0,
"portMappings": [],
"essential": false,
"command": [
"<>.compute.internal",
"dagster.prod"
],
"environment": [],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/dagster-cluster",
"awslogs-region": "<>",
"awslogs-stream-prefix": "dagster-service"
}
}
},
{
"name": "run",
"image": "<>.<http://dkr.ecr.us-east-1.amazonaws.com/wdt-meltano|dkr.ecr.us-east-1.amazonaws.com/wdt-meltano>",
"cpu": 0,
"portMappings": [],
"essential": true,
"entryPoint": [
"dagster-daemon",
"run"
],
"environment": [
{
"name": "DAGSTER_POSTGRES_HOSTNAME",
"value": "elt_system_db"
}
],
"mountPoints": [],
"volumesFrom": [],
"secrets": [
{
"name": "DAGSTER_POSTGRES_DB",
"valueFrom": "arn:aws:ssm:<>:<>:parameter/elt_system_db_dbname"
},
{
"name": "DAGSTER_POSTGRES_USER",
"valueFrom": "arn:aws:ssm:<>:<>:parameter/elt_system_db_user"
},
{
"name": "DAGSTER_POSTGRES_PASSWORD",
"valueFrom": "arn:aws:ssm:<>:<>:parameter/elt_system_db_password"
}
],
"dependsOn": [
{
"containerName": "daemon_resolvconf_initcontainer",
"condition": "SUCCESS"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/dagster-cluster",
"awslogs-region": "<>",
"awslogs-stream-prefix": "dagster-service"
}
}
}
],
"family": "dagster-run",
"taskRoleArn": "arn:aws:iam::<>:role/dagsterEcsTaskRole",
"executionRoleArn": "arn:aws:iam::<>:role/dagsterEcsTaskExecutionRole",
"networkMode": "awsvpc",
"revision": 4,
"volumes": [],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.ecr-auth"
},
{
"name": "com.amazonaws.ecs.capability.task-iam-role"
},
{
"name": "ecs.capability.container-ordering"
},
{
"name": "ecs.capability.execution-role-ecr-pull"
},
{
"name": "ecs.capability.secrets.ssm.environment-variables"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2",
"FARGATE"
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512",
"registeredAt": "2021-07-13T15:37:59.773000-06:00",
"registeredBy": "arn:aws:sts::<>:assumed-role/dagsterEcsTaskRole/505f328f691a4439ad3a1554bfcebb38"
}
}
Josh Lloyd
07/13/2021, 9:45 PMjordan
07/13/2021, 9:48 PMecs/cluster
and ecs/task_arn
Josh Lloyd
07/13/2021, 9:49 PMJosh Lloyd
07/13/2021, 9:59 PMjordan
07/13/2021, 10:04 PM"entryPoint": [
"dagster-daemon",
"run"
],
ah, it looks the task definition indeed has an entrypoint. It looks like it’s not your grpc server image that it’s using to generate its task, it’s your daemon image. Does that Dockerfile have an entrypoint defined?jordan
07/13/2021, 10:05 PMJosh Lloyd
07/13/2021, 10:05 PMjordan
07/13/2021, 10:06 PMJosh Lloyd
07/13/2021, 10:07 PMJosh Lloyd
07/13/2021, 10:07 PMcommand
instead, would that fix it, do you think?jordan
07/13/2021, 10:09 PMJosh Lloyd
07/13/2021, 10:16 PMjordan
07/13/2021, 10:45 PM