代码,Docker和部署到AWS EC2容器服务

在Codeship,我们坚信为您提供尽可能多的测试和部署基础结构控制权。 尽管我们负责运行为您的构建提供支持的基础架构,但您应该能够完全控制环境。

为此,我们在过去的一年中一直致力于下一代弹性构建基础架构,即Codeship的未来。 在接下来的几周里,我们将分享有关新系统的很多信息,但是今天我想集中精力进行部署,尤其是与AWS和EC2 Container Service集成。

我们打算通过新基础架构解决的问题之一是为客户提供更加模块化和可组合的构建环境。 为什么要在运行测试的环境中安装仅在部署期间必需的工具? 我们为什么不能构建小型容器,一个插件基础结构(如果需要),然后将那些专用容器插入我们需要它们的构建部分中?

有了Docker作为我们新基础架构的基础,这已经成为可能。 您可以引入任何您想要组成构建环境的容器。 这些可以是官方的Docker容器,由Codeship之类的不同公司甚至您自己提供。

如果您想要一个统一的流程和工具集来在公司范围内部署或测试应用程序,则可以将这些要部署的工具和脚本放入Docker容器中,并在公司的内部版本中使用该容器。 为了帮助您在此模块化环境中部署到AWS,我们创建了一个AWS容器供您使用。

Codeship AWS部署容器

AWS部署容器使您可以插入部署工具,而无需将其包括在测试容器甚至生产容器中。 这样可以使您的容器变小,并专注于它们在构建中需要完成的特定任务。 通过使用AWS部署容器,您可以获得部署到任何AWS服务所需的工具,并且仍然可以灵活地将其适应您的需求。

容器配置是开源的; 您可以在GitHub上的codeship-library / aws-deployment项目中找到它。

在整个文档中,我们将使用codeship/aws-deployment容器与各种AWS服务进行交互。

使用其他工具

尽管我们提供的用于与AWS进行交互的容器为您提供了一种简单而直接的方式来运行您的部署,但这并不是您与AWS服务进行交互的唯一方式。 您可以安装自己的依赖项,编写自己的部署脚本,直接与AWS API对话,或引入第三方工具为您完成此工作。 通过将这些工具安装到Docker容器中并运行它们,您在如何部署到AWS上具有了很大的灵活性。

认证方式

在设置配置文件codeship-services.ymlcodeship-steps.yml ,我们将创建一个加密文件来存储环境变量,包括我们的AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

查看我们的加密环境文件文档,然后将aws-deployment.env.encrypted文件添加到您的存储库中。 该文件需要包含以下文件的加密版本:

AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key

您可以从AWS控制台中的IAM设置获取AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 。 您可以在IAM文档中了解有关此内容的更多信息。 请勿使用提供给您的主要AWS账户的管理密钥,并确保将访问限制为通过IAM进行部署所必需。

服务定义

在通读文档之前,请查看“ 服务”文档页面,以便您对服务的工作方式以及如何将不同的容器包含到特定内部版本中有很好的了解。

codeship-services.yml文件使用codeship/aws-deployment容器并设置加密的环境文件。 为了访问我们正在运行此构建版本的存储库中的文件,我们设置了一个卷,该卷与/deploy共享./ (存储库文件夹)。 通过以下步骤,我们可以访问/deploy/...存储库中的所有文件。

awsdeployment:
  image: codeship/aws-deployment
  encrypted_env_file: aws-deployment.env.encrypted
  volumes:
    - ./:/deploy

使用Codeship和AWS EC2 Container Service进行部署

要与ECS进行交互,您只需使用相应的AWS CLI命令即可。 下面的示例将注册两个新的任务定义,然后更新服务并运行批处理任务。

在以下示例中,我们并行完成了两个任务的部署。 我们的步骤文档可为您提供有关并行化如何工作以及如何使用它来加快构建速度的更多信息。

您可以使用环境变量或命令参数来设置AWS区域或其他参数。 看看他们的环境变量文档

如果您具有用于部署ECS任务的更复杂的工作流程,则可以将这些命令放入脚本中,然后在工作流程中运行该脚本。 然后,您可以停止负载平衡器,正常关闭正在运行的任务或在部署过程中要执行的其他任何操作。

我们正在使用AWS CLI ECS docs中的任务定义。 将以下内容添加到您的codeship-steps.yml

- type: parallel
  steps:
  - type: serial
    steps:
    - service: awsdeployment
      command: aws ecs register-task-definition --cli-input-json file:///deploy/tasks/backend.json
    - service: awsdeployment
      command: aws ecs update-service --service my-backend-service --task-definition backend
  - type: serial
    steps:
    - service: awsdeployment
      command: aws ecs register-task-definition --cli-input-json file:///deploy/tasks/process_queue.json
    - service: awsdeployment
      command: aws ecs run-task --cluster default --task-definition process_queue --count 5
使用脚本将部署结合到各种服务

如果您想以更复杂的方式与各种AWS服务进行交互,可以通过设置部署脚本并在容器内运行该脚本来实现。 以下脚本会将不同的文件上传到S3存储桶中,然后触发ECS上的重新部署。 部署脚本可以通过/deploy访问存储库中的任何文件。 在以下示例中,我们将脚本放入scripts/aws_deployment

# !/bin/bash

# Fail the build on any failed command
set -e

aws s3 sync /deploy/assets s3://my_assets_bucket 
aws s3 sync /deploy/downloadable_resources s3://my_resources_bucket

# Register a new version of the task defined in tasks/backend.json and update
# the currently running instances
aws ecs register-task-definition --cli-input-json file:///deploy/tasks/backend.json 
aws ecs update-service --service my-backend-service --task-definition backend

# Register a task to process a Queue
aws ecs register-task-definition --cli-input-json file:///deploy/tasks/process_queue.json 
aws ecs run-task --cluster default --task-definition process_queue --count 5

以及相应的codeship-steps.yml

- service: awsdeployment
  command: /deploy/scripts/aws_deployment

EC2容器注册表

是的,为了回答您最紧迫的问题,我们将与re:Invent主题演讲中宣布的EC2容器注册表集成。 我们目前正在与ECS团队紧密合作,以完成所有这些工作,并将在注册表集成完成并启动后立即发送更多信息。 作为AWS客户,我们很高兴看到这个全新的,完全托管的Docker容器注册表并自己使用。

结论

在AWS和Codeship,我们秉承的理念是为客户提供强大的基础架构和流程,而不必浪费时间进行维护。 我们希望您能够掌控一切,并全力以赴地开发您的产品。 凭借我们新的Docker基础架构及其所提供的所有优势,包括非常模块化且易于使用的AWS和ECS部署,我们已朝着这个方向迈出了一大步。

我们很高兴开始展示我们去年的成果。 期待更多即将到来。

翻译自: https://www.javacodegeeks.com/2015/10/codeship-docker-and-deployment-to-aws-ec2-container-service.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值