Yes we are using ECS.
this is the dockerfile we are using.
cat Dockerfile
ARG THIS_REDASH_VERSION=latest
FROM redash/redash:${THIS_REDASH_VERSION}
Have to do this again as it goes “out of scope” above
ARG THIS_REDASH_VERSION=latest
ENV THIS_REDASH_VERSION=${THIS_REDASH_VERSION}
Set to root and install stuff
USER root
RUN pip install credstash cx_Oracle
RUN apt-get update &&
apt-get install libaio1 &&
apt-get clean && rm -rf /var/lib/apt/lists/*
COPY oracle-patch-v5.0.2 /tmp/oracle-patch-v5.0.2
RUN patch -p1 < /tmp/oracle-patch-v5.0.2
COPY admin-patch /tmp/admin-patch
RUN patch -p1 < /tmp/admin-patch
ARG ORACLE_VERSION=unknown-oracle
ENV ORACLE_VERSION={ORACLE_VERSION}
COPY {ORACLE_VERSION} /opt/oracle/{ORACLE_VERSION}/
RUN echo /opt/oracle/{ORACLE_VERSION} > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig
ENV TNS_ADMIN=/opt/oracle/{ORACLE_VERSION}/network/admin
RUN chown redash:redash {TNS_ADMIN}
Now set things up for our custom launch
COPY entrypoint /entrypoint
Put back the user
USER redash
ENTRYPOINT ["/entrypoint"]
At the end since this changes with every build (almost)
ARG TTAM_VERSION=latest
ENV TTAM_VERSION=${TTAM_VERSION}
build-container:
[ -z “$(ORACLE_VERSION)” ] && echo “You must set $$ORACLE_VERSION” && exit 1;
docker build --build-arg THIS_REDASH_VERSION=(THIS_REDASH_VERSION) --build-arg ORACLE_VERSION=(ORACLE_VERSION) --build-arg TTAM_VERSION=(TTAM_VERSION) -t (REPO_PARAMS):$(TTAM_VERSION) .
push-container:
aws ecr get-login --registry-ids (DOCKER_REGISTRY_ID) | sed -e 's/ -e none / /' | sh && \
docker tag (REPO_PARAMS):(TTAM_VERSION) (DOCKER_REGISTRY)/(REPO_PARAMS):(TTAM_VERSION) &&
docker push (DOCKER_REGISTRY)/(REPO_PARAMS):$(TTAM_VERSION)
task definition as below:
Define the Fargate tasks
ServerTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: !Ref ‘ServiceName’
Cpu: !Ref ‘ContainerCpu’
Memory: !Ref ‘ContainerMemory’
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
ExecutionRoleArn: !Ref ECSTaskExecutionRole
TaskRoleArn: !Ref ECSTaskRole
ContainerDefinitions:
- Name: !Ref ‘ServiceName’
Command:
- server
Cpu: !Ref ‘ContainerCpu’
Memory: !Ref ‘ContainerMemory’
Image: !Ref ‘ImageUrl’
PortMappings:
- ContainerPort: !Ref ContainerPort
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-create-group: true
awslogs-region: !Ref “AWS::Region”
awslogs-group: !Sub “{AWS::StackName}"
awslogs-stream-prefix: server
Environment:
- Name: PYTHONUNBUFFERED
Value: 0
- Name: REDASH_DATE_FORMAT
Value: YYYY-MM-DD
- Name: REDASH_LOG_LEVEL
Value: !Ref RedashLogLevel
- Name: REDASH_REDIS_URL
Value: !Sub
- "redis://{RedisEndpoint}/0”
- RedisEndpoint: !ImportValue “redash-redis-ConfigurationEndpoint”
- Name: DB_HOSTNAME
Value: !Ref DBHostname
- Name: REDASH_WEB_WORKERS
Value: 4
- Name: REDASH_DISABLED_QUERY_RUNNERS
Value: !Ref RedashDisabledQueryRunners
- Name: REDASH_ADDITIONAL_QUERY_RUNNERS
Value: !Ref RedashAdditionalQueryRunners
- Name: REDASH_ENABLED_DESTINATIONS
Value: !Ref RedashDestinations
- Name: REDASH_HOST
Value: !Ref LoadBalancerRecord
- Name: REDASH_MAIL_DEFAULT_SENDER
Value: donotreply@xxxxxx.com
WorkerTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: !Ref ‘ServiceName’
Cpu: !Ref ‘ContainerCpu’
Memory: !Ref ‘ContainerMemory’
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
ExecutionRoleArn: !Ref ECSTaskExecutionRole
TaskRoleArn: !Ref ECSTaskRole
ContainerDefinitions:
- Name: !Ref ‘ServiceName’
Command:
- scheduler
Cpu: !Ref ‘ContainerCpu’
Memory: !Ref ‘ContainerMemory’
Image: !Ref ‘ImageUrl’
PortMappings:
- ContainerPort: !Ref ContainerPort
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-create-group: true
awslogs-region: !Ref “AWS::Region”
awslogs-group: !Sub “{AWS::StackName}"
awslogs-stream-prefix: worker
Environment:
- Name: PYTHONUNBUFFERED
Value: 0
- Name: REDASH_DATE_FORMAT
Value: YYYY-MM-DD
- Name: REDASH_LOG_LEVEL
Value: !Ref RedashLogLevel
- Name: REDASH_REDIS_URL
Value: !Sub
- "redis://{RedisEndpoint}/0”
- RedisEndpoint: !ImportValue “redash-redis-ConfigurationEndpoint”
- Name: DB_HOSTNAME
Value: !Ref DBHostname
- Name: QUEUES
Value: queries,scheduled_queries,celery
- Name: WORKERS_COUNT
Value: 2
- Name: REDASH_DISABLED_QUERY_RUNNERS
Value: !Ref RedashDisabledQueryRunners
- Name: REDASH_ADDITIONAL_QUERY_RUNNERS
Value: !Ref RedashAdditionalQueryRunners
- Name: REDASH_ENABLED_DESTINATIONS
Value: !Ref RedashDestinations
- Name: REDASH_HOST
Value: !Ref LoadBalancerRecord
- Name: REDASH_MAIL_DEFAULT_SENDER
Value: donotreply@xxxxx.com