Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Windows 容器入门

本教程演示如何手动在 Amazon ECS 上运行 Windows 容器。为 Windows 容器实例创建一个集群,在此集群中启动一个或多个容器实例,注册一个使用 Windows 容器映像的任务定义,创建一个使用该任务定义的服务,然后查看容器运行的示例网页。

如果您更希望使用提供的 AWS CloudFormation 模板自动设置集群,请参阅 Windows 容器 AWS CloudFormation 模板

步骤 1:创建 Windows 集群

您应为 Windows 容器创建新集群。Linux 容器实例无法运行 Windows 容器,反之亦然,因此最好是通过在单独的集群中运行 Windows 容器实例和 Linux 容器实例来正确地放置任务。在本教程中,您为 Windows 容器创建一个名为 windows 的集群。

使用 AWS 管理控制台创建群集

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 从导航栏中,选择要使用的区域。

  3. 在导航窗格中,选择 Clusters

  4. Clusters 页面上,选择 Create Cluster

  5. Cluster name 中,为群集输入名称 (在本示例中,群集的名称是 windows)。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

  6. 依次选择 Create an empty clusterCreate

使用 AWS CLI 创建群集

  • 您可以使用下面的命令通过 AWS CLI 创建群集:

    Copy
    aws ecs create-cluster --cluster-name windows

步骤 2:在集群中启动 Windows 容器实例

您可以使用 AWS 管理控制台启动 Windows 容器实例,如本主题中所述。开始之前,请确保您已完成Amazon ECS 的设置中的步骤。启动实例之后,您可以使用实例来运行任务。

