2017-06-02 5 views
0

Pour une raison quelconque, les variables d'environnement, bien que je les ai configurées dans ma tâche ECS, ne sont pas définies dans le conteneur en cours d'exécution. Qu'est-ce que je rate? Pourquoi les valeurs sont-elles vides?Les variables d'environnement AWS ECS ne sont pas définies

Je donne les résultats suivants AWS::ECS::TaskDefinition:

AirflowWebTaskDefinition: 
    Type: AWS::ECS::TaskDefinition 
    Properties: 
    Family: !Join ['', [!Ref 'AWS::StackName', -dl-airflow-web]] 
    ContainerDefinitions: 
    - Name: dl-airflow-web 
     Cpu: '10' 
     Essential: 'true' 
     Image: companyname-docker-snapshot-local.jfrog.io/docker-airflow:1.0 
     Command: ['webserver'] 
     Memory: '1024' 
     LogConfiguration: 
     LogDriver: awslogs 
     Options: 
      awslogs-group: !Ref 'AirflowCloudwatchLogsGroup' 
      awslogs-region: !Ref 'AWS::Region' 
      awslogs-stream-prefix: dl-airflow-web 
     PortMappings: 
     - 
     ContainerPort: 8080 
     Environment: 
     - Name: LOAD_EX 
     Value: n 
     - Name: EXECUTOR 
     Value: Celery 
     - Name: MYQL_HOST 
     Value: !Ref 'RDSDNSName' 
     - Name: MYSQL_PORT 
     Value: !Ref 'RDSPort' 
     - Name: MYSQL_DB 
     Value: !Ref 'AirflowDBName' 
     - Name: USERNAME 
     Value: !Ref 'AirflowDBUser' 
     - Name: PASSWORD 
     Value: !Ref 'AirflowDBPassword' 

Je me sers d'une image docker qui est une fourchette de https://github.com/puckel/docker-airflow. Le entrypoint pour l'image inspecte les variables d'environnement comme suit:

#!/usr/bin/env bash 

AIRFLOW_HOME="/usr/local/airflow" 
CMD="airflow" 
TRY_LOOP="20" 

: ${MYSQL_HOST:="default-mysql"} 
: ${MYSQL_PORT:="3306"} 

Lorsque les $MYSQL_* variables sont définies à un défaut si elles ne sont pas réglées dans la commande d'exécution docker.

Quand je lance l'image du conteneur de docker-compose en utilisant la configuration ci-dessous, il fonctionne et les variables d'environnement sont tous ensemble:

webserver: 
    image: companyname-docker-snapshot-local.jfrog.io/docker-airflow:1.0 
    environment: 
    - LOAD_EX=n 
    - EXECUTOR=Celery 
    - MYSQL_HOST=mysql 
    - MYSQL_PORT=3306 
    - USERNAME=dev-user 
    - PASSWORD=dev-secret-pw 
    - SQS_HOST=sqs 
    - SQS_PORT=9324 
    - AWS_DYNAMODB_ENDPOINT=http://dynamodb:8000 
    ports: 
    - "8090:8080" 
    command: webserver 

Et la commande suivante dans mon entrypoint.sh:

echo "$(date) - Checking for MYSQL (host: $MYSQL_HOST, port: $MYSQL_PORT) connectivity" 

Journaux cette sortie:

Fri Jun 2 12:55:26 UTC 2017 - Checking for MYSQL (host: mysql, port: 3306) connectivity 

Mais inspecter mes journaux CloudWatch montre cette sortie avec les valeurs par défaut:

Fri Jun 2 14:15:03 UTC 2017 - Checking for MYSQL (host: default-mysql, port: 3306) connectivity 

Mais je peux ssh dans l'hôte EC2, exécutez docker inspect [container_id] et vérifiez que les variables d'environnement sont définies:

Config": { 
    "Hostname": "...", 
    "Domainname": "", 
    "User": "airflow", 
    "AttachStdin": false, 
    "AttachStdout": false, 
    "AttachStderr": false, 
    "ExposedPorts": { 
     "5555/tcp": {}, 
     "8080/tcp": {}, 
     "8793/tcp": {} 
    }, 
    "Tty": false, 
    "OpenStdin": false, 
    "StdinOnce": false, 
    "Env": [ 
     "MYSQL_PORT=3306", 
     "PASSWORD=rds-secret-pw", 
     "USERNAME=rds-user", 
     "EXECUTOR=Celery", 
     "LOAD_EX=n", 
     "MYQL_HOST=rds-cluster-name.cluster-id.aws-region.rds.amazonaws.com", 
     "MYSQL_DB=db-name", 
     "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 
     "DEBIAN_FRONTEND=noninteractive", 
     "TERM=linux", 
     "LANGUAGE=en_US.UTF-8", 
     "LANG=en_US.UTF-8", 
     "LC_ALL=en_US.UTF-8", 
     "LC_CTYPE=en_US.UTF-8", 
     "LC_MESSAGES=en_US.UTF-8" 
    ], 
    "Cmd": [ 
     "webserver" 
    ], 
    "Image": "companyname-docker-snapshot-local.jfrog.io/docker-airflow:1.0", 
    "Volumes": null, 
    "WorkingDir": "/usr/local/airflow", 
    "Entrypoint": [ 
     "/entrypoint.sh" 
    ], 
    "OnBuild": null, 
    "Labels": { 
     "com.amazonaws.ecs.cluster": "...", 
     "com.amazonaws.ecs.container-name": "...", 
     "com.amazonaws.ecs.task-arn": "...", 
     "com.amazonaws.ecs.task-definition-family": "...", 
     "com.amazonaws.ecs.task-definition-version": "16" 
    } 
}, 

Et si je lance :

$ docker exec [container-id] echo $MYSQL_HOST 

La sortie est vide

Répondre

0

votre tâche d efinition définit la variable d'environnement MYQL_HOST. Vous avez ce droit dans le docker composer. Juste les FC, réparez-le et ça devrait aller.