如何使用cli将项目上传到Amazon ECS

时间:2017-11-08 19:47:05

标签: php amazon-web-services docker amazon-ec2

我正在学习如何自动化项目交付。 我能够创建集群,但我仍然坚持我必须将文件上传到EC2实例的步骤。

现在我正在运行这些命令

ecs-cli up --keypair my_keypair --capability-iam --size 1 --instance-type t2.micro --force

这会创建群集。 然后我为php和nginx创建了docker容器。

ecs-cli compose up

这会创建容器但不包含任何文件。

现在如果我使用SSH手动登录EC2 实例并创建 phpinfo.php 文件,那么我可以在浏览器中查看它,告诉我一切设置正确。但这是手动步骤。如何自动推送项目文件?

可能我不明白这是如何运作的,而且我的方向是错误的。 我看到的所有教程都使用了现成的wordpress图像。我没有部署wordpress图像。我想部署phpinfo.php(例如)。

由于

version: '2'

services:
  nginx:
      image: tutum/nginx
      cpu_shares: 50
      mem_limit: 134217728
      ports:
          - "80:80"
      links:
          - phpfpm
      volumes:
          - /home/ec2-user/nginx/conf:/etc/nginx/sites-available/
          - /home/ec2-user/nginx/conf:/etc/nginx/sites-enabled/
          - /home/ec2-user/public:/var/www/html
  phpfpm:
      image: php-nginx-fpm:7.0.19-37
      cpu_shares: 50
      mem_limit: 134217728
      ports:
          - "9000:9000"
          - "3306:3306"
      volumes:
          - /home/ec2-user/public:/var/www/html

3 个答案:

答案 0 :(得分:3)

由于您正在使用ECS - 弹性容器服务 - 您需要首先对应用程序进行Docker化,然后将生成的Docker映像上传到Amazon ECR:Elastic Container Registry。

为此,您需要进入EC2容器服务 - >注册表并为容器创建存储库。然后配置

在源代码中,您需要有一个构建容器的Dockerfile:从基本映像开始,然后<div ng-switch-when="choice"> <md-input-container class="md-block"> <label style="font-size: 130%; white-space: normal;" for="{{element.section_element_name}}">{{element.section_element_label}}</label> <md-select ng-if="element.mandatoryFlag==1" required id = {{element.section_element_name}} type="selectbasic" value={{element.q_value}} ng-model="element.answer"> <md-option ng-repeat="option in element.section_element_choices" value="{{option.element_choice_value}}" > {{option.element_choice_label}} </md-option> </md-select> <div ng-messages="element.answer.$error" role="alert"> <div ng-message="required" class="my-message">Please provide an answer.</div> </div> <md-select ng-if="element.mandatoryFlag==0" id = {{element.section_element_name}} type="selectbasic" value={{element.q_value}} ng-model="element.answer"> <md-option ng-repeat="option in element.section_element_choices" value="{{option.element_choice_value}}" > {{option.element_choice_label}} </md-option> </md-select> </md-input-container> </div> <md-button ng-click="submit()" class="md-fab md-mini"> <md-tooltip md-direction="top">Save or Submit Form</md-tooltip> <i class="material-icons" style="vertical-align:middle;">send</i> </md-button> 将源代码发送到容器。

完成后,您需要构建构建服务器并推送docker容器,或者只是从您的计算机上手动执行。

您将ECS service设置为使用ECR中的泊坞窗图像,当您执行泊坞机推送到ECR时,您“更新”任务定义,以便抓取最新版本的泊坞窗容器。

您可以通过aws cli在开始时,通过Web控制台本身(单击单击)或通过某些基础架构配置工具(如Cloudformation或Terraform)设置ECS和ECR。无论如何,你的需求都会浮动......

答案 1 :(得分:1)

You can easily achieve this by using S3 bucket. Follow below steps:

  1. Create a bucket in S3 and upload your code to S3 from your local folder either using console or following command

    aws s3 sync . s3://mybucket

  2. Now create an EC2 role in AWS and add S3 Read permission.

  3. Assign this role to your EC2 instance. Now your EC2 has permission to download the code.
  4. Whenever you want your code in EC2 you can download using below command (you can also include this command in your bootstrap script)

    aws s3 sync s3://mybucket .

The good part is S3 sync command will upload/download delta files only. So if you modify only one file and execute above commands, only modified file will be uploaded to S3 and downloaded to EC2.

答案 2 :(得分:0)

你可以使用scp。这使用ssh以更容易自动化的方式复制文件。

scp file <sshtarget>:/path/to/file

如果您愿意更改部署流程,则可以使用CloudFormation模板。

This page描述了如何部署已包含文件的ec2实例。 (查看步骤2下的“文件&#39;”部分)