从命令行将无服务器容器部署到云
Fargate是用于将容器部署到 AWS Fargate 的命令行界面。使用Fargate ,开发人员可以轻松操作 Fargate 服务,包括:部署应用程序(镜像和环境变量)、监控部署、查看容器日志、重启和扩展。
您可以使用curl实用程序脚本或从发布页面下载二进制文件来安装最新的稳定CLI。安装后,您将获得fargate
命令。
curl -s get-fargate.turnerlabs.io | sh
如果您想安装最新的预发行版,请使用以下命令:
curl -s get-fargate.turnerlabs.io | RELEASE=develop sh
默认情况下,fargate 使用us-east-1,因为这是 AWS Fargate 可用的单一区域。 CLI 接受 --region 参数以供将来使用,并将遵循AWS_REGION和AWS_DEFAULT_REGION环境设置。请注意,指定所有必需服务均不可用的区域将返回错误。
请参阅区域表,了解哪些区域提供哪些服务的详细信息。
Fargate 使用 AWS SDK for Go 构建,它在以下位置查找凭证:
环境变量
共享凭证文件
EC2 实例配置文件
有关更多信息,请参阅 AWS SDK for Go 文档中的指定凭证。
指定参数的方法有多种。每个项目优先于其下面的项目:
CLI 参数(例如--cluster my-cluster
)
环境变量(例如FARGATE_CLUSTER=my-cluster
)
fargate.yml
(例如,如下)
cluster : my-cluster
service : my-service
task : my-task
rule : my-event-rule
verbose : false
nocolor : true
旗帜 | 短的 | 默认 | 描述 |
---|---|---|---|
- 簇 | -c | ECS集群名称 | |
- 地区 | 美国东部1 | AWS 区域 | |
--无颜色 | 错误的 | 禁用颜色输出 | |
--详细 | -v | 错误的 | 详细输出 |
服务管理在 AWS Fargate 上运行的长期容器实例。如果您的容器因任何原因退出,服务调度程序将重新启动您的容器并确保您的服务运行所需数量的任务。服务可以与负载均衡器配合使用,以在服务中的任务之间分配流量。
旗帜 | 短的 | 默认 | 描述 |
---|---|---|---|
- 服务 | -s | ECS服务名称 |
fargate service list
列出服务
fargate service deploy [--image <docker-image>]
将新镜像部署到服务
可以通过 --image 标志指定要在服务中使用的 Docker 容器映像。
fargate service deploy [--file docker-compose.yml]
将 docker compose 文件中定义的映像、环境变量和机密部署到服务
将 docker 镜像和 docker compose 文件中定义的环境变量作为一个单元一起部署。请注意,环境变量和机密将替换为撰写文件中的内容。
可以将机密定义为 docker compose 文件扩展字段x-fargate-secrets
下的键值对。要使用扩展字段,撰写文件版本必须至少为2.4
(对于 2.x 系列)或至少为3.7
(对于 3.x 系列)。
这允许您在本地运行docker-compose up
来运行您的应用程序,就像在 AWS 中运行一样。请注意,虽然 docker-compose yaml 配置支持多种选项,但仅将映像和环境变量部署到 Fargate。如果 docker compose 文件定义了多个容器,您可以使用标签aws.ecs.fargate.deploy: 1
来指示您要部署哪个容器。例如:
version : " 3.7 "
services :
web :
build : .
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-service:0.1.0
ports :
- 80:5000
environment :
FOO : bar
BAZ : bam
env_file :
- hidden.env
x-fargate-secrets :
QUX : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : 1
redis :
image : redis
fargate service info
检验服务
显示服务的扩展信息,包括负载均衡器配置、活动部署、环境变量和机密。
部署显示正在运行的服务的活动版本。如果服务由于部署或更新配置(例如 CPU、内存或环境变量)而发生转换,则会显示多个部署。
fargate service logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--time] [--no-prefix]
显示服务中任务的日志
使用 --follow 选项实时返回服务日志的特定片段或尾部日志。日志以其日志流名称为前缀,格式为“fargate/<service-name>/<task-id>”。
Follow 将继续运行并返回日志,直到被 Control-C 中断。如果传递了--follow,则无法指定--end。
通过 --task 标志传递任务 ID,可以返回服务中特定任务的日志。多次传递 --task 和任务 ID 以便从多个特定任务检索日志。
可以通过传递 --start 和 --end 选项以及时间表达式来请求特定的日志窗口。时间表达式可以是持续时间或时间戳:
您可以通过 --filter 标志传递过滤器表达式来过滤特定术语的日志。传递单个术语以搜索该术语,传递多个术语以搜索包含所有术语的日志消息。有关更多详细信息,请参阅 CloudWatch Logs 文档。
--time 在输出中包含日志时间戳
--no-prefix 从输出中排除日志流前缀
fargate service ps
列出服务正在运行的任务
fargate service scale <scale-expression>
扩展服务中的任务数量
通过给定的比例表达式更改要在服务中运行的所需任务的数量。比例表达式可以是绝对数字,也可以是用符号(例如 +5 或 -2)指定的增量。
fargate service env set [--env <key=value>] [--file <pathname>]
[--secret <key=valueFrom>] [--secret-file <pathname>]
设置环境变量和秘密
必须通过 --env、--file、--secret 或 --secret-file 标志至少指定一个环境变量或机密。您可以通过在每个变量之前重复 --env 来在命令行上指定任意数量的变量,或者将多个变量放入文本文件中,每行一个,并使用 --file 和/或 --secret-file 指定文件名。
文件中的每个 --env 和 --secret 参数字符串或行必须采用“key=value”的形式,并且“=”周围没有引号,也没有空格,除非您希望值中出现文字前导空格。此外,“key”端必须是合法的 shell 标识符,这意味着它必须以 ASCII 字母 AZ 或下划线开头,并且仅包含字母、数字和下划线。
每个 --secret 标志的“key=value”中的“值”应将 ARN 引用到 AWS Secrets Manager 密钥或 AWS Systems Manager Parameter Store 参数。
fargate service env unset --key <key-name>
取消设置环境变量和机密
取消设置通过 --key 标志指定的环境变量或机密。多次指定 --key 和键名以取消设置多个变量。
fargate service env list
显示环境变量
旗帜 | 短的 | 默认 | 描述 |
---|---|---|---|
- 中央处理器 | 为每个任务分配的 CPU 单元数量 | ||
- 记忆 | -m | 为每个任务分配的 MiB 数量 |
fargate service update [--cpu <cpu-units>] [--memory <MiB>]
更新服务配置
CPU 和内存设置分别使用 --cpu 和 --memory 标志指定为 CPU 单位和兆字节。每 1024 个 CPU 单元相当于一个 vCPU。 AWS Fargate 仅支持某些 CPU 和内存配置组合:
CPU(CPU单元) | 内存 (MiB) |
---|---|
256 | 512、1024 或 2048 |
第512章 | 1024 到 4096(以 1GiB 为增量) |
1024 | 2048 到 8192(以 1GiB 为增量) |
2048 | 4096 到 16384(以 1GiB 为增量) |
4096 | 8192 到 30720(以 1GiB 为增量) |
必须至少指定 --cpu 或 --memory 之一。
fargate service restart
重启服务
为服务创建一组新任务并停止以前的任务。例如,如果您的服务需要重新加载从外部源缓存的数据,这非常有用。
旗帜 | 短的 | 默认 | 描述 |
---|---|---|---|
- 任务 | -t | 任务定义系列 |
任务是容器的一次性执行。您的任务实例将一直运行,直到您通过 AWS API、AWS 管理控制台手动停止它们,或者直到它们因任何原因被中断。
fargate task register [--image <docker-image>]
[-e KEY=value -e KEY2=value] [--env-file dev.env]
[--secret KEY3=valueFrom] [--secret-file secrets.env]
根据任务系列的最新版本为指定的 docker 映像、环境变量或密钥注册新的任务定义,并返回新的版本号。
可以通过 --image 标志指定新任务定义中使用的 Docker 容器映像。
可以使用一个或多个--env
标志或--env-file
标志来指定环境变量。
可以使用一个或多个--secret
标志或--secret-file
标志来指定机密。
fargate task register [--file docker-compose.yml]
使用 docker compose 文件中定义的映像、环境变量和密钥注册新的任务定义。请注意,环境变量将替换为 compose 文件中的内容。
可以将机密定义为 docker compose 文件扩展字段x-fargate-secrets
下的键值对。要使用扩展字段,撰写文件版本必须至少为2.4
(对于 2.x 系列)或至少为3.7
(对于 3.x 系列)。
如果 docker compose 文件定义了多个容器,您可以使用标签aws.ecs.fargate.deploy: 1
来指示您要部署哪个容器。
fargate task describe
描述命令以 Docker Compose 格式描述任务定义。 Docker 镜像、环境变量、秘密和目标端口是映射的元素。
此命令对于查看task register
、 service deploy
或service env set
命令所做的更改非常有用。它还可用于在本地运行任务定义以进行调试或故障排除。
fargate task describe -t my-app > docker-compose.yml
docker-compose up
您可以使用fargate.yml
文件、 FARGATE_TASK
环境变量或使用-t
标志(包括可选修订号)来指定任务定义系列。
fargate task describe -t my-app
fargate task describe -t my-app:42
输出示例:
version : " 3.7 "
services :
app :
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-app:1.0
ports :
- published : 8080
target : 8080
environment :
AWS_REGION : us-east-1
ENVIRONMENT : dev
FOO : bar
x-fargate-secrets :
KEY : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : " 1 "
fargate task logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--container-name] [--time] [--no-prefix]
显示任务日志
假设 cloudwatch 日志组具有以下约定: fargate/task/<task>
,其中task
是通过--task
、fargate.yml 或环境变量选项指定的
使用 --follow 选项实时返回任务日志或尾部日志的特定片段。日志以其日志流名称为前缀,格式为fargate/<container-name>/<task-id>.
--container-name
允许您在任务定义中指定要获取日志的容器(默认为app
)
Follow 将继续运行并返回日志,直到被 Control-C 中断。如果传递了--follow
则无法指定--end
。
通过--task
标志传递任务 ID 可以返回特定任务的日志。多次传递--task
和任务 ID 以便从多个特定任务检索日志。
可以通过传递--start
和--end
选项以及时间表达式来请求特定的日志窗口。时间表达式可以是持续时间或时间戳:
您可以通过--filter
标志传递过滤器表达式来过滤特定术语的日志。传递单个术语以搜索该术语,传递多个术语以搜索包含所有术语的日志消息。
--time
在输出中包含日志时间戳
--no-prefix
从输出中排除日志流前缀
旗帜 | 短的 | 默认 | 描述 |
---|---|---|---|
- 规则 | -r | CloudWatch 事件规则 |
events
命令提供了用于使用 CloudWatch Events 的子命令(计划任务等)
fargate events target --revision <revision>
通过更新规则目标的EcsParameters.TaskDefinitionArn
,“部署”(导致下一个事件规则调用运行新版本)对 CloudWatch 事件规则的任务定义修订。
典型的 CI/CD 系统可能会执行以下操作:
REVISION=$(fargate task register -i 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:${VERSION}-${CIRCLE_BUILD_NUM} -e FOO=bar)
fargate events target -r ${REVISION}