aws::appmesh的cdk构造库

aws-cdk.aws-appmesh的Python项目详细描述


AWS应用程序网格构造库


稳定性:实验性

< Buff行情>

这是一个开发者预览(public beta)模块。发行版可能缺少重要功能,并且可能具有 未来的突破性变化。

此api仍在积极开发中,并处于非落后状态 在任何未来版本中的兼容更改或删除。不建议在生产中使用API 环境。实验性api不受语义版本控制模型的约束。


aws app mesh是一个基于代理的服务网格,它可以方便地监视和控制微服务。app mesh使您的微服务通信方式标准化,为您提供端到端的可视性,并帮助确保应用程序的高可用性。

app mesh为应用程序中的每个微服务提供一致的可见性和网络流量控制。

app mesh支持对其组件使用服务发现命名的微服务应用程序。要使用app mesh,您必须在aws fargate、amazon ecs、amazon eks、aws上的kubernetes或amazon ec2上运行现有的应用程序。

有关aws app mesh的更多信息,请访问aws docs for appmesh

创建应用程序并堆栈

constapp=newcdk.App();conststack=newcdk.Stack(app,'stack');

创建网格

服务网格是驻留在其中的服务之间的网络流量的逻辑边界。

创建服务网格后,您可以创建虚拟服务、虚拟节点、虚拟路由器和路由,以便在网格中的应用程序之间分配流量。

以下示例使用默认过滤器drop_all创建appmesh服务网格,有关出口FI的详细信息,请参见文档L.T./P>

constmesh=newMesh(stack,'AppMesh',{name:'myAwsmMesh',});

通过覆盖属性,也可以使用"allow_all"出口过滤器创建网格。

constmesh=newMesh(stack,'AppMesh',{name:'myAwsmMesh',meshSpec:{egressFilter: appmesh.MeshFilterType.Allow_All,},});

添加虚拟路由

mesh需要virtualrouters作为逻辑单元路由到virtualnodes

虚拟路由器处理网格中一个或多个虚拟服务的流量。创建虚拟路由器后,可以为虚拟路由器创建并关联将传入请求定向到不同虚拟节点的路由。

constrouter=mesh.addVirtualRouter('router',{portMappings:[{port: 8081,protocol: appmesh.Protocol.HTTP,},],});

路由器也可以使用构造函数创建并传入网格,而不是为网格调用addVirtualRouter()方法。

