我有一个使用 elasticbeanstalk 部署的 api,我希望将其完全内部化,以便无法从公共 Internet 访问它。我这样做是因为我只希望可以通过我们的其他服务访问该服务(每个服务都在自己的 VPC 中运行,并且都通过 elasticbeanstalk 部署)。
是否可以将内部 ELB 与 elasticbeanstalk 一起使用?这甚至是我需要做的吗?VPC 对等可以在这里帮助我吗?
最终目的是api需要有一些公开的http资源和一些私有的。我的方法是将服务设为私有并通过 API 网关公开任何公共资源,但这可能不是正确的解决方案。通过 API Gateway 公开所有内容、要求对私有资源进行 IAM 身份验证并在 api 中强制要求来自 API Gateway 的请求可能会更好吗?
amazon-web-services amazon-elb amazon-elastic-beanstalk aws-api-gateway
因此,我使用 ECS(通过 ecs-cli 创建)和 CloudFormation,但在创建自动缩放组时遇到问题:

它始终无法显示“LoadBalancer 附件不稳定”。有谁知道这可能是什么原因造成的?
我有两个 CloudFormation 堆栈,一个主要堆栈用于设置我的大部分基础设施,第二个堆栈(正在失败)用于第二个 ECS 集群。我正在从第一个/主堆栈的输出传递输入参数。
我想这可能是子网大小问题(它们在第一个堆栈中创建并传递到第二个堆栈,10.0.0.0/24 和 10.0.1.0/24),所以我尝试在第二个 cloudformation 中创建两个新子网模板并使用它们,但它导致了同样的错误。
在两个模板文件之间创建相同的自动缩放组和 ELB...
第一堆:
"InternetGateway": {
"Condition": "CreateVpcResources",
"Type": "AWS::EC2::InternetGateway"
},
"AttachGateway": {
"Condition": "CreateVpcResources",
"Type": "AWS::EC2::VPCGatewayAttachment",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"InternetGatewayId": {
"Ref": "InternetGateway"
}
}
},
"RouteViaIgw": {
"Condition": "CreateVpcResources",
"Type": "AWS::EC2::RouteTable",
"Properties": {
"VpcId": {
"Ref": "Vpc"
}
}
},
"PublicRouteViaIgw": {
"Condition": "CreateVpcResources",
"DependsOn": "AttachGateway",
"Type": "AWS::EC2::Route",
"Properties": {
"RouteTableId": {
"Ref": "RouteViaIgw"
},
"DestinationCidrBlock": "0.0.0.0/0",
"GatewayId": …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-elb aws-cloudformation autoscaling
设置ELB时,它会说以下内容:
您必须从至少两个可用区中指定子网,以提高负载均衡器的可用性。
我目前有两个 VPC:
ELB 仅适用于 WebVPC(为 Web 流量提供服务)。我目前每个 VPC 只有一个公共子网和一个私有子网,这意味着我只能从我的 WebVPC 为 ELB 提供一个公共子网。
这是否意味着拥有至少两个公共子网和至少两个私有子网是最佳实践?
我通过AWS ECS安装了Nginx ECS Docker容器服务,该服务运行没有任何问题。但是,通过 AWS ECS 安装的所有其他容器服务(例如 centos、ubuntu、mongodb 或 postgres)都会循环重启(取消注册、重新注册或处于挂起状态)。有没有办法在 AMI 优化 Linux 上使用 AWS ECS 安装这些容器服务而不出现任何问题?另外,有没有办法在从 Docker Hub 手动拉取并运行的 AWS ECS 中注册 Docker 容器?
我有一个 ECS 集群,由不同可用区中的 2 个实例组成。我运行的众多服务之一是 SMTP 中继。我想在这个服务前面使用一个网络负载均衡器来方便地配置其他应用程序来使用中继。
一切就绪后,我面临以下问题:
如果容器存在于实例 'A' 上,则只有实例 'B' 能够访问它,反之亦然,否则它会超时。因此网络负载均衡器似乎阻止访问位于同一实例上的服务。
有什么我在这里想念的吗?有没有人知道这一点并有解决方法?
更新: 将服务扩展到 2 个实例时,它开始工作。我现在倾向于相信它与可用区有关。
我正在尝试将 api 网关的调用重定向到 AWS 中的公共 elb。ELB 向世界开放,但我无法通过 API 网关使其工作。
当我调用事件操作 { "message": "Internal server error" } 时,我从邮递员那里收到此响应
从 AWS 测试控制台,我收到此错误:
2018 年 1 月 17 日星期三 20:29:12 UTC :由于配置错误而执行失败:主机名“public-elb.amazonaws.com”与对等方提供的证书主题不匹配 (CN=*.confidential.com) 17 20:29:12 UTC 2018:方法已完成,状态:500
我假设 ELB 是可访问的,因为然后我更改为另一个随机 URL,错误代码是“无效的端点地址”。
为什么我会收到此错误?我只有一个证书,并且 url 和 elb 中的证书相同。
amazon-web-services amazon-elb aws-api-gateway elastic-load-balancer api-gateway
我是亚马逊Boto3API 的新手。我创建了如下所示的示例架构的基本图,其中包含一个 ELB、4 个实例、2 个子网和 2 个不同可用区中的 2 个目标组(每个目标组中有 2 个实例)。
我知道如何创建 EC2 实例、目标组、子网和 ELB。但我并不清楚要使用什么ELB功能。
如何将 ELB 连接到其他组件?基本上,如何向 ELB 添加实例?我不确定现在需要什么后续步骤和功能。
到目前为止,这是我的简单代码:
def create_load_balancer(load_balancer_name, vpcid, subnets, security_group):
command = "aws elbv2 create-load-balancer --name " + load_balancer_name + " --subnets " + subnets + " --security-groups " + security_group+" --scheme internet-facing --type application"
response = os.popen(command).read()
// ....created 4 instances, subnets, and security groups ...
//now ELB:
#Load Balancer
elb = boto3.client('elbv2')
elb.create_target_group( Name='boto3-target-a', Protocol='HTTP', Port=80, VpcId=vpc.id)
elb.create_target_group( Name='boto3-target-b', Protocol='HTTP', …Run Code Online (Sandbox Code Playgroud) 首先为我的无知感到抱歉,但在 AWS ELB 词中有一个对我来说不是很清楚的概念。
我有一个部署在 cloudfront 上的前端站点和一个运行在 EC2 实例中的 API。
我想要存档的是避免有 2 个域来提供相同的数据。
例如,我想使用https://example.com/post通过我的网站访问,您将看到该网站本身(来自 cloudfront 的 HTML)。
但是,如果您尝试通过 HTTP/HEADER访问https://example.com/post,Accept: application/json您将能够看到来自 API 服务器本身(EC2 实例)的 json 内容。
可以使用 ELB 吗?或者我是否必须在 EC2 实例中使用一些技巧,例如将 nginx 设置为代理并在不存在标头的情况下提供云端内容?
提前致谢。
当我使用Application Load Balancer (ALB)将我的 Web 应用程序部署到 AWS 环境时,我的一些 Web 服务端点不会返回任何数据,并且我的 Chrome 浏览器会为一些 http 调用报告此错误:ERR_SPDY_PROTOCOL_ERROR
找到这个建议后,我在我的 ALB 配置中禁用了HTTP/2支持,现在一切正常。
为什么我必须在我的 ALB 中禁用HTTP/2?这里的根本问题是什么?我是否需要更改 Web 服务代码中的某些内容才能使用HTTP/2?
更新
以下是响应头:
HTTP/1.1 200
Date: Wed, 09 Jan 2019 21:39:13 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Locations Reached: Data to populate locations reached map
Run Code Online (Sandbox Code Playgroud)
正如下面的一个答案所建议的那样,罪魁祸首可能是我的一个标题(到达的位置)在名称中有一个空格,这是无效/格式错误的。我会确保空格被破折号取代。
load-balancing amazon-web-services amazon-elb http2 aws-application-load-balancer
对于在ECS Fargate上运行的应用程序,我从应用程序负载均衡器切换到网络负载均衡器,因为我的应用程序需要静态 IP 地址。
现在,我无法从中获取源/客户端IP地址X-Forwarded-For或X-Real-IpHTTP标头。在这两个标头中,我都获得了私有 IP。在Application Load Balancer 上,我能够从X-Forwarded-For标头中获取客户端 IP 。
此处的文档说 NLB 保留源 IP 地址。
我还不能解决这个问题。我可能做错了什么?
如果使用网络负载均衡器无法做到这一点,鉴于我的应用程序在 AWS ECS-Fargate 上运行,我如何实现以下目标:
拥有静态 IP(例如 A 记录、IP 白名单等)
可以提取客户端 IP 地址(例如使用 GeoIP 等基于区域的业务逻辑)
amazon-elb ×10
amazon-ecs ×2
nlb ×2
amazon-ec2 ×1
amazon-vpc ×1
api ×1
api-gateway ×1
autoscaling ×1
aws-application-load-balancer ×1
aws-elb ×1
boto3 ×1
containers ×1
docker ×1
http2 ×1
nginx ×1
python ×1