【发布时间】:2020-12-24 06:01:05
【问题描述】:
我想将两个容器部署到 ECS 集群中,一个从外部使用 HTTP 调用,然后它调用另一个容器,同样通过 HTTP。
const cluster = new ecs.Cluster(this, "mycluster", {});
cluster.addDefaultCloudMapNamespace({ name: "local" });
new ecsPatterns.ApplicationLoadBalancedFargateService(this, "abc", {
cluster,
taskImageOptions: {
containerPort: 8000,
image: ecs.ContainerImage.fromRegistry("my/abc-image:latest"),
},
});
const xyztask = new ecs.FargateTaskDefinition(this, "xyztask");
const xyz = xyztask.addContainer("xyzcontainer", {
image: ecs.ContainerImage.fromRegistry("my/xyz-image:latest"),
});
xyz.addPortMappings({ containerPort: 8000 });
new ecs.FargateService(this, "xyz", {
cluster,
taskDefinition: xyztask,
cloudMapOptions: { name: "xyz" },
});
abc 服务如下所示:
const axios = require("axios");
const bodyParser = require("body-parser");
const express = require("express");
const app = express();
app.use(bodyParser.json());
app.post("/", async ({ body: { x } }, response) => {
response.end(JSON.stringify({ x }));
await axios.post(
`http://xyz.local:8000/`,
{ x },
{ timeout: 3000 }
);
});
app.listen(8000);
xyz 服务如下所示:
const axios = require("axios");
const bodyParser = require("body-parser");
const express = require("express");
const app = express();
app.use(bodyParser.json());
app.post("/", async ({ body: { x } }, response) => {
response.end();
});
app.listen(8000);
abc 服务可从外部获得,但不知何故,对 xyz 的请求总是失败。
【问题讨论】:
-
您确定要在这里使用 CloudMap 还是尝试实现?我打算尝试旋转类似的东西,但当我看到你在使用 CloudMap 并想检查时我犹豫了。
-
这是一次尝试。但是 CM 域解析为 IP,所以我觉得部分工作正常,我认为 CM 是这里最干净的方式。
标签: amazon-web-services amazon-ecs aws-cdk