constmesh=newMesh(stack,'AppMesh',{name:'myAwsmMesh',meshSpec:{egressFilter: appmesh.MeshFilterType.Allow_All,},});constrouter=newappmesh.VirtualRouter(stack,'router',{mesh,// notice that mesh is a required property when creating a router with a new statementportMappings:[{port: 8081,protocol: appmesh.Protocol.HTTP,},],});

侦听器协议可以是httptcp

同样的模式适用于appmesh库中的所有构造,对于任何mesh.addxzy方法,也可以使用新的构造。这对于需要跨堆栈资源特别有用。其中,作为基础架构堆栈的一部分创建网格和创建资源(如节点)对于保存在应用程序堆栈中更为有用。

添加VirtualService

虚拟服务是虚拟节点通过虚拟路由器直接或间接提供的真实服务的抽象。依赖服务通过其virtualservicename调用您的虚拟服务,这些请求被路由到指定为虚拟服务提供商的虚拟节点或虚拟路由器。

我们建议您使用目标实际服务的服务发现名称(例如my seservice.default.svc.cluster.local)。

创建虚拟服务时:

将虚拟路由器添加为提供程序:

mesh.addVirtualService('virtual-service',{virtualRouter: router,virtualServiceName:'my-service.default.svc.cluster.local',});

添加虚拟节点作为提供程序:

mesh.addVirtualService('virtual-service',{virtualNode: node,virtualServiceName:`my-service.default.svc.cluster.local`,});

注意必须只选择一个虚拟节点虚拟路由器

添加虚拟节点

虚拟节点充当指向特定任务组的逻辑指针,例如amazon ecs服务或kubernetes部署。

虚拟节点逻辑图

创建虚拟节点时,必须为任务组指定dns服务发现主机名。您的虚拟节点期望的任何入站流量都应指定为侦听器。您的虚拟节点希望到达的任何出站流量都应指定为后端。

新虚拟节点的响应元数据包含与虚拟节点关联的amazon资源名(arn)。将此值(完整ARN或截断的资源名称)设置为任务定义或POD规范中任务组的特使代理容器的appmesh_virtual_node_name环境变量。例如,该值可以是mesh/default/virtualnode/simpleapp。然后将其映射到node.id和node.cluster-demission参数。

< Buff行情>

如果需要特使统计信息或跟踪使用其他名称,可以使用APPMESH虚拟节点群集环境变量替代由APPMESH虚拟节点名称设置的node.cluster值。

constvpc=newec2.Vpc(stack,'vpc');constnamespace=newcloudmap.PrivateDnsNamespace(stack,'test-namespace',{vpc,name:'domain.local',});constnode=mesh.addVirtualNode('virtual-node',{hostname:'node-a',namespace,listeners:{portMappings:[{port: 8081,protocol: appmesh.Protocol.HTTP,},],healthChecks:[{healthyThreshold: 3,intervalMillis: 5000,// minimumpath:`/health-check-path`,port: 8080,protocol: appmesh.Protocol.HTTP,timeoutMillis: 2000,// minimumunhealthyThreshold: 2,},],},});

使用构造函数创建一个virtualnode并添加标记。

constnode=newappmesh.VirtualNode(stack,'node',{mesh,hostname:'node-1',namespace,listener:{portMappings:[{port: 8080,protocol: appmesh.Protocol.HTTP,},],healthChecks:[{healthyThreshold: 3,intervalMillis: 5000,// minpath:'/ping',port: 8080,protocol: appmesh.Protocol.HTTP,timeoutMillis: 2000,// minunhealthyThreshold: 2,},],},});node.node.apply(newcdk.Tag('Environment','Dev'));

Listeners属性稍后可以用mesh.addListeners()方法保留为空DDED。healthcheck属性是可选的,但如果指定侦听器,则portmappings必须至少包含一个属性。

添加路线

路由与虚拟路由器相关联,用于匹配对虚拟路由器的请求,并相应地将流量分配给其关联的虚拟节点。

您可以在route规范中使用prefix参数来实现基于路径的请求路由。例如,如果您的虚拟服务名称是my-service.local,并且您希望路由将请求与my-service.local/metrics匹配,则前缀应为/metrics。

如果您的路由与请求匹配,则可以使用相对权重将流量分配给一个或多个目标虚拟节点。

constapp=newcdk.App();conststack=newcdk.Stack(app,'stack');
0

添加具有多个目标的单一路线,并将流量分成50/50

constapp=newcdk.App();conststack=newcdk.Stack(app,'stack');
1

还可以同时向不同的应用程序或目标添加多个路由。

constapp=newcdk.App();conststack=newcdk.Stack(app,'stack');
2

路由ID路由目标的数目必须匹配,因为每个路由需要为每个路由器指定一个唯一的名称。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java迭代图形框架聚合达到内存限制的消息   反编译和开发人员向Android应用程序提供java安全密钥   活页夹中的java Vaadin上传组件,例如Crud编辑器   java如何定义0090当我有了每个字符   带有AOP的java截取私有注释方法   在Java中暂停并恢复动画(thread.sleep)   java在JavaFX中从不同的控制器向TableView添加行   java如何通过Spring使用脚本初始化inmemory HSQLDB   windows找到了绝对的java。通过编程从java代码获取exe路径   Java同步、信号量和队列的多线程性能   java异步任务回调未调用   java在迷宫中用坐标寻找最短路径   Java:并行处理数组,查找发生异常的位置   java我无法理解我收到的错误   如何调用。bat文件,并使用java中的ProcessBuilder发送字符串   java在mysql数据库中插入日期   将ArrayList的内容显示为格式正确的JSON for Java REST API   java@OneToMany注释SQLSyntaxErrorException:ORA000904无效标识符