

# 在 Express Mode 之外更新资源
<a name="express-service-advanced-customization"></a>

Express Mode 通过代表您自动预置和管理 AWS 资源来简化部署，但了解责任模型很重要。虽然 Express Mode 会创建和配置诸如 Amazon ECS 服务、负载均衡器和自动扩缩策略之类的资源，但所有资源都保留在您的 AWS 账户中，并且可以完全以进行直接管理。您可以使用 AWS 控制台、AWS CLI 或 API 在 Express Mode 之外修改这些资源，但这样做可能会影响 Express Mode 管理服务的能力。本节介绍 Express Mode 管理哪些资源、如何在 Express Mode 之外安全地进行更改以及操作时会发生什么情况。

## 了解责任共担模式
<a name="express-service-shared-responsibility"></a>

Express Mode 中的责任界限由 API 使用情况定义。Express Mode API 会代表您管理资源，并在多个 AWS 服务之间进行协调更新。标准 AWS 服务 API 使您能够直接控制各个资源。这允许您超越 Express Mode 为配置提供的参数集，并使您可以控制每个资源的每个参数。这两组 API 都在您的账户中的相同底层基础设施上运行，并且都将执行您请求的操作。AWS 负责执行您请求的操作。Express Mode 不会验证使用直接 API 进行的资源修改是否与 Express Mode 配置冲突，也不会阻止可能中断服务功能的更改。这也意味着您有能力进行更改，并且这些更改将会保留下来。除非作为 Express Mode 更新的一部分提出请求，否则 Express Mode 不会覆盖更改。您有责任了解使用直接 API 进行的修改如何与 Express Mode 的配置交互，并负责解决由此产生的任何冲突或服务问题。

有关 Express Mode 设置的默认值及其编排的资源的更多详细信息，请参阅 [由 Amazon ECS Express Mode 服务创建的资源](express-service-work.md)。

## 在我的 Express Mode 服务中使用 Amazon ECS 功能之前，我需要做些什么吗？
<a name="express-service-migration"></a>

不，Express Mode 没有毕业路径或紧急机制。您的 Express Mode 服务始终可以使用整个 Amazon ECS 功能集。如果您想确保您的服务无法进行进一步 Express Mode 更新，有几种方法可以选择。移除资源上的托管标签后，Amazon ECS 无法再将其识别为 Express Mode 服务并对其进行操作。或者，您也可以使用 IAM 限制用户对 Express Mode API 的权限。

## Express Mode 之外的更新示例
<a name="express-service-customization-examples"></a>

### 向 Express Mode 服务添加 sidecar
<a name="express-service-add-sidecar"></a>

您可以向您的服务添加任何 sidecar 容器。此示例展示了如何添加 Fluent Bit 日志记录 sidecar。

您可以使用 sidecar 容器定义任务定义，并使用 `taskDefinitionArn` 参数将其提供给 Express Mode 服务。Express Mode 按原样使用您的任务定义，包括您配置的任何 sidecar 容器。有关更多信息，请参阅 [使用您自己的任务定义创建新的 Express Mode 服务](express-service-getting-started.md#express-service-create-byotd)。

或者，您可以按以下过程所述，通过直接编辑 Express Mode 创建的任务定义来添加 sidecar。

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**。

1. 选择 Express Mode 服务所在的集群，然后在**服务**面板中选择它。

1. 转到**资源**选项卡并选择任务定义。

1. 选择 **JSON** 选项卡，然后在顶部标有**创建新修订**的按钮中选择向下箭头。在这里，您将找到一个名为**使用 JSON 创建新修订**的操作。

1. 在主容器定义之前或之后添加 sidecar 容器。有关更多信息，请参阅[Amazon ECS 任务定义示例：将日志路由到 FireLens](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-taskdef.html)。

1. 如果您有类似于此示例的日志记录 sidecar，则需要更改主容器中的 `logDriver`：

   ```
   "logConfiguration": {
       "logDriver": "awsfirelens"
   }
   ```

1. 假设使用 Express Mode 服务的默认设置，将主容器 memoryReservation 设置为 1998，将 Fluent Bit 容器 memoryReservation 设置为 50。这样可以确保两个容器的总内存预留量不会超过您在 Fargate 任务上运行的内存量（默认 Express Mode 服务为 2048）。

1. 创建您的新修订。

1. 单击**部署**下拉列表并选择**更新服务**。

1. 选择要更新的**集群**和**服务**，然后选择**强制实施新部署**。应自动选择您刚刚创建的任务定义修订。选择**更新**。

1. 观察您的部署情况。此服务中的任务现在将有两个容器。通过 Express Mode 控制台或 API 进行的其他更新不会覆盖对任务定义的更改，除非它们直接冲突，例如，在这种情况下，如果您为 Express Mode 提供了一个新的日志组和日志流名称，则 logDriver 将更新回 `awslogs`。

### 向服务添加自定义域
<a name="express-service-add-custom-domain"></a>

**先决条件：**本指南假设您的域是由 Route 53 管理且具有 ACM 证书的托管区。如果您的域托管在其他位置，则需要使用 CNAME 来指向应用程序负载均衡器 DNS 记录。

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**。

1. 选择 Express Mode 服务所在的集群，然后在**服务**面板中选择它。

1. 转到**资源**选项卡并选择侦听器规则。

1. 选择**操作**和**编辑规则**。

1. 复制当前主机标头值（您的应用程序 URL），然后**移除**规则，因为每种类型只能有一个。

1. 添加**主机标头**类型的条件，将您的应用程序 URL 作为主机标头条件值粘贴回去。

1. 单击**添加 OR 条件值**。

1. 在此处输入您的自定义域。

1. 单击**下一步**并**保存更改**。

1. 现在选择应用程序负载均衡器侦听器的**证书**选项卡。

1. 单击**添加证书**。在这里，您可以将证书导入侦听器。

1. 在您的 Route 53 托管区中，单击**创建记录**为您的服务创建路由记录。

1. 选择一个简单路由记录。

1. 添加记录名称。

1. 选择一种记录类型。

1. 将流量路由到**应用程序和经典负载均衡器的别名**。

1. 选择您的区域。

1. 选择您的 Express Mode 服务使用的负载均衡器。

传播几分钟后，您的服务将开始在自定义域上接收流量。如果要向应用程序负载均衡器添加许多证书，或者从应用程序负载均衡器为许多 Express Mode 服务提供服务，您可能需要考虑提高应用程序负载均衡上证书的服务限制。