当我配置 NAT 网关时,我必须选择一个子网,因此据我所知,一个 NAT 网关对应一个属于一个可用区的子网。
然后我看到了下面的声明
如果您有多个可用区中的资源并且它们共享一个 NAT 网关,如果 NAT 网关的可用区宕机,其他可用区中的资源将无法访问互联网,要创建独立于可用区的架构,请创建一个 NAT 网关并配置您的路由以确保资源使用同一可用区中的 NAT 网关。
如果我在不同的子网中有多个 EC2,它们如何共享一个 NAT 网关?我理解错了吗?下面是我尝试创建 NAT 网关时看到的屏幕截图
我正在尝试使用服务之间的服务发现来实现多服务 ECS 集群。我正在尝试按照教程创建使用 Amazon ECS CLI 使用服务发现的 Amazon ECS 服务。但是,它不包括完整的工作示例
我所做的是定义两个服务,通过使用定义:
docker-compose.ymlecs-params.yml我可以轻松调出 ECS 集群和这两个服务。一切看起来都不错。但其中一项服务需要公共 IP 地址。所以在相应的ecs-params.yml文件中,我把assign_public_ip: ENABLED. 但是没有分配公共 IP 地址。在 ECS 控制台中,服务详细信息显示Auto-assign public IP DISABLED为 ,对于任务,它列出了私有 IP 地址,没有公有 IP 地址。
不幸的是,根据网络模式任务网络awsvpc的文档,这似乎是不可能的:
该
awsvpc网络模式不为使用EC2启动类型任务提供任务ENIS与公网IP地址。要访问 Internet,应在配置为使用 NAT 网关的私有子网中启动使用 EC2 启动类型的任务。有关更多信息,请参阅 Amazon VPC 用户指南 中的 NAT 网关。入站网络访问必须来自使用私有 IP 地址的 VPC 内,或从 VPC 内通过负载均衡器路由。在公共子网中启动的任务无法访问 Internet。
问题:如何解决 AWS ECS EC2 启动类型的这种限制?
我不明白为什么 EC2 启动类型不支持公共 IP 地址?或者 - 我是否使用不同的网络模式,然后分配一个公共 …
我已在私有子网中创建了一个 EC2 实例(即路由表没有附加 Internet 网关)。
附加到私有子网的路由表将 0.0.0.0/0 路由到 NAT 网关。
EC2 实例具有正确的 SSM 角色并显示在 SSM 托管实例列表中。
我可以通过会话管理器在实例上启动会话。
但是,当我从路由表中删除 NAT 网关映射时,会话连接无法连接。
我的理解是 NAT 仅用于传出流量。因此,我假设会话管理器连接是通过内部 AWS 网络而不是公共互联网路由的,因为该实例无法访问。但是我不明白为什么该实例试图通过公共互联网路由流量。我原本预计,要将自身注册为 SSM 托管实例,实例上的 SSM 代理将需要互联网访问。但我不明白为什么会话管理器会要求实例具有互联网访问权限?
谢谢。
我编写了一个 lambda 函数来访问数据库,因此第一步是从 AWS Secrets Manager 获取机密。我有一个私有 VPC 以及与 lambda 函数关联的子网、NAT 网关和安全组。我也有secretsmanager.Secret.grantRead(lambda_exec_role)所以 lambda 应该可以访问 Secrets Manager。
出于某种原因,当我在 API Gateway 中测试它时,我在 CloudWatch 中得到了 "errno": "ETIMEDOUT" 和 "code": "NetworkingError"。从我在 API 中打印的日志来看,获取机密失败了。
我也试图为秘密管理器添加VPC的端点在这里,但仍然得到了同样的错误。
感谢这里的任何人可以帮助我解决这个问题或提供一些提示。
非常感谢!
amazon-web-services amazon-vpc aws-lambda secretsmanager aws-nat-gateway
我正在尝试学习 Aws cloud Formation ,我正在尝试创建 VPC,如图所示。它包含三个公共子网、私有子网、natgateway 和 Internetgateway,以及公共和私有路由表。我试图通过云形成来实现它,但获得弹性 IP 的例外。
我已经创建了模板,但是当我尝试在云形成上创建堆栈时,出现错误
"The elastic-ip ID 'xx.xxx.xx.xxx' is malformed (Service: AmazonEC2; Status Code: 400; Error Code: InvalidElasticIpID.Malformed; Request ID: 2e3a9f8c-5a7e-482e-869c-8a0e46a08f27; Proxy: null)"
Run Code Online (Sandbox Code Playgroud)
。我正在尝试将弹性 IP 连接到 NatGateway 并出现上述错误。请指导我该怎么做。
{
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"ExampleEc2Instance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t2.micro",
"ImageId" : "ami-047a51fa27710816e",
"AvailabilityZone" : "us-east-1a",
"SecurityGroupIds" : [{
"Ref":"ExampleSecurityGroup"
}],
"SubnetId" : {
"Ref":"public2A"
}
}
},"ExampleEc2InstancePrivate": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t2.micro",
"ImageId" : "ami-047a51fa27710816e",
"AvailabilityZone" : "us-east-1a", …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation aws-nat-gateway aws-cloudformation-custom-resource
我对此有点迷失——我已经关注了AWS文档,但似乎我找不到更多的东西了。情况摘要是,我在 VPC 内有一个 EC2 实例,尽管按照 Amazon AWS 说明为 VPC 设置 NAT,但它无法访问 Internet。详情如下:
我有一个 VPC,其中有一个子网 (CIDR 10.0.0.0/24) 和一个 EC2 实例(它仅在 VPC 内具有私有 IP 地址,10.0.0.168)
我创建了一个互联网网关并将其附加到上述 VPC。
我为入站和出站流量创建了一个网络 ACL,其所有流量允许为 0.0.0.0/0,并将该 ACL 附加到 VPC 的唯一子网。
VPC 子网安全组还允许 0.0.0.0/0 的所有流量进出
我创建了一个 NAT 网关,它在 VPC 内有一个私有 IP 地址 (10.0.0.95) 和一个公共弹性 IP 地址(假设是 18.154.34.97,但我认为这并不重要)。该 NAT 网关连接到 VPC 的唯一子网。
我创建了与 VPC 子网 (10.0.0.0/24) 关联的路由表,并包含两个条目:
Destination Target
10.0.0.0/24 local
0.0.0.0/0 nat-gateway-id
Run Code Online (Sandbox Code Playgroud)
为了访问 VPC,我创建了一个地址范围为 10.1.0.0/22 的客户端 VPN 终端节点,并将其与正确的 VPN 子网关联。
我可以使用 OpenVPN 连接到客户端 VPN 终端节点并通过 ssh 进入 EC2 实例。但是,从那时起我无法访问互联网。同样,当连接到此客户端 …
我最近通过 CDK 在 AWS 上设置了一个应用程序。该应用程序由一个 Dockerized Nodejs 应用程序组成,该应用程序连接到 RDS 实例,并且还具有 Redis 缓存层。应用程序部署几天后,即使流量很小,成本也比我预期的要高得多。查看成本浏览器后,看起来一半的成本来自 NAT 网关。
在我当前的设置中,我创建了两个 VPC。一个用于应用程序堆栈,另一个用于 CodePipeline。我需要为管道添加一个,因为如果没有它,我在 CodeBuildAction 步骤期间尝试拉取 Docker 映像时会遇到速率限制。
我对网络部分不太满意,但我觉得涉及额外的资源。管道VPC有3个NAT网关和3个EIP。这些最终只是坐在那里等待下一次部署,这似乎是一种巨大的浪费。似乎为 CDK 中附加的 VPC 的每个构造分配了一个新的网关 + EIP。我可以让它重复使用同一个吗?有没有其他方法可以完全添加 VPC 并且不受 Docker 限制速率?
我还发现非常令人惊讶(我可能只是天真),NAT 网关到目前为止与我当前的 Fargate 任务成本同样昂贵。有没有一种替代方案可以满足我的目的,但成本要低一些?
无论如何,这是我的两个堆栈:
// pipeline-stack.ts
import { SecretValue, Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import { Artifact, IStage, Pipeline } from "aws-cdk-lib/aws-codepipeline";
import {
CloudFormationCreateUpdateStackAction,
CodeBuildAction,
CodeBuildActionType,
GitHubSourceAction,
} from "aws-cdk-lib/aws-codepipeline-actions";
import {
BuildEnvironmentVariableType,
BuildSpec,
LinuxBuildImage,
PipelineProject,
} from "aws-cdk-lib/aws-codebuild";
import …Run Code Online (Sandbox Code Playgroud) 我创建两个 VPC,每个 VPC 拥有一个私有子网,每个私有子网拥有一个 EC2 实例(具有 IAM 策略“AmazonSSMManagedInstanceCore”的角色)。这两种环境的唯一区别在于是否有 NAT 网关。
我尝试通过会话管理器连接这两个 EC2 实例。具有 NAT 网关的 VPC 中的 EC2 实例可以访问,但其他 EC2 实例无法访问。
问题
amazon-ec2 amazon-web-services amazon-vpc aws-session-manager aws-nat-gateway
amazon-vpc ×6
nat ×2
amazon-ec2 ×1
amazon-ecs ×1
aws-cdk ×1
aws-cloudformation-custom-resource ×1
aws-lambda ×1
ssm ×1