ITPub博客

首页 > IT职业 > IT图书 > AWS Fargate – 无服务器化容器解决方案

AWS Fargate – 无服务器化容器解决方案

IT图书 作者:mmmike 时间:2021-09-09 09:35:29 0 删除 编辑

AWS Fargate 是可以与 Amazon ECS结合使用的技术,让您在运行容器时不需要管理服务器或集群。使用 AWS Fargate,你不需要搭建控制平面,只需选择合适的实例类型,或配置应用程序堆栈的所有其它部分,比如网络、扩展、服务发现、负载均衡,安全组、权限或密钥管理。你只需要构建容器镜像,定义希望它如何运行、在何处运行,并为实际需要的资源付费。Fargate天生与Amazon VPC、自动扩展(Auto Scaling)、弹性负载均衡(ELB)、身份及访问管理(IAM)角色和密钥管理集成起来。AWS花了很多时间让Fargete随时可用于生产环境,制定了确保正常运行时间达到99.99%的服务级别协议(SLA),符合支付卡行业数据安全标准(PCI)、服务组织控制(SOC)、ISO和《健康保险可携性及责任性法案》(HIPAA)等法规或标准。

目前,Amazon ECS 具有两种模式:Fargate 启动类型和 EC2 启动类型。如果使用 Fargate 启动类型,您只需将应用程序打包到容器中,指定 CPU 和内存需求,选择awsvpc网络模型和 IAM 策略,然后直接启动应用程序。如果使用EC2 启动类型,您可以对运行容器应用程序的基础设施进行更精细的服务器级控制。Amazon ECS负责跟踪集群中的所有 CPU、内存及其他资源,并根据您指定的资源要求查找最适合运行容器的服务器。无论你使用Kubernetes、Mesos、Rancher、Nomad、ECS还是其他任何系统,有了Fargate,唯一要管理的是仅仅是应用程序本身的逻辑。AWS Fargate终于让容器在云计算的环境里发挥地淋漓尽致。

本文所涉及到的内容主要是围绕着AWS Fargate 启动类型,我们将演示如何使用AWS Cloud9进行代码编辑和提交,配合CodeCommit、CodeBuild、CodePipeline、Amazon ECS,基于Fargate进行容器应用的持续集成和持续部署,对外暴露ALB负载均衡,Fargate与DynamoDB进行增删改查等数据库操作。

图片描述

一、使用Fargate运行容器

Fargate可以自定义CPU和内存大小的计算资源,但不需要维护和管理底层的计算实例资源。接下来我们将使用Amazon ECS集群,并用AWS Fargate启动类型来运行容器。 点击: https://console.aws.amazon.com/ecs/home?region=us-east-1#/firstRun ,如下图所示,一个ECS集群可以启动多个Service,一个Service可以定义多个Task Definition,一个Task里面可以跑一个或者多个Container。

图片描述

选择现有的sample-app的模板,网络模型选择awsvpc模式,在Task Definition中,你可以指定Task资源CPU和内存的大小。

图片描述

在这里,我们先不使用ALB负载均衡,后面的实验中我们会加上这部分内容。

图片描述

输入集群的名字,取名为workshop。审核所有信息之后启动集群。

图片描述

图片描述

图片描述

查看Task状态,从一开始的PROVISIONING,到PENDING,最后变成RUNNING状态。

图片描述

点击Task ID号: b956092f-4962-4342-bada-8e20802a6c44,在网络部分中可以看到网卡信息、私有IP、公有IP,以及Mac地址。

图片描述

在浏览器输入公有IP地址,可以查看到httpd所在的应用已经部署成功。

图片描述

二、启动Cloud9编码和提交代码

图片描述

Cloud9背后运行的环境是在一台EC2上面的,VPC选择之前启动ECS集群自动创建的VPC。

图片描述

图片描述

三、 创建容器镜像仓库(Docker Image Repository)

(1)创建容器仓库Amazon ECR

图片描述

输入容器仓库Amazon ECR的名字

图片描述

图片描述

(2)构建Docker镜像,首先打开Cloud9客户端,下载代码

