aws ecs 使用copilot快速创建ecs集群环境并部署服务

news2024/11/25 16:25:01

参考资料

  • https://github.com/aws/copilot-cli

  • https://aws.github.io/copilot-cli/

  • https://github.com/aws-samples/amazon-ecs-cli-sample-app

  • https://ecsworkshop.com/microservices/frontend/#deploy-frontend-0

ecs的服务部署从头开始需要进行以下操作

  • 创建vpc等网络基础设施
  • 创建ecs集群
  • 创建任务定义
  • 创建ecs服务
  • (可选)关联elb
  • (可选)集成pipeline

以上各项手动完成比较费事,可以使用官方的copilot工具一键部署

关于应用和环境配置清单,https://aws.github.io/copilot-cli/docs/manifest/overview/

创建application并部署environment

应用程序是一组相关的服务、环境和管道的集合

img

  • copilot init会初始化应用程序
  • Copilot 将该应用程序存储在 SSM 参数中
  • 所有相关资源用copilot-app标记
copilot app init
  # --domain my-awesome-app.aws                     \
  # --resource-tags department=MyDept,team=MyTeam   \
  # --permissions-boundary my-pb-policy

自动使用cfn创建资源如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-znk0r512-1678514390016)(assets/image-20230311124608081.png)]

初始化环境,可以选择现有vpc环境

$ copilot env init
Environment name: dev
Credential source: [profile default]
Default environment configuration? No, I'd like to import existing resources
VPC: vpc-086xxxxxxxxe2ae
Public subnets: subnet-0270xxxxxxxxcdd (default-public-2b), subnet-077cxxxxxxxxxx37 (default-public-1a)
Private subnets: subnet-02axxxxxxxb9a087 (default-private-nat-1a), subnet-0a7xxxxxxxxxxfa (default-private-nat-2b)
✔ Wrote the manifest for environment dev at copilot/environments/dev/manifest.yml
- Update regional resources with stack set "test-copilot-infrastructure"  [succeeded]  [0.0s]
- Update regional resources with stack set "test-copilot-infrastructure"  [succeeded]          [126.9s]
  - Update resources in region "cn-north-1"                               [create complete]    [126.2s]
    - KMS key to encrypt pipeline artifacts between stages                [create complete]    [121.7s]
    - S3 Bucket to store local artifacts                                  [create in progress]  [99.9s]
✔ Proposing infrastructure changes for the test-copilot-dev environment.
- Creating the infrastructure for the test-copilot-dev environment.  [create complete]  [30.7s]
  - An IAM Role for AWS CloudFormation to manage resources           [create complete]  [11.5s]
  - An IAM Role to describe resources in your environment            [create complete]  [10.5s]
✔ Provisioned bootstrap resources for environment dev in region cn-north-1 under application test-copilot.
Recommended follow-up actions:
  - Update your manifest copilot/environments/dev/manifest.yml to change the defaults.
  - Run `copilot env deploy --name dev` to deploy your environment.

创建如下资源

  • kms密钥
  • s3桶和桶策略,看样子是用来配置codepiple项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqQekrcj-1678514390018)(assets/image-20230311124921986.png)]

查看env的配置文件

$ cat copilot/environments/dev/manifest.yml

name: dev
type: Environment
network:
  vpc:
    id: vpc-086x2ae
    subnets:
      public:
        - id: subnet-027xxxxcdd
        - id: subnet-077xa37
      private:
        - id: subnet-02axeb9a087
        - id: subnet-0a7x79fa
# Configure the load balancers in your environment, once created.
# http:
#   public:
#   private:
observability:
  container_insights: true

此时只是在app中配置了环境还未部署,下面在应用中创建环境

$ copilot env deploy --name dev
✔ Proposing infrastructure changes for the test-copilot-dev environment.
- Creating the infrastructure for the test-copilot-dev environment.          [update complete]  [59.3s]
  - An ECS cluster to group your services                                    [create complete]  [6.1s]
  - A security group to allow your containers to talk to each other          [create complete]  [0.0s]
  - A private DNS namespace for discovering services within the environment  [create complete]  [43.2s]

仍旧通过cfn创建,包括如下资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VHQif2WZ-1678514390019)(assets/image-20230311133133910.png)]

创建和部署service

