跳转到主要内容

用于在AWS ECS上注册新的任务定义并更新相关服务的辅助工具。

项目描述

ecs-task

ecs-task 是一个有见解但灵活的工具,用于部署到Amazon Web Service的Elastic Container Service

它基于以下前提

  • ECS服务、负载均衡器、自动扩展等由其他地方管理,例如Terraform、Cloudformation等。
  • 部署到ECS被定义为
    1. 使用新的镜像标签更新任务定义
    2. (可选)运行任意数量的单个任务,例如Django数据库迁移。
    3. (可选)更新服务以使用新的任务定义。
    4. (可选)更新Cloudwatch事件目标以使用新的任务定义。
    5. 注销旧的任务定义。
  • 应用程序管理自己的任务/容器定义,并可以将自己部署到预先定义的ECS集群。
  • 回滚的能力非常重要,应该尽可能简单。

安装

pip install ecs-task

(可选,只需将 ecs_task.py 复制到您的项目中,并安装 boto3)。

用法

此模块由一个类组成,ecs_task.ECSTask,该类旨在在您的项目中扩展。基本示例

#!/usr/bin/env python
from ecs_task import ECSTask

class WebTask(ECSTask):
    task_definition = {
        "family": "web",
        "executionRoleArn": EXECUTION_ROLE_ARN,
        "containerDefinitions": [
            {
                "name": "web",
                "image": "my_image:{image_tag}",
                "portMappings": [{"containerPort": 8080}],
                "cpu": 1024,
                "memory": 1024,
            }
        ],
    }
    update_services = [{"service": "web", "cluster": "my_cluster",}]

if __name__ == "__main__":
    WebTask().main()

您可以将此保存为 _ecs/web_dev.py,然后使用 python -m _ecs.web_dev --help 执行它

usage: web_dev.py [-h] {deploy,rollback,debug} ...

ECS Task

positional arguments:
  {deploy,rollback,debug}
    deploy              Register new task definitions using `image_tag`.
                        Update defined ECS Services, Event Targets, and run
                        defined ECS Tasks
    rollback            Deactivate current task definitions and rollback all
                        ECS Services and Event Targets to previous active
                        definition.
    debug               Dump JSON generated for class attributes.

optional arguments:
  -h, --help            show this help message and exit

类属性

ECSTask的子类必须包含一个task_definition才能执行任何操作。其他属性都是可选的。以下属性被设计成通过boto3与AWS API端点进行1对1映射。您提供的值将被作为关键字参数传递给关联的方法,并插入正确的任务定义。任何接受列表的属性都可以对给定的API进行多次调用。

还有一些其他属性可用

  • active_task_count: (int) 部署后保留的活动任务定义的数量。默认为10

  • sns_notification_topic_arn: (str) 当AWS API调用执行时,将接收消息的SNS主题的ARN。这可以用于触发通知或执行与部署相关的其他任务。消息格式为

      {
        "client": client,  # boto3 client (usually "ecs")
        "method": method,  # method called (e.g., "update_service")
        "input": kwargs,   # method input as a dictionary
        "result": result   # results from AWS API
      }
    
  • notification_method_blacklist_regex (re.Pattern) 要避免发送通知的方法的模式。默认为re.compile(r"^describe_|get_|list_|.*register_task")

命令接口

每个类都旨在通过调用.main()来“执行”。可以在同一文件中使用以下方式调用给定的类实例

if __name__ == "__main__":
    for klass in [WebTask, WorkerTask]:
        klass().main()

调试

仅将每个类的属性值打印到控制台。如果您正在进行某些类继承并想在运行AWS之前验证您拥有的内容,这很有用。

部署

deploy子命令接受一个额外的参数image_tag,它用于更新任务中的任何具有{image_tag}占位符的容器定义。它将

  1. 注册新的任务定义
  2. 运行任务(如run_tasks中定义的)
  3. 更新服务(如update_services中定义的)
  4. 更新事件目标(如events__put_targets中定义的)
  5. 注销任何早于active_task_count(默认为10)的活动任务定义

回滚

  1. 注销最新的活动任务定义
  2. 使用先前活动任务定义更新服务(如update_services中定义的)
  3. 使用先前活动任务定义更新事件目标(如events__put_targets中定义的)

项目详细信息


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

ecs-task-0.3.1.tar.gz (6.2 kB 查看散列)

上传

构建分布

ecs_task-0.3.1-py2.py3-none-any.whl (6.5 kB 查看散列)

上传于 Python 2 Python 3

由以下支持