git clone https://github.com/TerrificMao/fargate-workshop-app.git

图片描述

cd fargate-workshop-app/

图片描述

图片描述

(3)根据下载的Dockerfile构建成docker image

docker build — tag 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop .

图片描述

(4)确认构建的image是否成功

docker images 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

图片描述

(5)创建DynamoDB表,Table name取名为quotes,Primary partition key取名为ID。

图片描述

(6)测试生成的docker image

首先安装 jq,jq 是一款命令行下处理 JSON 数据的开软软件,我们将用它查看返回结果。

sudo yum install -y jq

–detach代表容器将会运行在后台模式,–publish指定容器暴露80端口,–volume将AWS配置挂载到容器,使得应用可以访问AWS credentials,最后是docker镜像的地址,在前面创建Amazon ECR时生成。

docker run –detach –publish 80:80 –volume $HOME/.aws:/root/.aws

556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

图片描述

(7)测试应用

curl -Ss http://127.0.0.1/ | jq

图片描述

(8)列出所有DynamoDB数据库里面的内容,此时显示是空的,因为里面还没有数据。

curl -Ss http://127.0.0.1/quotes | jq

图片描述

(9)往DynamoDB里面增加一条数据

curl -Ss http://127.0.0.1/quotes -X PUT -H “Content-Type: application/json” -d ‘{“Text”:”AWS Fargate workshop demo on AWS Global Virginia region,”,”AttributedTo”:”AWS China”}’

图片描述

(10)再次列出所有数据库里面的内容,可以显示内容了

curl -Ss http://127.0.0.1/quotes | jq

图片描述

四. 将docker image推送至AWS ECR

首先登录到ecr

aws ecr get-login –no-include-email –region us-east-1

使用docker push推送

docker push 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

图片描述

五、创建Task Definition

(1)首先创建所需的AWS Role,选择Elastic Container Service,再选择Elastic Container Service Task,

图片描述

(2)选择“创建策略”

图片描述

(3)配置Fargate访问DynamoDB时所需的策略。

图片描述

(4)输入名字“WorkshopAppPolicy”,Policy创建成功

图片描述

图片描述

(5)创建Task Definitions

图片描述

(6)选择Fargate启动类型

图片描述

图片描述

(7)选择Task memory (GB),比如0.5GB;选择Task CPU (vCPU),比如0.25vCPU。然后选择“Add container”。

图片描述

(8)点击“Add Container”,增加一个自定义容器,输入具体信息

图片描述

点击“Create”

图片描述

(9)使用自定义的docker image,增加container成功。

图片描述

六、创建应用层负载均衡ALB

(1)选择应用层负载均衡ALB

图片描述

(2)输入Load Balancer的名字“workshop”,选择对应的VPC。

图片描述

(3)创建ALB的安全组

图片描述

(4)由于Fargate底层不需要考虑计算资源,所以Target Type不需要选择instance,而是选择ip。

图片描述

(5)注册Targets这块先不选择,可以利用ECS为我们去管理Target Group。

图片描述

(6)ALB创建成功,记录DNS Name,比如: workshop-1435838475.us-east-1.elb.amazonaws.com

图片描述

七、创建services选择Fargate启动类型

图片描述

图片描述

现在之前创建的VPC和对应的子网,并启动自动分配IP。

图片描述

配置ALB负载均衡,配置侦听端口和Target Group。

图片描述

暂时不选Auto Scaling

图片描述

启动成功

图片描述

使用命令行检查负载均衡器是否生效

curl -Ss http://workshop-1435838475.us-east-1.elb.amazonaws.com/quotes | jq

图片描述

在浏览器输入ALB公网域名地址,可以通过Container查询到DynamoDB里面的内容。

图片描述

或者可以选择常用的Postman进行调试

图片描述

使用HTTP PUT方式,新增一条信息,插入到DynamoDB

图片描述

查看HTTP PUT的执行结果

图片描述

再次查看结果

图片描述

从控制台检查DynamoDB中的内容

图片描述