只需要一行命令,选择backend不会创建elb

Copilot 将构建您的映像,将其推送到 Amazon ECR,并建立所有基础设施,以可伸缩和安全的方式运行您的服务

$ copilot init
Note: It's best to run this command in the root of your Git repository.
Welcome to the Copilot CLI! We're going to walk you through some questions
to help you get set up with a containerized application on AWS. An application is a collection of
containerized services that operate together.

Workload type: Backend Service
Service name: test-copilot-backend
Dockerfile: ./Dockerfile
Ok great, we'll set up a Backend Service named test-copilot-backend in application test-copilot listening on port 80.

✔ Proposing infrastructure changes for stack test-copilot-infrastructure-roles
✔ The directory copilot will hold service manifests for application test-copilot.

✔ Wrote the manifest for service test-copilot-backend at copilot/test-copilot-backend/manifest.yml
Your manifest contains configurations like your container size and port (:80).

- Update regional resources with stack set "test-copilot-infrastructure"  [succeeded]        [10.4s]
  - Update resources in region "cn-north-1"                               [update complete]  [7.8s]
    - ECR container image repository for "test-copilot-backend"           [create complete]  [1.4s]
All right, you're all set for local development.
Deploy: No

No problem, you can deploy your service later:
- Run `copilot env init` to create your environment.
- Run `copilot deploy` to deploy your service.
- Be a part of the Copilot ✨community✨!
  Ask or answer a question, submit a feature request...
  Visit 👉 https://aws.github.io/copilot-cli/community/get-involved/ to see how!

当前目录结构如下

  • 环境和service分别在不同路径下
  • 默认使用当前路径下Dockerfile,也可以指定使用image

关于服务的具体配置

https://aws.github.io/copilot-cli/docs/concepts/services/

$ tree
.
├── copilot
│   ├── environments
│   │   └── dev
│   │       └── manifest.yml
│   └── test-backend-copilot
│       └── manifest.yml
└── Dockerfile

关于svc的支持很强大,有两个功能比较好

  • 直接查看任务日志

  • 生成cfn模板

  • exec调试

$ copilot svc
Commands for services.
Services are long-running ECS or App Runner services.

Usage
  copilot svc [command]

Available Commands
  init        Creates a new service in an application.
  ls          Lists all the services in an application.
  package     Print the AWS CloudFormation template of a service.
  deploy      Deploys a service to an environment.
  delete      Deletes a service from an application.
  show        Shows info about a deployed service per environment.
  status      Shows status of a deployed service.
  logs        Displays logs of a deployed service.
  exec        Execute a command in a running container part of a service.
  pause       Pause running App Runner service.
  resume      Resumes a paused service.

部署服务,自动执行以下操作

  • Build your image locally
  • Push to your service’s ECR repository
  • Convert your manifest file to CloudFormation
  • Package any additional infrastructure into CloudFormation
  • Deploy your updated service and resources to CloudFormation
$ copilot deploy
# 省略打包推送
✔ Proposing infrastructure changes for stack test-copilot-dev-test-copilot-backend
- Creating the infrastructure for stack test-copilot-dev-test-copilot-backend  [create in progress]  [69.3s]
  - Service discovery for your services to communicate within the VPC          [create complete]    [0.0s]
  - Update your environment's shared resources                                 [create complete]    [2.3s]
  - An IAM role to update your environment stack                               [create complete]    [14.7s]
  - An IAM Role for the Fargate agent to make AWS API calls on your behalf     [create complete]    [8.8s]
  - A CloudWatch log group to hold your service logs                           [create complete]    [0.0s]
  - An ECS service to run and maintain your tasks in the environment cluster   [create in progress]  [36.7s]
    Deployments
               Revision  Rollout        Desired  Running  Failed  Pending
      PRIMARY  1         [in progress]  1        0        0       1
  - An ECS task definition to group your containers and run them on ECS        [create complete]    [0.0s]
  - An IAM role to control permissions for the containers in your tasks        [create complete]    [12.5s]

在控制台中查看部署,任务已经运行中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J7UmSeU7-1678514390020)(assets/image-20230311135223667.png)]

尝试访问

