Запустите команду CLI для контейнера ECS Fargate
Как можно выполнить команду CLI в контейнере, который использует ECS/Fargate?
5 ответов
Как уже упоминалось в этом ответе ( Как я могу запускать команды в работающем контейнере в AWS ECS с использованием Fargate), вы не можете сделать это из-за того, что AWS не предоставляет вам доступ к базовой инфраструктуре.
AWS запустила Amazon ECS Exec, который позволяет напрямую взаимодействовать с контейнерами: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html.
Как я знаю, и имея опыт работы с ECS, вам не разрешено это делать. aws не дает вам доступа к базовым ресурсам.
если вы используете конфигурацию fargate + EC2, то также нет доступа к EC2.
Я не знаю, пытаетесь ли вы этого достичь, но при желании вы можете запустить команду для нового контейнера, который вы создаете для случая по правилу CloudWatch.
Достаточно будет создать новое определение задачи и указать команду для выполнения (в примере выполнения команды Laravel)
ECSReputationSchedulerTask:
Type: AWS::ECS::TaskDefinition
Properties:
Cpu: 256
ExecutionRoleArn: !ImportValue ECSTaskExecutionRole
Family: TaskDefinitionFamily
Memory: 512
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
ContainerDefinitions:
-
Command:
- "php"
- "/home/application/artisan"
- "execute:operation"
Name: 'MySchedulerContainer'
...
а затем сослаться на него в правиле CloudWatch (к сожалению, этого пока нельзя сделать с помощью CloudFormation)
Возможно, вы сможете написать в своем контейнере скрипт для выполнения команды cli, но вы не можете использовать ssh в контейнере. Если вы можете вызвать .sh
файл из CMD
Команда в Dockerfile, команда cli будет выполняться до тех пор, пока на образе docker установлен aws-cli.
В Dockerfile обязательно запустите pip3 install awscli --upgrade --user
прежде чем вызывать ваш скрипт, который содержит команды cli.
В качестве альтернативы вы можете использовать boto3 для Python или AWS SDK для JavaScript, которые имеют исчерпывающую документацию и позволяют запускать все команды, которые вы могли бы выполнить через cli