

# 使用 AWS CLI 创建您的第一个 Express Mode 服务
<a name="express-service-getting-started"></a>

本教程介绍如何使用 AWS AWS CLI 创建 Express Mode 服务应用程序。您将部署一个简单的 Web 应用程序来演示 Express Mode 服务的核心功能。

## 先决条件
<a name="express-service-prerequisites"></a>

在开始之前，请确保您满足以下条件：
+ 具有适当权限的 AWS 账户
+ 已安装并配置 AWS AWS CLI
+ 存储在 Amazon ECR 或私有注册表中的容器映像

## 步骤 1：创建 IAM 角色
<a name="express-service-create-execution-role"></a>

Express Mode 服务需要两个 IAM 角色。任务执行角色允许 Amazon ECS 代表您拉取容器映像并写入日志。请使用下面的策略来创建任务执行角色和基础设施角色：

```
#Create the roles with ECS trust policies
aws iam create-role --role-name ecsTaskExecutionRole \
    --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "ecs-tasks.amazonaws.com"
                },
                "Action": "sts:AssumeRole",
            }
        ]
    }'

aws iam create-role --role-name ecsInfrastructureRoleForExpressServices \ 
    --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowAccessInfrastructureForECSExpressServices",
                "Effect": "Allow",
                "Principal": {
                    "Service": "ecs.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }'
```

```
#Attach the AWS managed policies
aws iam attach-role-policy --role-name ecsTaskExecutionRole \
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
aws iam attach-role-policy --role-name ecsInfrastructureRoleForExpressServices \
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRoleforExpressGatewayServices
```

有关更多信息，请参阅 [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)。

## 步骤 2：创建您的第一个 Express Mode 服务应用程序
<a name="express-service-create-basic"></a>

使用所需的最少参数创建 Express Mode 服务应用程序：

```
aws ecs create-express-gateway-service \
    --primary-container "image"="public.ecr.aws/nginx/nginx:latest" \
    --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \
    --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \
    --monitor-resources
```

此命令会创建具有以下内容的 Express Mode 服务应用程序：
+ 根据映像名称生成的唯一服务名称
+ 1 个 vCPU 和 2 GB 内存
+ 用于 HTTPS 流量的端口 80
+ 基于 CPU 利用率自动扩缩
+ 默认 VPC 和公有子网中面向互联网的应用程序负载均衡器
+ 此服务的唯一 URL，格式为 `servicename.ecs.region.on.aws`

该命令会在资源预置时持续监控资源并返回状态。服务部署完成后，应用程序 URL 即可接收流量。当您中断监控时，系统会返回有关已创建服务的信息，包括服务 ARN 和 URL：

```
{
    "service": {
        "cluster": "arn:aws:ecs:region:123456789012:cluster/default",
        "serviceName": "nginx-1234",
        "serviceArn": "arn:aws:ecs:region:123456789012:service/default/nginx-1234",
        "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices",
        "status": {
            "statusCode": "ACTIVE"
        },
        "createdAt": "UNIXTIMESTAMP"
    }
}
```

## 步骤 3：创建具有自定义设置的 Express Mode 服务应用程序
<a name="express-service-create-custom"></a>

您可以通过指定其他参数来自定义 Express Mode 服务应用程序：

```
aws ecs create-express-gateway-service \
    --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \
    --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \
    --primary-container '{"image":"123456789012.dkr.ecr.region.amazonaws.com/my-app:latest","containerPort":8080,"environment":[{"name":"ENV","value":"production"},{"name":"DEBUG","value":"false"}]}' \
    --service-name "my-web-app" \
    --cpu 2 \
    --memory 4 \
    --health-check-path "/health" \
    --scaling-target '{"minTaskCount":3,"maxTaskCount":100}' \
    --monitor-resources
```

这将创建具有以下内容的应用程序：
+ 自定义名称“my-web-app”
+ 2 个 vCPU 和 4 GB 内存
+ 用于应用程序流量的端口 8080
+ 自定义运行状况检查端点
+ 环境变量
+ 最少 3 个任务、最多 100 个任务用于自动扩缩

## 步骤 4：监控部署
<a name="express-service-monitor-deployment"></a>

`--monitor-resources` 标志适用于对 Express Mode 服务的任何创建、更新或删除调用。但此外，除了变异操作之外，您还可以随时监控服务中的资源。部署时间可能因需要预置的资源而异。一旦状态变为 `ACTIVE`，您的应用程序即可开始接收流量。

```
aws ecs monitor-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/app-23d97h88
```

您还可以查看 Express Mode 服务应用程序的当前配置和状态：

```
aws ecs describe-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/app-23d97h88
```

## 步骤 5：访问应用程序
<a name="express-service-access-application"></a>

当 Express Mode 服务应用程序处于活动状态时，请使用提供的 URL 访问该应用程序。URL 格式如下：

```
https://<service-name>.ecs.<region>.on.aws/
```

例如：

```
https://app-23d97h88.ecs.us-west-2.on.aws/
```

您的应用程序当前正在运行且具有以下功能：
+ 自动 SSL/TLS 终止
+ 跨多个可用区的负载均衡
+ 基于 CPU 利用率自动扩缩
+ CloudWatch 日志记录和监控
+ 针对未来更新的 5XX 回滚警报和金丝雀部署 