本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
开始使用 AWS App Mesh 和 Amazon ECS
重要
终止支持通知:2026 年 9 月 30 日, AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后,您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。有关更多信息,请访问此博客文章从迁移 AWS App Mesh 到 Amazon ECS Service Connect
本主题可帮助您 AWS App Mesh 使用在 Amazon ECS 上运行的实际服务。本教程介绍了多种 App Mesh 资源类型的基本功能。
场景
为了说明如何配合使用 App Mesh,假定您有一个具有以下功能的应用程序:
-
由名为
serviceA
和serviceB
的两项服务组成。 -
这两项服务均注册到名为
apps.local
的命名空间。 -
ServiceA
通过 HTTP/2 和端口 80 与serviceB
通信。 -
您已部署
serviceB
的版本 2,并采用名称serviceBv2
在apps.local
命名空间中注册了该服务。
您的要求如下:
-
您想将 75% 的流量从发送
serviceA
到serviceB
,将 25% 的流量发送到serviceBv2
第一个。通过仅向发送25%的流量serviceBv2
,您就可以在发送来自的100%的流量之前验证它是否没有错误serviceA
。 -
您希望能够轻松调整流量权重,以便一旦证明
serviceBv2
可靠便可将 100% 的流量发送到该服务。将所有流量发送到serviceBv2
后,您希望弃用serviceB
。 -
您不想为了满足之前的要求而更改实际服务的任何现有应用程序代码或服务发现注册。
为了满足您的要求,您决定创建包含虚拟服务、虚拟节点、虚拟路由器和路由的 App Mesh 服务网格。实施您的网格后,更新使用 Envoy 代理的服务。更新后,您的服务将通过 Envoy 代理相互通信,而不是直接相互通信。
先决条件
重要
终止支持通知:2026 年 9 月 30 日, AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后,您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。有关更多信息,请访问此博客文章从迁移 AWS App Mesh 到 Amazon ECS Service Connect
-
已了解 App Mesh 概念。有关更多信息,请参阅 什么是 AWS App Mesh?。
-
对 Amazon ECSs 概念的现有理解。有关更多信息,请参阅《Amazon Elastic Container Service 开发人员指南》中的 Amazon ECS 的定义。
-
App Mesh 支持在 DNS 中注册的 Linux 服务 AWS Cloud Map,或者两者兼而有之。要使用此入门指南,我们建议您提供三项已注册到 DNS 的现有服务。该主题的剩余步骤假定现有服务命名为
serviceA
、serviceB
和serviceBv2
,并且可以在名为apps.local
的命名空间中发现所有服务。即使服务不存在,您也可以创建服务网格及其资源,但在部署实际服务之前,您无法使用网格。有关 Amazon ECS 上服务发现的更多信息,请参阅服务发现。要使用服务发现创建 Amazon ECS 服务,请参阅教程:使用服务发现创建服务。如果您尚未运行服务,则可以创建带有服务发现功能的 Amazon ECS 服务。
步骤 1:创建网格和虚拟服务
服务网格是一种用于驻留在其内的服务之间的网络流量的逻辑边界。有关更多信息,请参阅 服务网格。虚拟服务是实际服务的抽象。有关更多信息,请参阅 虚拟服务。
创建以下 资源:
-
名为
apps
的网格,因为此场景中的所有服务均注册到apps.local
命名空间。 -
名为
serviceb.apps.local
的虚拟服务,因为虚拟服务表示可以使用该名称发现的服务,并且您不希望更改代码以引用其他名称。稍后的步骤中将添加名为servicea.apps.local
的虚拟服务。
您可以使用或 1.18.116 AWS Management Console 或更高 AWS CLI 版本或 2.0.38 或更高版本来完成以下步骤。如果使用 AWS CLI,请使用aws --version
命令检查已安装的 AWS CLI 版本。如果您没有安装版本 1.18.116 或更高版本或者没有安装版本 2.0.38 或更高版本,则必须安装或更新 AWS CLI。选择要使用的工具所对应的选项卡。
步骤 2:创建虚拟节点
虚拟节点充当实际服务的逻辑指针。有关更多信息,请参阅 虚拟节点。
创建名为 serviceB
的虚拟节点,因为某个虚拟节点表示名为 serviceB
的实际服务。可使用主机名 serviceb.apps.local
,通过 DNS
发现虚拟节点所表示的实际服务。或者,您可以使用发现实际的服务。 AWS Cloud Map虚拟节点将采用 HTTP/2 协议在端口 80 上侦听流量。此外,还支持其他协议和运行状况检查。您将在后面的步骤中为 serviceBv2
和 serviceA
创建虚拟节点。
步骤 3:创建虚拟路由器和路由
虚拟路由器路由网格中一个或多个虚拟服务的流量。有关更多信息,请参阅虚拟路由器 和路线。
创建以下 资源:
-
名为
serviceB
的虚拟路由器,因为serviceB.apps.local
虚拟服务不会启动与任何其他服务的出站通信。请记住,您之前创建的虚拟服务是实际serviceb.apps.local
服务的抽象。虚拟服务将流量发送到虚拟路由器。虚拟路由器采用 HTTP/2 协议在端口 80 上侦听流量。此外,还支持其他协议。 -
名为
serviceB
的路由。它将 100% 的流量路由到serviceB
虚拟节点。添加serviceBv2
虚拟节点后,在稍后的步骤中出现权重。虽然本指南中未作介绍,但您可以为路由添加额外的筛选条件,并添加重试策略,从而使 Envoy 代理在遇到通信问题时会多次尝试将流量发送到虚拟节点。
步骤 4:审核并创建
根据之前的说明审核设置。
步骤 5:创建其他资源
要完成此场景,您需要执行以下操作:
-
创建名为
serviceBv2
的虚拟节点,以及名为serviceA
的虚拟节点。这两个虚拟节点均通过 HTTP/2 和端口 80 侦听请求。对于serviceA
虚拟节点,将后端配置为serviceb.apps.local
。来自serviceA
虚拟节点的所有出站流量都将发送到名为serviceb.apps.local
的虚拟服务。虽然本指南中未作介绍,但您还可以为虚拟节点指定用于写入访问日志的文件路径。 -
另外创建一个名为的虚拟服务
servicea.apps.local
,该服务将所有流量直接发送到serviceA
虚拟节点。 -
更新在上一步中创建的
serviceB
路由,以将 75% 的流量发送到serviceB
虚拟节点,将 25% 的流量发送到serviceBv2
虚拟节点。随着时间的推移,您可以继续修改权重,直到serviceBv2
收到 100% 的流量。将所有流量发送到serviceBv2
后,您可以关闭并弃用serviceB
虚拟节点和实际服务。在更改权重时,不需要对代码进行任何修改,因为serviceb.apps.local
虚拟服务名称和实际服务名称没有改变。回想一下,serviceb.apps.local
虚拟服务将流量发送到虚拟路由器,该路由器将流量路由到虚拟节点。虚拟节点的服务发现名称可以随时更改。
网格摘要
在创建服务网格之前,您具有三个名为 servicea.apps.local
、serviceb.apps.local
和 servicebv2.apps.local
的实际服务。除实际服务之外,现在您还具有一个服务网格,其中包含用以表示实际服务的以下资源:
-
两个虚拟服务。代理通过虚拟路由器将所有流量从
servicea.apps.local
虚拟服务发送到serviceb.apps.local
虚拟服务。 -
三个名为
serviceA
、serviceB
和serviceBv2
的虚拟节点。Envoy 代理使用为虚拟节点配置的服务发现信息来查找实际服务的 IP 地址。 -
一个虚拟路由器,其路由指示 Envoy 代理将 75% 的入站流量路由到
serviceB
虚拟节点,将 25% 的流量路由到serviceBv2
虚拟节点。
步骤 6:更新服务
创建网格后,您需要完成以下任务:
-
授予随每项 Amazon ECS 任务服务部署的 Envoy 代理读取一个或多个虚拟节点配置的权限。有关如何向代理授权的更多信息,请参阅代理授权。
-
更新每个现有 Amazon ECS 任务定义服务,以使用 Envoy 代理。
凭证
Envoy 容器需要 AWS Identity and Access Management 凭据才能对发送到 App Mesh 服务的请求进行签名。对于使用 Amazon EC2 启动类型部署的 Amazon ECS 任务,证书可以来自实例角色或任务 IAM 角色。在 Linux 容器上使用 Fargate 部署的 Amazon ECS 任务无法访问提供实例 IAM 配置文件证书的亚马逊 EC2 元数据服务器。要提供凭证,您必须将 IAM 任务角色附加到在 Linux 容器类型上使用 Fargate 启动类型部署的任何任务。
如果以 Amazon EC2 启动类型部署任务,并且无法访问亚马逊 EC2 元数据服务器(如任务的 IAM 角色中的重要注释中所述),则还必须为该任务附加任务 IAM 角色。您分配给实例或任务的角色必须附加一个 IAM 策略,如代理授权中所述。
要更新任务定义,请使用 AWS CLI
你使用 Amazon ECS AWS CLI 命令register-task-definition
。下面的示例任务定义显示了如何为您的服务配置 App Mesh。
注意
无法通过控制台为 Amazon ECS 配置 App Mesh。
代理配置
要将您的 Amazon ECS 服务配置为使用 App Mesh,您的服务的任务定义必须具有以下代理配置部分。将代理配置 type
设置为 APPMESH
,并 containerName
配置为 envoy
。相应地设置以下属性值。
IgnoredUID
-
Envoy 代理不会路由来自使用此用户 ID 的进程的流量。您可以为此属性值选择所需的任何用户 ID,但此 ID 必须与任务定义中的 Envoy 容器的
user
ID 相同。此匹配允许 Envoy 忽略其自己的流量,而无需使用代理。出于历史原因,我们的示例使用
。1337
ProxyIngressPort
-
这是 Envoy 代理容器的入站端口。将此值设置为
15000
。 ProxyEgressPort
-
这是 Envoy 代理容器的出口端口。将此值设置为
15001
。 AppPorts
-
指定您的应用程序容器监听的所有入站端口。在此示例中,应用程序容器在端口
上侦听。您指定的端口必须与虚拟节点侦听器上配置的端口匹配。9080
EgressIgnoredIPs
-
Envoy 不会将流量代理至这些 IP 地址。将此值设置为
169.254.170.2,169.254.169.254
,这将忽略亚马逊 EC2 元数据服务器和 Amazon ECS 任务元数据终端节点。元数据端点为任务凭证提供 IAM 角色。您可以添加其他地址。 EgressIgnoredPorts
-
您可以添加以逗号分隔的端口列表。Envoy 不会将流量转发至这些端口。即使您没有列出任何端口,端口 22 也会被忽略。
注意
可以忽略的最大出站端口数为 15。
"proxyConfiguration": { "type": "APPMESH", "containerName": "envoy", "properties": [{ "name": "IgnoredUID", "value": "
1337
" }, { "name": "ProxyIngressPort", "value": "15000" }, { "name": "ProxyEgressPort", "value": "15001" }, { "name": "AppPorts", "value": "9080
" }, { "name": "EgressIgnoredIPs", "value": "169.254.170.2,169.254.169.254" }, { "name": "EgressIgnoredPorts", "value": "22
" } ] }
应用程序容器 Envoy 依赖项
您的任务定义中的应用程序容器必须等待 Envoy 代理来引导和启动之后才能启动。为了确保这种情况发生,你需要在每个应用程序容器定义中设置一个dependsOn
部分,等待 Envoy 容器报告为HEALTHY
。以下代码显示了包含此依赖项的应用程序容器定义示例。以下示例中的所有属性都是必需的。有些属性值也是必填的,但有些则是必填的replaceable
。
{ "name": "
appName
", "image": "appImage
", "portMappings": [{ "containerPort":9080
, "hostPort":9080
, "protocol": "tcp" }], "essential": true, "dependsOn": [{ "containerName": "envoy", "condition": "HEALTHY" }] }
Envoy 容器定义
您的 Amazon ECS 任务定义必须包含 App Mesh Envoy 容器镜像。
- 所有支持的区域都可以
Region-code
替换为me-south-1
、、、ap-east-1
ap-southeast-3
eu-south-1
il-central-1
、和以外的任何区域af-south-1
。 -
Standard
840364872350.dkr.ecr.
region-code
.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod符合 FIPS 标准
840364872350.dkr.ecr.
region-code
.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod-fips me-south-1
-
Standard
772975370895.dkr.ecr.me-south-1.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod
ap-east-1
-
Standard
856666278305.dkr.ecr.ap-east-1.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod
ap-southeast-3
-
Standard
909464085924.dkr.ecr.ap-southeast-3.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod
eu-south-1
-
Standard
422531588944.dkr.ecr.eu-south-1.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod
il-central-1
-
Standard
564877687649.dkr.ecr.il-central-1.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod
af-south-1
-
Standard
924023996002.dkr.ecr.af-south-1.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod
Public repository
-
Standard
public.ecr.aws/appmesh/aws-appmesh-envoy:v1.29.12.0-prod
符合 FIPS 标准
public.ecr.aws/appmesh/aws-appmesh-envoy:v1.29.12.0-prod-fips
重要
仅支持将版本 v1.9.0.0-prod 或更高版本与 App Mesh 一起使用。
在 Envoy 项目团队合并支持 App Mesh 的更改之前,您必须使用 App Mesh Envoy 容器镜像。有关更多详细信息,请参阅GitHub 路线图问题
以下示例中的所有属性都是必需的。有些属性值也是必填的,但有些则是必填的replaceable
。
注意
-
Envoy 容器定义必须标记为
essential
。 -
我们建议为 Envoy 容器分配
512
个 CPU 单元及至少64
MiB 的内存。在 Fargate 上,您可以设置的最低内存为1024
MiB。 -
Amazon ECS 服务的虚拟节点名称必须设置为
APPMESH_RESOURCE_ARN
属性的值。此属性需要版本1.15.0
或更高版本的 Envoy 镜像。有关更多信息,请参阅 Envoy 镜像。 -
user
设置的值必须与任务定义代理配置中的IgnoredUID
值匹配。在此示例中,我们使用的是
。1337
-
此处显示的运行状况检查等待 Envoy 容器正确引导,然后再向 Amazon ECS报告其运行状况良好且已准备好启动应用程序容器。
-
默认情况下,当 Envoy 在指标和跟踪中引用自身时,App Mesh 使用您在
APPMESH_RESOURCE_ARN
中指定的资源的名称。您可以通过使用自己的名称设置APPMESH_RESOURCE_CLUSTER
环境变量来覆盖此行为。此属性需要版本1.15.0
或更高版本的 Envoy 镜像。有关更多信息,请参阅 Envoy 镜像。
以下代码显示 Envoy 容器定义示例。
{ "name": "envoy", "image": "
840364872350
.dkr.ecr.us-west-2
.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod", "essential": true, "environment": [{ "name": "APPMESH_RESOURCE_ARN", "value": "arn:aws:appmesh:us-west-2
:111122223333
:mesh/apps
/virtualNode/serviceB
" }], "healthCheck": { "command": [ "CMD-SHELL", "curl -s http://localhost:9901/server_info | grep state | grep -q LIVE" ], "startPeriod":10
, "interval":5
, "timeout":2
, "retries":3
}, "user": "1337
" }
示例任务定义
以下示例 Amazon ECS 任务定义显示如何将上述示例合并到 taskB
的任务定义中。本文分别提供了使用或不使用 AWS X-Ray为两种 Amazon ECS 启动类型创建任务的示例。根据需要更改这些replaceable
值,以便为名为的任务taskBv2
和场景taskA
中的任务创建任务定义。用您的网格名称和虚拟节点名称替换 APPMESH_RESOURCE_ARN
值,并用您的应用程序侦听的端口列表替换代理配置 AppPorts
值。默认情况下,当 Envoy 在指标和跟踪中引用自身时,App Mesh 使用您在 APPMESH_RESOURCE_ARN
中指定的资源的名称。您可以通过使用自己的名称设置 APPMESH_RESOURCE_CLUSTER
环境变量来覆盖此行为。以下示例中的所有属性都是必需的。有些属性值也是必填的,但有些则是必填的replaceable
。
如果按照“凭证”部分中所述运行 Amazon ECS 任务,那么需要将现有任务 IAM 角色添加到示例中。
重要
Fargate 必须使用大于 1024 的端口值。
例 亚马逊 ECS 任务定义的 JSON - Linux 容器上的 Fargate
{ "family" : "
taskB
", "memory" : "1024
", "cpu" : "0.5 vCPU
", "proxyConfiguration" : { "containerName" : "envoy", "properties" : [ { "name" : "ProxyIngressPort", "value" : "15000" }, { "name" : "AppPorts", "value" : "9080
" }, { "name" : "EgressIgnoredIPs", "value" : "169.254.170.2,169.254.169.254" }, { "name": "EgressIgnoredPorts", "value": "22
" }, { "name" : "IgnoredUID", "value" : "1337
" }, { "name" : "ProxyEgressPort", "value" : "15001" } ], "type" : "APPMESH" }, "containerDefinitions" : [ { "name" : "appName
", "image" : "appImage
", "portMappings" : [ { "containerPort" :9080
, "protocol" : "tcp" } ], "essential" : true, "dependsOn" : [ { "containerName" : "envoy", "condition" : "HEALTHY" } ] }, { "name" : "envoy", "image" : "840364872350
.dkr.ecr.us-west-2
.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod", "essential" : true, "environment" : [ { "name" : "APPMESH_VIRTUAL_NODE_NAME", "value" : "mesh/apps
/virtualNode/serviceB
" } ], "healthCheck" : { "command" : [ "CMD-SHELL", "curl -s http://localhost:9901/server_info | grep state | grep -q LIVE" ], "interval" :5
, "retries" :3
, "startPeriod" :10
, "timeout" :2
}, "memory" :500
, "user" : "1337
" } ], "requiresCompatibilities" : [ "FARGATE" ], "taskRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskRole
", "executionRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskExecutionRole
", "networkMode" : "awsvpc" }
例 适用于 Amazon ECS 的 JSON 任务定义使用 AWS X-Ray -Linux 容器上的 Fargate
X-Ray 允许您收集有关应用程序服务于的请求的数据,并提供可用于可视化流量的工具。使用适用于 Envoy 的 X-Ray 驱动程序,Envoy 能够向 X-Ray 报告跟踪信息。您可以使用 Envoy 配置启用 X-Ray 跟踪。根据配置,Envoy 将跟踪数据发送到作为 sidecar 容器运行的 X-Ray 进程守护程序,该进程守护程序将跟踪转发给 X-Ray 服务。在将跟踪发布到 X-Ray 后,您可以使用 X-Ray 控制台来可视化服务调用图和请求跟踪详细信息。以下 JSON 表示用于启用 X-Ray 集成的任务定义。
{ "family" : "
taskB
", "memory" : "1024
", "cpu" : "512
", "proxyConfiguration" : { "containerName" : "envoy", "properties" : [ { "name" : "ProxyIngressPort", "value" : "15000" }, { "name" : "AppPorts", "value" : "9080
" }, { "name" : "EgressIgnoredIPs", "value" : "169.254.170.2,169.254.169.254" }, { "name": "EgressIgnoredPorts", "value": "22
" }, { "name" : "IgnoredUID", "value" : "1337
" }, { "name" : "ProxyEgressPort", "value" : "15001" } ], "type" : "APPMESH" }, "containerDefinitions" : [ { "name" : "appName
", "image" : "appImage
", "portMappings" : [ { "containerPort" :9080
, "protocol" : "tcp" } ], "essential" : true, "dependsOn" : [ { "containerName" : "envoy", "condition" : "HEALTHY" } ] }, { "name" : "envoy", "image" : "840364872350
.dkr.ecr.us-west-2
.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod", "essential" : true, "environment" : [ { "name" : "APPMESH_VIRTUAL_NODE_NAME", "value" : "mesh/apps
/virtualNode/serviceB
" }, { "name": "ENABLE_ENVOY_XRAY_TRACING", "value": "1" } ], "healthCheck" : { "command" : [ "CMD-SHELL", "curl -s http://localhost:9901/server_info | grep state | grep -q LIVE" ], "interval" :5
, "retries" :3
, "startPeriod" :10
, "timeout" :2
}, "memory" :500
, "user" : "1337
" }, { "name" : "xray-daemon", "image" : "amazon/aws-xray-daemon", "user" : "1337
", "essential" : true, "cpu" : "32
", "memoryReservation" : "256
", "portMappings" : [ { "containerPort" : 2000, "protocol" : "udp" } ] } ], "requiresCompatibilities" : [ "FARGATE" ], "taskRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskRole
", "executionRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskExecutionRole
", "networkMode" : "awsvpc" }
例 适用于 Amazon ECS 任务定义的 JSON- EC2 启动类型
{ "family": "
taskB
", "memory": "256
", "proxyConfiguration": { "type": "APPMESH", "containerName": "envoy", "properties": [ { "name": "IgnoredUID", "value": "1337
" }, { "name": "ProxyIngressPort", "value": "15000" }, { "name": "ProxyEgressPort", "value": "15001" }, { "name": "AppPorts", "value": "9080
" }, { "name": "EgressIgnoredIPs", "value": "169.254.170.2,169.254.169.254" }, { "name": "EgressIgnoredPorts", "value": "22
" } ] }, "containerDefinitions": [ { "name": "appName
", "image": "appImage
", "portMappings": [ { "containerPort":9080
, "hostPort":9080
, "protocol": "tcp" } ], "essential": true, "dependsOn": [ { "containerName": "envoy", "condition": "HEALTHY" } ] }, { "name": "envoy", "image": "840364872350
.dkr.ecr.us-west-2
.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod", "essential": true, "environment": [ { "name": "APPMESH_VIRTUAL_NODE_NAME", "value": "mesh/apps
/virtualNode/serviceB
" } ], "healthCheck": { "command": [ "CMD-SHELL", "curl -s http://localhost:9901/server_info | grep state | grep -q LIVE" ], "startPeriod":10
, "interval":5
, "timeout":2
, "retries":3
}, "user": "1337
" } ], "requiresCompatibilities" : [ "EC2" ], "taskRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskRole
", "executionRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskExecutionRole
", "networkMode": "awsvpc" }
例 带 AWS X-Ray EC2 启动类型的 Amazon ECS 任务定义的 JSON
{ "family": "
taskB
", "memory": "256
", "cpu" : "1024
", "proxyConfiguration": { "type": "APPMESH", "containerName": "envoy", "properties": [ { "name": "IgnoredUID", "value": "1337
" }, { "name": "ProxyIngressPort", "value": "15000" }, { "name": "ProxyEgressPort", "value": "15001" }, { "name": "AppPorts", "value": "9080
" }, { "name": "EgressIgnoredIPs", "value": "169.254.170.2,169.254.169.254" }, { "name": "EgressIgnoredPorts", "value": "22
" } ] }, "containerDefinitions": [ { "name": "appName
", "image": "appImage
", "portMappings": [ { "containerPort":9080
, "hostPort":9080
, "protocol": "tcp" } ], "essential": true, "dependsOn": [ { "containerName": "envoy", "condition": "HEALTHY" } ] }, { "name": "envoy", "image": "840364872350
.dkr.ecr.us-west-2
.amazonaws.com/aws-appmesh-envoy:v1.29.12.0-prod", "essential": true, "environment": [ { "name": "APPMESH_VIRTUAL_NODE_NAME", "value": "mesh/apps
/virtualNode/serviceB
" }, { "name": "ENABLE_ENVOY_XRAY_TRACING", "value": "1" } ], "healthCheck": { "command": [ "CMD-SHELL", "curl -s http://localhost:9901/server_info | grep state | grep -q LIVE" ], "startPeriod":10
, "interval":5
, "timeout":2
, "retries":3
}, "user": "1337
" }, { "name": "xray-daemon", "image": "amazon/aws-xray-daemon", "user": "1337
", "essential": true, "cpu": 32, "memoryReservation": 256, "portMappings": [ { "containerPort": 2000, "protocol": "udp" } ] } ], "requiresCompatibilities" : [ "EC2" ], "taskRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskRole
", "executionRoleArn" : "arn:aws:iam::123456789012
:role/ecsTaskExecutionRole
", "networkMode": "awsvpc" }
高级主题
使用 App Mesh 进行金丝雀部署
金丝雀部署和版本可帮助您在应用程序的旧版本和新部署的版本之间切换流量。它还会监控新部署版本的运行状况。如果新版本有任何问题,金丝雀部署可以自动将流量切换回旧版本。利用金丝雀部署,能够更多地控制在应用程序版本之间切换流量。
有关如何使用 App Mesh 为 Amazon ECS 实施金丝雀部署的更多信息,请参阅使用 App Mesh 为亚马逊 ECS 创建带有金丝雀部署的管道
注意
有关 App Mesh 的更多示例和演练,请参阅 App Mesh 示例存储库