10.2 超越基础设施:部署EagleEye

 
    我们目前已经建立了基础设施,现在可以进入本章的第二节。在本节中,我们将把EagleEye服务部署到Amazon ECS容器中。此工作将要分成两部分来完成。第一部分工作是为那些做事情做到最后丧失耐心的人(如我)而做的,将展示如何将EagleEye手动部署到Amazon实例中。这将有助于了解部署服务的机制,并查看在容器中运行的已部署服务。虽然自己动手手动地部署服务很有趣,但这是不可持续的也是不推荐的。
    这就是第二部分工作发挥作用的地方。在第二部分工作中,我们将人类排除在构建和部署过程之外,使整个构建和部署过程自动化。这是我们的目标结束状态。通过演示如何设计、构建和部署微服务到云,我们将会体验到这种目标状态要优于我们在本书中所介绍的手工方式。
    手动将EagleEye服务部署到ECS
    要手动部署EagleEye服务,要切换一下,离开AWS控制台。为了部署EagleEye服务,我们将使用亚马逊的ECS命令行客户端(https://github.com/aws/amazon-ecs-cli)。安装完ECS命令行客户端之后,需要配置ecs-cli运行时环境,从而完成以下工作。
    (1)使用亚马逊凭据来配置ECS客户端。
    (2)选择客户端将要工作的区域。
    (3)定义ECS客户端将使用的默认ECS集群。
    (4)通过运行ecs-cli configure命令来完成这项工作:
 
            ecs-cli configure --region us-west-1 \
                                        --access-key $AWS_ACCESS_KEY \
                                        --secret-key $AWS_SECRET_KEY \
                                        --cluster spmia-tmx-dev
 
    ecs-cli configure命令将设置集群所在的区域、亚马逊的AWS访问密钥和私密密钥,以及已部署集群的名称(spmia-tmx-dev)。如果读者查看上述命令,会发现我在使用环境变量($AWS_ACCESS_KEY和$AWS_SECRET_KEY)保存我的亚马逊的访问密钥和私密密钥。
 
注意
    
    我选择us-west-1地区纯粹是为了说明。读者可以根据自己所在国家的不同,选择一个更具体的AWS地区。
    接下来,让我们看看如何进行构建。与其他章不同的是,必须要设置构建名称,因为本章中的Maven脚本将在本章稍后建立的构建部署管道中使用。我们将要设置一个名为$BUILD_NAME的环境变量。 $BUILD_NAME环境变量用于标记由构建脚本创建的Docker镜像。切换到从GitHub下载的第10章代码的根目录,并执行以下两条命令:
    export BUILD_NAME=TestManualBuild mvn clean package docker:build
    这将使用位于项目目录的根目录下的父POM来执行Maven构建。建立父pom.xml来构建将在本章中部署的所有服务。Maven代码执行完成后,可以将Docker镜像部署到在10.1.3节中建立的ECS实例。要进行部署,应执行以下命令:
    ecs-cli compose --file docker/common/docker-compose.yml up
    ECS命令行客户端允许开发人员使用Docker-compose文件部署容器。通过允许复用来自桌面开发环境的Docker-compose文件,亚马逊已经大大简化了将服务部署到Amazon ECS的工作。在ECS客户端运行后,可以通过执行以下命令来确认服务正在运行,并发现服务器的IP地址:
 
ecs-cli ps
    图10-14展示了ecs-cli ps命令的输出结果。
 
图10-14 检查已部署服务的状态
    注意从图10-14中输出结果中发现的3件事。
    (1)可以看到已经部署了7个Docker容器,每个Docker容器都运行一个服务。
    (2)可以看到ECS集群的IP地址(54.153.122.116)。
    (3)看起来除端口5555以外还打开了其他端口。然而事实并非如此。图10-14中的端口标识符是Docker容器的端口映射。但是,对外界开放的唯一端口是端口5555。记住,在创建ECS集群时,ECS创建向导创建了一个亚马逊安全组,该安全组只允许来自端口5555的流量。
    我们此时已经成功将第一组服务部署到Amazon ECS客户端。现在让我们看一下如何设计一个构建和部署管道,以便将服务编译、打包和部署到亚马逊云的过程自动化。
    通过调试找出ECS容器无法启动或无法保持运行的原因
 
ECS没有多少工具可用于调试容器无法启动的原因。如果ECS部署的服务在启动或保持运行时遇到问题,就需要通过SSH进入ECS集群来查看Docker日志。为此,需要将端口22添加到ECS集群所运行的安全组,然后使用在设置集群时定义的亚马逊密钥对(参见图10-10),以ec2用户身份通过SSH进入。一旦进入了服务器,就可以通过运行docker ps命令来获得在服务器上运行的所有Docker容器的列表。找到要调试的容器镜像后,可以运行“docker logs –f容器ID”命令来追踪目标Docker容器的日志。
    这是调试应用程序的基本机制,但有时只需要登录到服务器并查看实际的控制台输出来确定发生了什么。
 
 
 
 
posted @ 2019-12-03 11:02  mongotea  阅读(375)  评论(0编辑  收藏  举报