- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个containers/images
比如admin(django)
,nginx(httpserver)
我的系统在下面。
port80-> nginx -> port8011 -> admin
我想在 fargate
上部署这些。
但是我还是很困惑。
两个镜像,两个容器,两个任务定义,两个负载均衡器就可以了。
但是一个公网IP只能给nginx?
容器之间如何连接?
目前我的源码是这样的
我熟悉 docker-compose,但不熟悉 aws fargate。
感谢任何帮助。
const VPCID='vpc-0867d6797e62XXXXX';
const vpc = ec2.Vpc.fromLookup(this, "VPC", {
vpcId:VPCID
//isDefault: true,
});
const cluster = new ecs.Cluster(this, "SampleCluster", {
vpc:vpc,
clusterName: "StAdminNginxCluster"
});
const adminRepo = ecr.Repository.fromRepositoryArn(this, 'AdminRepository', 'arn:aws:ecr:ap-northeast-1:678100XXXXXX:repository/st_admin_site');
const nginxRepo = ecr.Repository.fromRepositoryArn(this, 'NginxRepository', 'arn:aws:ecr:ap-northeast-1:678100XXXXXX:repository/st_nginx');
const adminImage = ecs.ContainerImage.fromEcrRepository(adminRepo,"latest");
const nginxImage = ecs.ContainerImage.fromEcrRepository(nginxRepo,"latest");
//make task definition
const taskDefinitionAdmin = new ecs.FargateTaskDefinition(this, "TaskDefAdmin",{
memoryLimitMiB: 512,
cpu: 256,
});
const taskDefinitionNginx = new ecs.FargateTaskDefinition(this, "TaskDefNginx",{
memoryLimitMiB: 512,
cpu: 256,
});
const adminContainer = taskDefinitionAdmin.addContainer("AdminContainer", {
image: adminImage,
});
const nginxContainer = taskDefinitionNginx.addContainer("NginxContainer", {
image: nginxImage,
});
adminContainer.addPortMappings({
containerPort: 8011
});
nginxContainer.addPortMappings({
containerPort: 80
})
const ecsServiceAdmin = new ecs.FargateService(this, "ServiceAdmin", {
cluster,
taskDefinition:taskDefinitionAdmin,
desiredCount: 2
});
const ecsServiceNginx = new ecs.FargateService(this, "ServiceNginx", {
cluster,
taskDefinition:taskDefinitionNginx,
desiredCount: 2
});
const lbAdmin = new elb.ApplicationLoadBalancer(this, "LBAdmin", {
vpc: cluster.vpc,
internetFacing: true
});
const listenerAdmin = lbAdmin.addListener("Listener", { port: 8011 });
const targetGroupAdmin = listenerAdmin.addTargets("ECSAdmin", {
protocol: elb.ApplicationProtocol.HTTP,
port: 8011,
targets: [ecsServiceAdmin]
});
const lbNginx = new elb.ApplicationLoadBalancer(this, "LBNginx", {
vpc: cluster.vpc,
internetFacing: true
});
const listenerNginx = lbNginx.addListener("Listener", { port: 80 });
const targetGroupNginx = listenerNginx.addTargets("ECS", {
protocol: elb.ApplicationProtocol.HTTP,
port: 80,
targets: [ecsServiceNginx]
});
这个 docker-compose 有效。
version: "3.9"
services:
admindjango:
image: 678100XXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/st_admin_site:latest
ports:
- "8011:8011"
restart: always
nginx:
image: 678100XXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/st_nginx:latest
ports:
- '80:80'
depends_on:
- admindjango
更新
我使用两个容器和一个任务定义。
我只是从一个 taskDifinition
调用了两次 addContainer
。
(暂时忽略loadbalancer
)
您也可以通过 127.0.0.1:XXX 访问每个容器。
它很适合我的目的。感谢 @Mark B
const taskDefinitionAdmin = new ecs.FargateTaskDefinition(this, "TaskDefAdmin",{
memoryLimitMiB: 512,
cpu: 256,
});
const adminContainer = taskDefinitionAdmin.addContainer("AdminContainer", {
image: adminImage,
});
adminContainer.addPortMappings({
containerPort: 8011,
hostPort: 8011
});
const nginxContainer = taskDefinitionAdmin.addContainer("NginxContainer", {
image: nginxImage,
});
nginxContainer.addPortMappings({
containerPort: 80,
hostPort: 80
})
const adminSG = new ec2.SecurityGroup(this, 'admin-server-sg', {
vpc,
allowAllOutbound: true,
description: 'security group for a web server',
});
adminSG.addIngressRule(
ec2.Peer.anyIpv4(),
ec2.Port.tcp(80),
'allow SSH access from anywhere',
);
const ecsAdminService = new ecs.FargateService(this, "AdminService", {
cluster,
taskDefinition:taskDefinitionAdmin,
desiredCount: 2,
vpcSubnets: {subnetType: ec2.SubnetType.PUBLIC },
assignPublicIp: true,
securityGroups:[adminSG]
});
最佳答案
How can I connect between container?
在您当前的配置中,您无法在容器之间直接连接。您必须让 Nginx 连接到连接到 Django 任务的内部负载平衡器。
Web 浏览器 -> 公共(public) Nginx 负载均衡器 -> Nginx 容器 -> 私有(private) Django 负载均衡器 -> Django 容器。
我建议考虑在同一个 ECS 任务中运行两个容器。如果只拥有一个负载均衡器和一半数量的 Fargate 实例,您可能会节省一大笔钱。流量看起来像这样:
Web 浏览器 -> 公共(public)负载均衡器 -> 80 端口上的 Nginx 容器 -> 8011 端口上的 Django 容器。
在那种情况下,您可以将 Nginx 配置为将请求代理到 127.0.0.1:8011
。同一任务中的所有容器都可以通过 Fargate 实例内的 127.0.0.1
相互连接。请参阅 Fargate 网络文档 here .
一个更高级的设置是让每个容器作为一个单独的任务运行,并使用 AWS App Mesh用于内部容器通信,而不是内部负载均衡器。对于您的情况,这可能有点矫枉过正,更适合具有许多独立部署的微服务的大型环境。
关于amazon-web-services - Fargate 上多个容器(django、nginx)的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71191332/
AWS ECS Fargate 启动和运行 docker 镜像的最短/平均时间是多少? 为了争论,45MB anapsix/alpine-java图片。 我想研究使用 ECS Fargate 来加快在
我已在 AWS Fargate 上部署了我的 asp.net core 应用程序,一切正常。我正在使用 awslogs 驱动程序,日志已正确发送到 cloudwatch。但是经过几天的正确工作,我现在
我已在 AWS Fargate 上部署了我的 asp.net core 应用程序,一切正常。我正在使用 awslogs 驱动程序,日志已正确发送到 cloudwatch。但是经过几天的正确工作,我现在
我在 fargate 上运行一个任务,CPU 为 2048,内存为 8192。运行一段时间后的任务因错误而停止 container was stopped as it ran out of memor
我有一个在 ECS/Fargate 上运行的 Node.js 应用程序。我想设置一些环境变量,根据我的阅读,这应该在任务定义中完成。但是,在最初定义任务后似乎没有任何方法可以编辑环境变量。当我查看任务
我有一个给定的 AWS fargate 任务定义。 do_something 调用不支持超过 4 个并发消费者的下游服务。因此,我必须找到一种方法来限制同时运行的并发 do_something far
我有一个用于存储容器日志的 AWS EFS 共享。 我想将此 nfs 共享 (aws efs) 挂载到 AWS Fargate。可能吗? 任何支持文档链接将不胜感激。 最佳答案 你可以这样做since
我收到“不支持所请求的一项或多项功能。”尝试在AWS FARGATE上从Amazon EFS装载卷时发生错误。 最佳答案 编辑您的服务并将“平台版本”更新为1.4.0 您可以在terraform中通过
我正在尝试将 Fargate 服务添加为 Application Load Balancer 目标,但它总是获取错误的容器端口。任务定义有两个容器:端口 8080 上的应用程序和端口 443 上的 n
我正在尝试最简单的部署来在 Fargate 中启动并运行 HTTPS Web 服务器。 我已使用 Amazon Certificate Manager 创建 public certificate .
我在 aws eks 中有一个带有 Fargate 配置文件的 kubernetes 集群。当我尝试在 kube-system 命名空间中运行 aws 负载均衡器 Controller 或指标服务器时
AutoScalingGroup 需要 LaunchConfiguration 问题是 LaunchConfiguration 需要 ImageId 和其他参数等参数,因为我使用容器,所以我没有这些参
我们有一个基于 CPU 和内存为 ecs 容器化应用程序配置目标跟踪自动缩放的简单示例。我们通过以下代码自动配置了 4 个警报(2 个 CPU - 1 个放大,1 个缩小,2 个内存,1 个放大和 1
我们有一个旧的 Java 应用程序在 Jboss As 7.1.1 中运行。目前,此应用程序在 AWS EC2 实例类型 t3.medium 上运行,该实例类型为 2 个 CPU 内核和 4GB 内存
如何配置 ECS Fargate + Cloudwatch 以包含特定文件位置。 我有 app-access.log 我的框架将所有访问日志存放在其中。Cloudwatch 目前仅使用来 self 的
我正在使用以下命令启动单个 ECS Fargate 任务: aws ecs run-task --cluster Fargate \ --task-definition $ECR_REPO-run-
我的Nginx Dockerfile: FROM nginx:1.15.12-alpine RUN rm /etc/nginx/conf.d/default.conf COPY ./nginx/ngi
我们正在尝试在 AWS ECS 上启动一个 fargate 容器。在容器定义中,我们有 "command": [ "/bin/bash", "-c",
目前我正在研究如何在 AWS 上编排我们的容器化微服务。ECS 的 Fargate 选项看起来很有前途,无需管理 EC2 实例。 尽管在 Fargate 中启动“任务”所需的时间非常长,即使对于简单的
我有一个 AWS FARGATE 任务,它正在运行一个相对简单的 python 应用程序(具有从 python:3.6-stretch 构建的 Docker 镜像)。它使用 Amazon EC2 任务
我是一名优秀的程序员,十分优秀!