问题标签 [aws-cloudmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
amazon-web-services - 如何启动具有公共 DNS 的 ECS Fargate 容器?
我构建了一个 AWS CodePipeline 来构建容器并将其部署到 Fargate 托管的 EC2 实例中。参考AWS CodePipeline
其中一项服务是网络服务器,我正在尝试通过公共分配的 IP 地址从公众访问它;但是,这并不是很有用,因为每个部署的容器都会收到一个新的 IP 地址。
我知道可以设置弹性 IP 地址或将域指向容器服务,但我认为有更简单的方法。
EC2 实例可以通过提供公共 DNS 的选项启动...
是否可以使用静态公共 DNS 记录启动容器服务?如果是这样,怎么做?
nginx - nginx conf uwsgi_pass 不考虑 DNS TTL
我正在使用 nginx 以及上游 uwsgi 应用程序。uwsgi 应用程序使用 AWS Cloudmap 作为服务发现。
我遇到的问题是 cloudmap 对 uwsgi 主机使用 DNS 解析。uwsgi 似乎解析并缓存了进入 uwsgi_pass 的任何内容。
例如在 uwsgi conf 我有这条线uwsgi_pass uwsgi://web.sandbox:8000;
这意味着 nginx 服务器可以正常工作,直到 DNS 中的一个框被删除或换出。然后我收到一条错误消息,说 nginx 无法连接,因为它试图转到不存在的旧框。
No route to host) while connecting to upstream, client: 12.151.32.34, server: sandbox.mydomain.com, request: "GET /member/api/user/ HTTP/1.1", upstream: "uwsgi://172.30.1.89:8000"
我尝试使用resolver_timeout 0s;
,但这似乎不影响 uwsgi_pass。
DNS TTL 设置为 10 秒,因此 nginx 不尊重这一点。
如何让 uwsgi_pass 尊重 TTL 或每次都解析域?
amazon-ecs - 如何在没有负载均衡器的情况下访问 ECS 服务?
我有一个在 AWS ECS 上运行的 Docker 容器。我不想要负载均衡器,因为容器是用来处理 websocket 连接的。
https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/显示使用负载均衡器 DNS 名称到达容器。但是由于我没有添加负载均衡器,所以我看不到任何方法可以访问容器。
如何在没有负载均衡器的情况下与在 ECS 上运行的 Docker 容器建立 websocket 连接?
amazon-web-services - 如何使用 App Mesh 和 Cloud Map 在 ECS 服务之间发送 http 请求
我尝试做什么
- 从 app-gateway 向 app-backend 发送 http 请求。
- 我为此目的创建了应用程序。(https://github.com/tbrand/app-mesh-sample)
我不能做什么
- 当应用程序网关向应用程序后端发送 http 请求时,它会显示“ENOTFOUND”。(DNS 查找失败?)
细节
- 我在同一个 VPC 下的 ECS 上有两个最小应用程序(应用程序网关和应用程序后端。用 Node.js 编写)。他们独立运行良好。
- Envoy 代理由 ECS 控制台以默认配置注入。
- 我定义了一个 App Mesh,它有一个到后端服务的路由器。
- AWS Cloud Map 由 ECS 创建。似乎实例已在每个服务上正确注册。
- 我使用 3000 作为除 ALB 之外的每个定义的侦听端口。(它使用 80。)
建筑学
ECS
- mymesh(ECS 集群)
- app-gateway(ECS服务。任务定义由envoy代理注入。)
- app-backend(ECS服务。任务定义由envoy代理注入。)
AWS 应用网格
- app-backend.mymesh.local(虚拟服务。provider=app-backend(虚拟路由器))
- app-gateway.mymesh.local(虚拟服务。provider=app-gateway(虚拟节点))
- app-backend(虚拟路由器。它有一条到 app-backend(虚拟节点)的路由。)
- 应用后端(虚拟节点。服务发现=AWS 云地图,命名空间=mymesh.local,服务名称=应用后端)
- app-gateway(虚拟节点。服务发现=AWS Cloud Map,命名空间=mymesh.local,服务名称=app-gateway,后端=app-backend.mymesh.local)
AWS 云地图
- mymesh.local(命名空间)
- app-backend (Service. 它有一个ECS注册的实例)
- app-gateway (Service. 它有一个ECS注册的实例)
53 号公路
- mymesh.local(私有主机区域。它与 VPC 关联。它是我在 ECS 上定义第一个服务时创建的。)
- app-backend.mymesh.local(一条记录。值是ECS任务运行的IP地址。)
- app-gateway.mymesh.local(一条记录。值是ECS任务运行的IP地址。)
ALB
- app-gateway(app-gateway 服务的公共端点。它运行良好。)
- app-gateway(目标组。目标由 ECS 注册。)
根据这个示例应用程序,我认为我可以通过app-backend.mymesh.local
这样的方式访问应用程序后端。但这会引发错误。
请告诉我是否应该提供更多细节。(我会通过文字或屏幕截图告诉他们。)
如何使用 App Mesh 在 ECS 服务之间成功发起 http 请求?
amazon-web-services - 带有 AWS S3 开发工具包的 AWS 云地图
AWS Cloud Map 表示它将与 S3 存储桶一起使用。我很难理解的是如何设置 AWS S3 开发工具包以在向 S3 存储桶发出请求时使用云地图命名空间和服务。是否有一个完整的示例涵盖设置和 S3 存储桶,将其添加到云地图,使用 AWS S3 开发工具包使用云地图访问 S3 存储桶。
为什么我需要这个:我目前正在尝试使用多个 aws 帐户设置开发、阶段和生产环境,并希望代码在应用程序中保持不变,但使用云地图来映射资源。我了解如何使用数据库和其他 url 进行这项工作。当我的代码使用 AWS 开发工具包访问 AWS 资源时,我遇到了困难。
amazon-web-services - 将基于 API 的服务发现返回到 AWS Cloud Map 的 Ip 顺序
我们目前正在使用“基于 API 的服务发现到 AWS Cloud Map”从我们的 java 应用程序进行服务发现。我们正在使用“DiscoverInstances”调用。由于我们有多个具有相同属性的容器,因此调用会返回多个 IP,我们总是选择列表中的第一个。AWS CloudMap 响应的 IP 顺序背后是否有任何算法?
spring - ECS服务与spring微服务和AWS cloudmap的通信
我正在使用 ECS Fargate 启动类型。我正在部署基于 Spring 的微服务。每个服务都将自己注册到 AWS CloudMap。现在我正在尝试使用 RestTemplate 在两个微服务之间进行通信。
我通过它们的 DNS 端点调用服务(例如:auth.mynamespace.local:8080/login)。我每次都会收到 404 响应。微服务周围的安全组在相应入站组的 8080 端口上是透明的。
注意事项:一切都是私密的。我没有关联公共 IP,而且 CloudMap 命名空间(R53 托管区域)也是私有 IP。
我真的无法理解为什么我的 RestTemplate.postForEntity(...) 会出现所有这些 404 错误。
amazon-web-services - ECS 任务的 EC2 目标组中如何自动注册目标?
我有一个 ECS 集群,其中包含一个指定服务发现端点的 ECS 服务 (Fargate)。我还有一个云地图服务设置,其域和服务名称与为 ECS 服务输入的服务发现详细信息相匹配。最后,还有一个应用程序负载均衡器,它为 IP 目标设置了目标组,并且最初没有注册目标(请参阅下面的完整详细信息)。
当我为上述 ECS 服务启动任务时,该任务会自动注册到上述目标组的“已注册目标”中。
我的问题是 AWS 如何知道我希望 ECS 服务中的任务自动添加到我的 ALB 的目标组?我在目标组中没有看到将其连接到 ECS 服务或云地图服务的任何内容?是否有其他配置可以实现这一目标?
我想要做的是创建一个具有新目标组的新 ALB,我想将流量从这个 ALB 路由到同一个 ECS 服务,但是这不喜欢将 ECS 任务自动添加到目标的注册目标团体。这有可能实现吗?
haproxy - HAProxy 与 Cloudmap 与 Fargate
希望迁移到使用 AWS Fargate 托管许多容器以通过 HAProxy 进行负载平衡,这似乎是一种优雅的方法,然后使用 AWS Cloudmap 的组合进行服务发现,然后使用 HAProxy DNS(服务器模板)语法自动填充后端服务器。
然而,值得注意的是,Cloudmap 的底层系统路由 53 最多仅返回 8 个 A 或 SRV 记录,这从 HAProxy 文档中听起来像是它会不断地将未在最新 DNS 调用中返回的节点标记为不健康,这将导致后端不断被删除并重新添加到 HAProxy 池中,即使它们都是健康的。
我只能假设这是其他人以前遇到过的事情,如果有一个技巧可以让 HAProxy 容纳 8 个后端服务器的最大值?
amazon-web-services - 无法在 Internet 上访问用于服务发现的公共 DNS 命名空间
我有一个在ECS 上作为 Fargate 服务运行的容器。它有一个带有公共 DNS 命名空间“frontend.example.com”的服务发现。
我可以在调用公共 IP 时访问容器,但不能使用公共 DNS 命名空间。
我还尝试将 Route53 DNS 记录指向这个公共 DNS 命名空间“frontend.example.com”,但现在也可以正常工作。
这甚至可能吗?因为我在一些论坛上读到,您只能通过连接到服务命名空间的 ALB 或每次更新 Fargate 容器时更新 Route53 上的公共 IP 地址来访问 Fargate 服务。
简而言之,我可以使用附加到远程服务(具有服务发现)的公共 DNS 命名空间(由 CloudMap 创建)从互联网访问它吗?