【问题标题】:How to set container port and load balancer for aws fargate using pulumi?如何使用 pulumi 为 aws fargate 设置容器端口和负载均衡器?
【发布时间】:2020-07-22 18:27:07
【问题描述】:

我正在尝试使用 Pulumi 在 aws fargate 上部署简单的烧瓶 python 应用程序。 python 应用程序的 dockerfile 从容器中公开端口 8000。如何使用 pulumi 使用负载均衡器设置它? 到目前为止,我已经使用 index.ts (pulumi) 尝试了以下方法:

import * as awsx from "@pulumi/awsx";

// Step 1: Create an ECS Fargate cluster.
const cluster = new awsx.ecs.Cluster("first_cluster");

// Step 2: Define the Networking for our service.
const alb = new awsx.elasticloadbalancingv2.ApplicationLoadBalancer(
    "net-lb", { external: true, securityGroups: cluster.securityGroups });
const web = alb.createListener("web", { port: 80, external: true });

// Step 3: Build and publish a Docker image to a private ECR registry.
const img = awsx.ecs.Image.fromPath("app-img", "./app");

// Step 4: Create a Fargate service task that can scale out.
const appService = new awsx.ecs.FargateService("app-svc", {
    cluster,
    taskDefinitionArgs: {
        container: {
            image: img,
            cpu: 102 /*10% of 1024*/,
            memory: 50 /*MB*/,
            portMappings: [{ containerPort: 8000, }],
        },
    },
    desiredCount: 5,
});

// Step 5: Export the Internet address for the service.
export const url = web.endpoint.hostname;

当我卷曲 url curl http://$(pulumi stack output url) 时,我得到:

<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
</body>
</html>

如何将负载均衡器端口映射到容器端口 8000?

【问题讨论】:

    标签: pulumi


    【解决方案1】:

    您可以在应用负载均衡器上指定目标端口:

    const atg = alb.createTargetGroup(
        "app-tg", { port: 8000, deregistrationDelay: 0 });
    

    然后您可以简单地将侦听器传递给服务端口映射:

    const appService = new awsx.ecs.FargateService("app-svc", {
        // ...
        taskDefinitionArgs: {
            container: {
                // ...
                portMappings: [web],
            },
        },
    });
    

    这是一个带有公共 docker 容器的完整重现,因此任何人都可以从一个工作示例开始:

    import * as awsx from "@pulumi/awsx";
    
    const cluster = new awsx.ecs.Cluster("first_cluster");
    
    const alb = new awsx.elasticloadbalancingv2.ApplicationLoadBalancer(
        "app-lb", { external: true, securityGroups: cluster.securityGroups });
    const atg = alb.createTargetGroup(
        "app-tg", { port: 8080, deregistrationDelay: 0 });
    const web = atg.createListener("web", { port: 80 });
    
    const appService = new awsx.ecs.FargateService("app-svc", {
        cluster,
        taskDefinitionArgs: {
            container: {
                image: "gcr.io/google-samples/kubernetes-bootcamp:v1",
                portMappings: [web],
            },
        },
        desiredCount: 1,
    });
    
    export const url = web.endpoint.hostname;
    

    【讨论】:

    • 我的错误,我放错了端口映射,上面的代码就像魅力一样,谢谢。也有类似的 Python 文档会很好。 :)
    猜你喜欢
    • 2021-05-15
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2017-09-04
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多