$ curl -I 172.31.21.251
HTTP/1.1 200 OK
Server: nginx/1.23.3
Date: Sat, 11 Mar 2023 05:53:29 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 13 Dec 2022 15:53:53 GMT
Connection: keep-alive
ETag: "6398a011-267"
Accept-Ranges: bytes

在copilot查看日志,和控制台一致

$ copilot svc logs
Found only one deployed service test-copilot-backend in environment dev
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: using the "epoll" event method
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: nginx/1.23.3
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: OS: Linux 5.10.162-141.675.amzn2.x86_64
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:4096
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: start worker processes
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: start worker process 35
copilot/test-copilot-back 2023/03/11 05:51:37 [notice] 1#1: start worker process 36
copilot/test-copilot-back 127.0.0.1 - - [11/Mar/2023:05:53:23 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.79.1" "-"
copilot/test-copilot-back 127.0.0.1 - - [11/Mar/2023:05:53:29 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.79.1" "-"

尝试直接exec到fargate中

$ copilot svc exec
Found only one deployed service test-copilot-backend in environment dev
Execute `/bin/sh` in container test-copilot-backend in task 0236ca7a1d9c419599f152d261b5b7e2.

Starting session with SessionId: ecs-execute-command-0620ce6158bed3e99
# ls
bin   dev                  docker-entrypoint.sh  home  lib64           media  opt   root  sbin  sys  usr
boot  docker-entrypoint.d  etc                   lib   managed-agents  mnt    proc  run   srv   tmp  var

看到我们的linuxparams中配置是空的,不知道是怎么实现的居然能够直接exec

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lRXMrqip-1678514390021)(assets/image-20230311135618749.png)]

删除服务

$ copilot svc delete

总结一下

  • copilot很大程度上降低了配置ecs服务的复杂性
  • 易用性方面要显著低于cdk
  • 比起v1的ecs cli要要用得多
  • 打印日志和exec调试能够节省排查故障的时间
  • 后续可以尝试通过copilot创建pipeline项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS中的事件、DOM操作

一、事件1.1 事件介绍事件: 就是发生在浏览器(页面)上一件事,键盘事件,鼠标事件,表单事件,加载事件等等1.2 事件绑定方式事件要想发生,就得将事件和标签先绑定一个完整的事件有三部分事件源(标签)什么事(事件)响应(动作效果)事件绑定,其实就是事件和标签绑定方式1: 事件源,事件…

IBM Semeru Windows 下的安装 JDK 17

要搞清楚下载那个版本,请参考文章:来聊聊 OpenJDK 和 JVM 虚拟机下载地址semeru 有认证版和非认证版,主要是因为和 OpenJ9 的关系和操作系统的关系而使用不同的许可证罢了,本质代码是一样的。在 Windows 下没有认证版,…

[计算机组成原理(唐朔飞 第2版)]第三章 系统总线(学习复习笔记)

3.1 总线的基本概念 计算机系统的五大部件之间的互连方式有两种 各部件之间使用单独的连线,称为分散连接将各部件连到一组公共信息传输线上,称为总线连接 总线是连接多个部件的信息传输线,是各部件共享的传输介质。 当多个部件与总线相连时&…

【java基础】LinkedList源码解析

文章目录基本介绍构造器基础方法linkFirstlinkLastlinkBeforeunlinkFirstunlinkLastunlinknodeindexOf方法分析总结基本介绍 在java中,LinkedList就是使用双向链表存储元素,既然是链表,那么也就知道了该数据结构擅长添加和删除。对于需要频繁…

线程等待/休眠/状态及 Runnable 和 Callable 的简单使用及原理

关于线程和进程的基本概念☛操作系统中线程和进程的概念理解 这篇文章已经有了很详细的解释, 接下来主要来讲讲线程等待与线程休眠 / 线程的几种状态 / Runnable 和 Callable 与 Thread 的概念和区别及 Executor 框架是什么样的. 关于线程1 线程等待与线程休眠2 线程一共有哪些…

[洛谷-P3698][CQOI2017]小Q的棋盘

一、问题 题目描述 小 Q 正在设计一种棋类游戏。 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中。某些格点之间有连线,棋子只能在有连线的格点之间移动。整个棋盘上共有 VVV 个格点,编号为 0,1,2,⋯,V−10,1,2,\cdots, V- 10,1,2,⋯,V−…

【C++知识点】C++11 常用新特性总结

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…