启动 Windows 容器实例

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 从导航栏中,选择要使用的区域。

  3. 从控制台控制面板中,选择 Launch Instance

  4. Choose an Amazon Machine Image (AMI) 页面上,选择 Quick Start

  5. 为容器实例选择 Microsoft Windows Server 2016 Base with Containers AMI。

  6. Choose an Instance Type (选择实例类型) 页面上,您可以选择实例的硬件配置。默认情况下会选择 t2.micro 实例类型。您选择的实例类型决定了可用于运行您的任务的资源。

  7. 选择 Next: Configure Instance Details

  8. Configure Instance Details 页面上,根据是否允许从公共 Internet 访问实例来设置 Auto-assign Public IP 复选框。如果您的实例应可从 Internet 进行访问,请验证 Auto-assign Public IP 字段是否已设置为 Enable。如果不应可从 Internet 访问您的实例,请选择 Disable

    注意

    容器实例需要外部网络访问才能与 Amazon ECS 服务终端节点进行通信,因此,如果您的容器实例没有公共 IP 地址,则它们必须使用网络地址转换 (NAT) 来提供此访问。有关更多信息,请参阅 Amazon VPC 用户指南 中的 NAT 实例

  9. Configure Instance Details 页面上,选择您在Amazon ECS 的设置中为您的容器实例创建的 ecsInstanceRole IAM role 值。

    重要

    如果您未使用适当的 IAM 权限启动容器实例,则您的 Amazon ECS 代理将不会连接到集群。有关更多信息,请参阅 Amazon ECS 容器实例 IAM 角色

  10. 使用提供的用户数据 PowerShell 脚本配置 Windows 容器实例。默认情况下,此脚本将容器实例注册到您之前创建的 windows 集群。要在另一个集群而非 windows 中启动,可将以下脚本中的 ECS_CLUSTER 环境变量的值替换为您的集群名称。

    注意

    要将任务的 IAM 角色功能用于 Windows 容器,可将以下脚本中的 ECS_ENABLE_TASK_IAM_ROLE 环境变量的值替换为 true。有关更多信息,请参阅 任务的 Windows IAM 角色

    要为容器代理流量使用 HTTP 代理,请将下面几行添加到下面的脚本中 (Set agent env variables... 部分中):

    Copy
    $proxy = "proxy_ip_address_and_port" [Environment]::SetEnvironmentVariable("HTTP_PROXY", $proxy, "Machine") [Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")
    Copy
    <powershell> ## The string 'windows' should be replaced with your cluster name # Set agent env variables for the Machine context (durable) [Environment]::SetEnvironmentVariable("ECS_CLUSTER", "windows", "Machine") [Environment]::SetEnvironmentVariable("ECS_ENABLE_TASK_IAM_ROLE", "false", "Machine") $agentVersion = 'v1.14.3' $agentZipUri = "https://s3.amazonaws.com/amazon-ecs-agent/ecs-agent-windows-$agentVersion.zip" $agentZipMD5Uri = "$agentZipUri.md5" ### --- Nothing user configurable after this point --- $ecsExeDir = "$env:ProgramFiles\Amazon\ECS" $zipFile = "$env:TEMP\ecs-agent.zip" $md5File = "$env:TEMP\ecs-agent.zip.md5" ### Get the files from S3 Invoke-RestMethod -OutFile $zipFile -Uri $agentZipUri Invoke-RestMethod -OutFile $md5File -Uri $agentZipMD5Uri ## MD5 Checksum $expectedMD5 = (Get-Content $md5File) $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $actualMD5 = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($zipFile))).replace('-', '') if($expectedMD5 -ne $actualMD5) { echo "Download doesn't match hash." echo "Expected: $expectedMD5 - Got: $actualMD5" exit 1 } ## Put the executables in the executable directory. Expand-Archive -Path $zipFile -DestinationPath $ecsExeDir -Force ## Start the agent script in the background. $jobname = "ECS-Agent-Init" $script = "cd '$ecsExeDir'; .\amazon-ecs-agent.ps1" $repeat = (New-TimeSpan -Minutes 1) $jobpath = $env:LOCALAPPDATA + "\Microsoft\Windows\PowerShell\ScheduledJobs\$jobname\ScheduledJobDefinition.xml" if($(Test-Path -Path $jobpath)) { echo "Job definition already present" exit 0 } $scriptblock = [scriptblock]::Create("$script") $trigger = New-JobTrigger -At (Get-Date).Date -RepeatIndefinitely -RepetitionInterval $repeat -Once $options = New-ScheduledJobOption -RunElevated -ContinueIfGoingOnBattery -StartIfOnBattery Register-ScheduledJob -Name $jobname -ScriptBlock $scriptblock -Trigger $trigger -ScheduledJobOption $options -RunNow Add-JobTrigger -Name $jobname -Trigger (New-JobTrigger -AtStartup -RandomDelay 00:1:00) </powershell> <persist>true</persist>
  11. 选择 Next: Add Storage

  12. Add Storage 页面上,为您的容器实例配置存储。Windows OS 和容器映像非常大(对于 Windows 服务器核心基础层来说,约为 9 GiB),仅几个映像和容器就会快速达到启动向导所使用的默认 30 GiB 卷大小。更大的根卷大小(例如,200 GiB)允许实例上具有更多的容器和映像。

    您可以选择增大或减小实例的卷大小以满足您的应用程序需求。

  13. 选择 Review and Launch

  14. Review Instance Launch (查看实例启动) 页面上的 Security Groups (安全组) 下,您将看到向导为您创建并选择了安全组。默认情况下,您应通过端口 3389 来实现 RDP 连接。如果您希望容器接收来自 Internet 的入站流量,则也需要开放这些端口。

    1. 选择 Edit security groups

    2. Configure Security Group 页面上,确保选择 Create a new security group 选项。

    3. 为容器可能需要的任何其他端口添加规则(在本演练中,示例任务定义稍后将使用端口 8000,因此您应对 Anywhere 开放此端口),并选择 Review and Launch

  15. Review Instance Launch 页面上,选择 Launch

  16. Select an existing key pair or create a new key pair 对话框中,选择 Choose an existing key pair,然后选择您在开始设置时创建的密钥对。

    准备好后,选中确认字段,然后选择 Launch Instances

  17. 确认页面会让您知道自己的实例已启动。选择 View Instances 以关闭确认页面并返回控制台。

  18. Instances (实例) 屏幕上,您可以查看您实例的状态。启动实例只需很短的时间。启动实例时,其初始状态为 pending。实例启动后,其状态变为 running,并且会收到一个公有 DNS 名称。(如果 Public DNS 列已隐藏,请选择 Show/Hide 图标,然后选择 Public DNS。)

  19. 在启动实例后,您可以在 Amazon ECS 控制台中查看集群,了解容器实例是否已注册到该集群。

    注意

    将 Windows 实例注册到集群最多需要花费 15 分钟的时间。

步骤 3:注册 Windows 任务定义

您必须先注册任务定义,然后才能在 Amazon ECS 集群中运行 Windows 容器。以下任务定义示例在具有 microsoft/iis 容器映像的容器实例的端口 80 上显示一个简单网页。

使用 AWS 管理控制台注册示例任务定义

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航窗格中,选择 Task Definitions

  3. Task Definitions 页面上,选择 Create new Task Definition

  4. 滚动到页面底部,选择 Configure via JSON

  5. 将下面的示例任务定义 JSON 粘贴到文本区域 (替换预填充的 JSON),然后选择 Save

    Copy
    { "family": "windows-simple-iis", "containerDefinitions": [ { "name": "windows_sample_app", "image": "microsoft/iis", "cpu": 100, "entryPoint":["powershell", "-Command"], "command":["New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:\\ServiceMonitor.exe w3svc"], "portMappings": [ { "protocol": "tcp", "containerPort": 80, "hostPort": 80 } ], "memory": 500, "essential": true } ] }
  6. 验证您的信息并选择 Create

使用 AWS CLI 注册示例任务定义

  1. 创建名为 windows-simple-iis.json 的文件。

  2. 使用您偏好的文本编辑器打开此文件,并将上面的示例 JSON 添加到此文件,然后保存文件。

  3. 使用 AWS CLI 运行以下命令以将任务定义注册到 Amazon ECS。

    注意

    确保将 AWS CLI 配置为使用 Windows 集群所在的区域,或者将 --region your_cluster_region 选项添加到命令。

    Copy
    aws ecs register-task-definition --cli-input-json file://windows-simple-iis.json

步骤 4:使用您的任务定义创建服务

在注册任务定义后,您可以使用任务定义在集群中放置任务。以下过程使用任务定义创建一个服务并将一个任务放置在集群中。

使用 AWS 管理控制台从任务定义创建服务

  1. Task Definition: windows-simple-iis 注册确认页面上,依次选择 ActionsCreate Service

  2. Create Service 页面上,输入以下信息,然后选择 Create Service

    • Cluster: 窗口

    • Number of tasks: 1

    • Service name: windows-simple-iis

使用 AWS CLI 从任务定义创建服务

  • 使用 AWS CLI 运行以下命令来创建服务。

    Copy
    aws ecs create-service --cluster windows --task-definition windows-simple-iis --desired-count 1 --service-name windows-simple-iis

步骤 5:查看您的服务

当您的服务在集群中启动任务后,您可以查看服务并在浏览器中打开 IIS 测试页面以验证容器是否正在运行。

注意

下载容器实例并提取 Windows 容器基础层最多需要花费 15 分钟的时间。

查看您的服务

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. Clusters 页面上,选择 windows 集群。

  3. Services 选项卡上,选择 windows-simple-iis 服务。

  4. Service: windows-simple-iis 页面上,选择服务中的任务的任务 ID。

  5. Task 页面上,展开 iis 容器以查看其信息。

  6. 在容器的 Network bindings 中,您应看到 External Link IP 地址和端口组合链接。选择该链接以在浏览器中打开 IIS 测试页面。

     Windows 简单 IIS 测试页面