2017-06-02 173 views
0

由于某些原因,环境变量(尽管我在ECS任务中配置了它们)未在运行容器中设置。我错过了什么?为什么这些值是空的?AWS ECS未设置环境变量

我有以下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' 

,我使用泊坞窗图像这是https://github.com/puckel/docker-airflow叉子。该entrypoint的图像检查环境变量如下:

#!/usr/bin/env bash 

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

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

$MYSQL_*变量被设置为默认,如果他们没有在泊坞窗运行命令设置。

当我使用下面的配置从docker-compose运行容器的图像,它的工作原理和环境变量都设置:

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 

而在我entrypoint.sh以下命令:

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

日志此输出:

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

但是检查我的CloudWatch日志显示了该输出为默认值:

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

但我可以ssh到EC2主机上,运行docker inspect [container_id]并验证环境变量设置:如果我跑

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" 
    } 
}, 

而且:

$ docker exec [container-id] echo $MYSQL_HOST 

输出是空

回答

0

你的任务d定义定义env变量MYQL_HOST。你在码头工作者中做到了这一点。只是CF,修复它,它应该没问题。