ecs动态环境管理器(eden)cli
aws-eden-cli的Python项目详细描述
aws eden cli:ecs动态环境管理器
轻松克隆ECS环境。 为eden提供一个示例ecs服务,eden将对其进行克隆。
eden在cli和terraform模块(lambda和http api)中提供。 您可以在请求打开/关闭时使用来自您选择的ci的http api, 新的提交推动了环境创建的完全自动化。 有关api风格,请参见位于GitHub的eden api。
仅适用于Python3.6+。
用eden开发
要求:
- 使用下面描述的结构在s3 bucket中配置json文件
- 附加目标群的参考ECS服务
- 带有https侦听器的alb
- 将由具有主机头侦听器规则的所有环境重用
- 简单的alb用法
- 没有多路径规则等。
- 每个ECS服务一个ALB
它的功能
创建/删除的资源
伊甸园创造
- ECS任务定义
- 从引用服务克隆
- ALB(ELBV2)目标群
- 从附加到引用服务的目标组克隆的设置
- ECS服务
- 在与参考服务相同的群集中创建
- ALB侦听器规则
- 主机头规则
- 路由53 CNAME记录
- 指向公共alb
- 在配置json文件中添加一个条目
伊甸园删除资源,如上表所示,但顺序相反。
配置json文件
配置文件用于:
-
检查哪些环境存在,它们的端点是
- 告诉客户端应用程序可用的内容
配置文件格式:
{"environments":[{"env":"dev","name":"dev-dynamic-test","api_endpoint":"api-test.dev.example.com"}]}
上面的例子假设config_update_key = api_endpoint
。您可以多次使用多个lambdas/invoke eden cli和不同的更新密钥,以便在单个环境中拥有多个端点。
例如,您可能希望将api、管理工具和前端服务创建为单个环境。您的环境文件可能如下所示:
{"environments":[{"env":"dev","name":"dev-dynamic-test","api_endpoint":"api-test.dev.example.com","admin_endpoint":"admin-test.dev.example.com","frontend_endpoint":"test.dev.example.com"}]}
用法(cli接口)
安装
$ pip3 install aws-eden-cli
$ eden -h
usage: eden [-h] [-p PROFILE] [-c CONFIG_PATH] [-v] {config,create,delete} ...
create similar ecs environments easily.
positional arguments:
{config,create,delete}
config configure eden
create create environment or deploy to existent
delete delete environment
optional arguments:
-h, --help show this help message and exit
-p PROFILE, --profile PROFILE
profile name in eden configuration file
-c CONFIG_PATH, --config-path CONFIG_PATH
eden configuration file path
-v, --verbose
配置
$ eden config --config-bucket-key endpoints.json
$ eden config --config-bucket-name servicename-config
$ eden config --config-update-key api_endpoint
$ eden config --config-name-prefix servicename-dev
$ eden config --domain-name-prefix api
$ eden config --dynamic-zone-id Zxxxxxxxxxxxx
$ eden config --dynamic-zone-name dev.example.com.
$ eden config --master-alb-arn arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxxxx:loadbalancer/app/dev-alb-api-dynamic/xxxxxxxxxx
$ eden config --name-prefix dev-dynamic
$ eden config --reference-service-arn arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:service/dev/dev01-api
$ eden config --target-cluster dev
$ eden config --target-container-name api
# you can also edit ~/.eden/config directly
$ cat ~/.eden/config
[default]
name_prefix = dev-dynamic
reference_service_arn = arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:service/dev/dev01-api
target_cluster = dev
domain_name_prefix = api
master_alb_arn = arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxxxx:loadbalancer/app/dev-alb-api-dynamic/xxxxxxxxxx
dynamic_zone_name = dev.example.com.
dynamic_zone_id = Zxxxxxxxxxxxx
config_bucket_name = servicename-config
config_bucket_key = endpoints.json
config_update_key = api_endpoint
config_env_type = dev
config_name_prefix = servicename-dev
target_container_name = api
# don't forget to check configuration file integrity
$ eden config --check
No errors found
# you can specify multiple profiles in configuration
# and select a profile with -p profile_name
$ eden config --check -p default
No errors found
执行命令
$ eden create --name test --cirn xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/servicename-api-dev:latest
Checking if image xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/servicename-api-dev:latest exists
Image exists
Retrieved reference service arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:service/dev/dev01-api
Retrieved reference task definition from arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task-definition/dev01-api:15
Registered new task definition: arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task-definition/dev-dynamic-test:4
Registered new task definition: arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task-definition/dev-dynamic-test:4
Retrieved reference target group: arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxxxx:targetgroup/dev01-api/9c68a5f91f34d9a4
Existing target group dev-dynamic-test not found, will create new
Created target group arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxxxx:targetgroup/dev-dynamic-test/1c68c9e4c711a1f4
ELBv2 listener rule for target group arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxxxx:targetgroup/dev-dynamic-test/1c68c9e4c711a1f4 and host api-test.dev.example.com does not exist, will create new listener rule
ECS Service dev-dynamic-test does not exist, will create new service
Checking if record api-test.dev.example.com. exists in zone Zxxxxxxxxxxxx
Successfully created CNAME: api-test.dev.example.com -> dev-alb-api-dynamic-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com
Updating config file s3://servicename-config/endpoints.json, environment dev-dynamic-test: api_endpoint -> api-test.dev.example.com
Existing environment not found, adding new
Successfully updated config file
Successfully finished creating environment dev-dynamic-test
$ eden delete --name test
Updating config file s3://servicename-config/endpoints.json, delete environment dev-dynamic-test: api_endpoint -> api-test.dev.example.com
Existing environment found, and the only optional key is api_endpoint,deleting environment
Successfully updated config file
Checking if record api-test.dev.example.com. exists in zone Zxxxxxxxxxxxx
Found existing record api-test.dev.example.com. in zone Zxxxxxxxxxxxx
Successfully removed CNAME record api-test.dev.example.com
ECS Service dev-dynamic-test exists, will delete
Successfully deleted service dev-dynamic-test from cluster dev
ELBv2 listener rule for target group arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxxxx:targetgroup/dev-dynamic-test/1c68c9e4c711a1f4 and host api-test.dev.example.com found, will delete
Deleted target group arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxxxx:targetgroup/dev-dynamic-test/1c68c9e4c711a1f4
Deleted all task definitions for family: dev-dynamic-test, 1 tasks deleted total
Successfully finished deleting environment dev-dynamic-test