至此,Amazon ECS采用Fargate启动类型,已经在VPC内部部署了Container应用,Container对外暴露了ALB负载均衡地址,应用和DynaomDB数据库完成了交互,应用可以通过负载均衡直接对外访问。接下去,我们将介绍如何利用AWS开发运维相关的服务,基于Container进行持续集成和持续部署的方案。

八、基于容器的持续集成/持续部署方案

接下来我们将采用CodeCommmit托管代码,CodeBuild进行容器应用的构建,利用Amazon ECS进行容器编排调度和部署。整个流程如下所示

图片描述

首先创建CodeCommit代码仓库,取名workshop

图片描述

Event type可以先不填写。

图片描述

利用命令行将代码推送到CodeCommit

git config –global credential.helper ‘!aws codecommit credential-helper $@’

git config –global credential.UseHttpPath true

git remote set-url origin https://git-codecommit.us-east-1.amazonaws.com/v1/repos/workshop

git push origin master

图片描述

刷新AWS CodeCommit的控制台,发现代码已经上传。

图片描述

接下去创建CodePipeline。在创建CodePipeline之前,先创建所需要的Role,选择CodeBuild。

图片描述

复制如下Policy的内容,注意将resource内容替换成自己Account ID。

图片描述

{

Json

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:CompleteLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:InitiateLayerUpload",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:us-east-1:556776719183:repository/workshop"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
        }
    ]}输入policy的名字WorkshopBuildPolicy

图片描述

图片描述

当然,在测试阶段,可以赋予一个Admin的权限。(选做)

图片描述

图片描述

接着创建CodePipeline

图片描述

图片描述

图片描述

配置CodeBuild

图片描述

图片描述

配置CodeBuild的环境变量,Name: REPOSITORY_URI,Value: 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

图片描述

看到保持成功信息,接着点击“下一步”。Build provider选择AWS CodeBuild进行构建。

图片描述

部署方式选择Amazon ECS,输入之前创建的集群名字workshop以及Service名字。

图片描述

图片描述

图片描述

图片描述

至此,CodePipeline创建完毕。

图片描述

客户端更改代码

图片描述

推送至AWS CodeCommit仓库

图片描述

CodePipeline自动检测到代码更新

图片描述

自动进入到代码构建阶段

图片描述

自动使用Amazon ECS部署Fargate

图片描述

不到一杯咖啡的时间,通过CodePipeline自动完成整个过程。

图片描述

通过Postman测试新增加的delete方法,首先使用HTTP PUT新增一条记录到DynamoDB。

图片描述

查看HTTP GET刚刚插入的里面的数据,记录返回的ID号: 46311760-3ac9-11e8-82b5-9ba0642ae25e。ID是DynamoDB数据库的主键,根据主键进行HTTP DELETE测试。

图片描述

执行HTTP DELETE接口

图片描述

刷新DynamoDB控制台

图片描述

此时记录被成功删除。

图片描述

至此,通过CodeCommit, CodeBuild, CodePipeline, Amazon ECS在Fargate中部署的代码已经生效,对外暴露负载均衡AWS ALB,并成功与DynamoDB数据库完成了增删改查等基本操作。整个流程大致如下。

图片描述

附: 解决微服务系统的服务发现,可以基于ECS + Route53方案,请参考:

https://aws.amazon.com/cn/blogs/china/ecsroute-53solve-micro-sevice-problem/

AWS技术峰会 2018将于8月9日在北京国家会议中心隆重拉开帷幕。在13:00 – 17:30于一层多功能厅C将会有物联网分论坛,在本论坛中,您将了解 AWS 的 IoT 服务,及聆听 AWS 用户分享基于 AWS 的智能家居、全球智能化物联网及工业互联方面的经验和实践。

想和我们一起#所建不凡#?快来注册#AWS技术峰会2018,前20名注册的小伙伴将可获得 $50亚马逊优惠券,抓住机会,赶快注册吧!https://awssummit.cn?tc=1s016B2uQi




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2872/viewspace-2810881/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-19

  • 博文量
    77
  • 访问量
    550