EasyRcovery16免费的电脑照片数据恢复软件

电脑作为一种重要的数据储存设备,其中保存着大量的文档,邮件,视频,音频和照片。那么,如果电脑照片被删除了怎么办?今天小编给大家介绍,误删除的照片从哪里可以找回来,误删除的照片如…

win10打印机拒绝访问解决方法

一直以来,在安装使用共享打印机打印一些文件的时候,会遇到错误提示:“无法访问.你可能没有权限使用网络资源。请与这台服务器的管理员联系”的问题,那为什么共享打印机拒绝访问呢?别着急,下面为大家带来相关的解决方法…

mysql时区问题

设置mysql容器时间与服务器时间一致 问题背景: 今天测试发现一个问题,时间不一致,当工单入库时,其创建时间和更新时间应该是一样的,即使不一样最多只会错几秒的时间;实际上两个时间相差的大概8小时&#…

青少年学AI,Amazon DeepRacer有何魔力?

导读:北京名校中学生可以根据兴趣开发AI模型甚至发表论文,偏远地区的校长还在犹豫“人工智能教育,中考会考吗?高考会加分吗?”教育鸿沟由来已久,绝非仅靠某些企业或教育机构可以扭转,但我们至少…

maven仓库的配置

下载 官网下载:https://maven.apache.org/download.cgi 2. 配置maven环境 右键电脑 ->属性 -> 高级系统设置 -> 环境变量 -> 系统变量-新建 变量名:MAVEN_HOME 变量值为maven的文件安装地址 编辑Path系统变量 新建:%MAVE…

132.《render-props, Hoc,自定义hooks 详解》

文章目录render-props 模式props 方式children 方式(推荐)Hoc(高阶组件)使用步骤示例props 丢失解决方案自定义 hook1.只执行一次2.防抖hook高阶组件与自定义hook有什么区别相同点不同点React 中代码逻辑复用有三种方式,render-props, Hoc&am…

Altium Designer(AD)软件使用记录05-PCB叠层设计

目录Altium Designer(AD)软件使用记录05-PCB叠层设计一、正片层和负片层的介绍1、正片层(Signal)2、负片层(Plane)3、内电层的分割实现二、正片层和负片层的内缩设计1、负片设置内缩20H原则2、正片铺铜设置内缩1、设置规则2、重新铺铜三、AD的层叠设计四、叠层设计需要注意的问…

计算机组成原理_总线标准

计算机组成原理总目录总线标准 总线标准是系统与各模块、模块与模块之间的一个互连的标准,就像我们用汉语来相互交流一样。 1. 系统总线 ISA总线的扩展插槽,其颜色一般为黑色,比PCI接口插槽要长些,位于主板的最下端。 可插接显卡&…

Java中的深克隆与浅克隆

浅克隆: 实现Cloneable接口即可实现,浅克隆只对象内部的基础数据类型(包括包装类)被克隆,引用数据类型(负责对象)会被使用引用的方式传递。 简单来说,就是浅克隆属性如果是复杂对象…

java多线程(二五)ReentrantReadWriteLock读写锁详解(1)

一、读写锁简介 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去…

有关3dmax对齐技巧的那些事

建模操作中,对齐是非常常用的一个功能,用好这个对齐功能能够事半功倍,好处我不说了,下面我们这篇博文就来说说3dmax对齐技巧的相关的内容。 文章目录一、点对齐1、样条线中的点对齐2、多边形中的点对齐二、线对齐三、面对齐四、物…

DJI ROS dji_sdk 源码分析|整体框架

DJI ROS dji_sdk 源码分析|整体框架launch文件CMakeLists.txtcpp文件main.cppOSDK 是一个用于开发无人机应用程序的开发工具包,基于OSDK 开发的应用程序能够运行在机载计算机上(如Manifold 2),开发者通过调用OSDK 中指定的接口能够…

计算机网络考研-第一章学

计算机网学习总结第一章计算机系统概述1.1.1 导学1.1.2 操作系统的特征1.2 操作系统的发展与分类1.3 操作系统的运行环境1.3.1 操作系统的运行机制1.3.2 中断和异常1.3.3系统调用:1.3.4 操作系统的体系结构第一章总结第一章计算机系统概述 1.1.1 导学 1.1.2 操作系…