AWS不健康的目标组实例。
0
【以下的问题经过翻译处理】 我正在 Udacity 从事一个 AWS 项目,并部署一个具有弹性负载均衡器、自动缩放组、侦听器、侦听器规则、安全组和目标组的基础设施。我的问题是目标组中实例的健康检查状态总是导致不健康的实例,因此我无法调用负载均衡器 DNS url 或实例的 ip。我总是有 502 坏网关。我做错了什么。这是我的代码:
描述:>
xxx / 优达学城 2023
参数:
环境名称:
描述:将作为资源名称前缀的环境名称
类型:字符串
我的启动模板版本号:
类型:字符串
默认值:1
资源:
LBSec 组:
类型:AWS::EC2::SecurityGroup
特性:
GroupDescription:允许 http 到我们的负载均衡器
VpcId:
Fn::导入值:
!Sub "${EnvironmentName}-VPCID"
安全组入口:
- IP协议:TCP
从港口:80
到港口:80
CidrIp:0.0.0.0/0
SecurityGroupEgress:安全组。
- IP协议:TCP
从港口:80
到港口:80
CidrIp:0.0.0.0/0
网络服务器安全组:
类型:AWS::EC2::SecurityGroup
特性:
GroupDescription:仅允许从本地访问我们的主机和 SSH
VpcId:
Fn::导入值:
!Sub "${EnvironmentName}-VPCID"
安全组入口:
- IP协议:TCP
从端口:8080
至港口:8080
CidrIp:0.0.0.0/0
- IP协议:TCP
从港口:22
至港口:22
CidrIp:0.0.0.0/0
安全组出口:
- IP协议:TCP
从端口:0
ToPort: 65535 #结束端口
CidrIp:0.0.0.0/0
我的 Web 应用程序启动模板:
类型:AWS::EC2::LaunchTemplate
特性:
启动模板数据:
用户数据:
Fn::Base64: !Sub |
#!/bin/庆典
易于获取更新-y
apt-get 安装 apache2 -y
systemctl 启动apache2.service
cd /var/www/html
echo "Udacity 演示 Web 服务器启动并运行!" > 索引.html
图片 ID:ami-0a261c0e5f51090b1
密钥名称:mykey
安全组 ID:
- sg-01ad772aba0f98d98 # 然后记下来自 AWS 控制台的安全组 ID:使用 Web 服务器 SecurityGroup ID
InstanceType: t3.medium # Amazon 对特定机器的命名法,即多少 RAM 和哪个 CPU
# 在这里指定我们需要 10 GB 的硬盘驱动器给这台机器,一个驱动器就足够了
块设备映射:
- DeviceName: "/dev/sdk" # 我把硬盘放在哪里,你可以创建文件夹的挂载点
EB:
VolumeSize: '10' # 这台机器需要多少硬盘空间
网络应用组:
类型:AWS::AutoScaling::AutoScalingGroup
特性:
VPC 区域标识符:
- Fn::ImportValue: !Sub "${EnvironmentName}-PUB-NETS"
启动模板:
LaunchTemplateId: !Ref myWebAppLaunchTemplate # 强制
版本:!Ref myLaunchTemplateVersionNumber # mandantory
最小尺寸:“3”
最大尺寸:“5”
TargetGroupARN:
- 参考:WebAppTargetGroup
WebAppLB:
类型:AWS::ElasticLoadBalancingV2::LoadBalancer
特性:
子网:
- Fn::ImportValue: !Sub "${EnvironmentName}-PUB1-SN"
- Fn::ImportValue: !Sub "${EnvironmentName}-PUB2-SN"
安全组:
- 参考:LBSecGroup
听众:
类型:AWS::ElasticLoadBalancingV2::Listener
特性:
默认操作:
类型:前锋
TargetGroupArn:
参考:WebAppTargetGroup
负载均衡器Arn:
参考:WebAppLB
端口:'80'
协议:HTTP
ALBListenerRule:
类型:AWS::ElasticLoadBalancingV2::ListenerRule
特性:
动作:
- type: forward #转发请求到指定的目标组
TargetGroupArn: !Ref 'WebAppTargetGroup'
状况:
- 字段:路径模式
值:[/]
ListenerArn: !Ref 'Listener'
优先级:1
Web 应用目标组:
类型:AWS::ElasticLoadBalancingV2::TargetGroup
特性:
HealthCheckIntervalSeconds:30
健康检查路径:/
健康检查协议:HTTP
健康检查超时秒数:15
健康阈值计数:2
不健康阈值计数:5
端口:8080
协议:HTTP
VpcId: #资源创建在哪个VPC
Fn::导入值:
Fn::Sub: "${EnvironmentName}-VPCID"
在创建上述基础设施之前,我需要在下面创建堆栈:
参数:
环境名称:
描述:将作为资源名称前缀的环境名称
类型:字符串
VpcCIDR:
说明:请输入此 VPC 的 IP 范围(CIDR 表示法)
类型:字符串
默认值:10.0.0.0/16
公共子网 1CIDR:
说明:请输入第一个 Availab 中公共子网的 IP 范围(CIDR 表示法)功能区
类型:字符串
默认值:10.0.0.0/24
公共子网 2CIDR:
说明:请输入第二个可用区中公共子网的 IP 范围(CIDR 表示法)
类型:字符串
默认值:10.0.1.0/24
私有子网 1CIDR:
说明:请输入第一个可用区中私有子网的 IP 范围(CIDR 表示法)
类型:字符串
默认值:10.0.2.0/24
私有子网 2CIDR:
说明:请输入第二个可用区中私有子网的 IP 范围(CIDR 表示法)
类型:字符串
默认值:10.0.3.0/24
资源:
专有网络:
类型:AWS::EC2::VPC
特性:
CidrBlock: !Ref VpcCIDR
EnableDnsHostnames: true
标签:
- 关键:姓名
值:!Ref 环境名称
互联网网关:
类型:AWS::EC2::InternetGateway
特性:
标签:
- 关键:姓名
值:!Ref 环境名称
互联网网关附件:
类型:AWS::EC2::VPCGatewayAttachment
特性:
InternetGatewayId: !Ref InternetGateway
VpcId: !Ref VPC # 引用之前创建的VPC
# 在 AZ0 和 AZ1 中分别创建 2 个公共子网,除了 MapPublicIpOnLaunch 字段中的更改值:true。
# 将此字段标记为 True 将启用公有子网的自动分配公有 IP 地址字段
公共子网 1:
类型:AWS::EC2::子网
特性:
VpcId: !Ref VPC # 引用之前创建的VPC
AvailabilityZone: !Select [0, !GetAZs ""]
CidrBlock: !Ref PublicSubnet1CIDR # 引用 PublicSubnet1CIDR 参数
MapPublicIpOnLaunch: true # 子网是否自动获取 IP 地址
标签:# 使用标签命名您的子网,以便在您创建许多子网时进行跟踪。
- 关键:姓名
值:!Sub ${EnvironmentName} 公共子网 (AZ1)
公共子网 2:
类型:AWS::EC2::子网
特性:
VpcId: !Ref VPC # 引用之前创建的VPC
AvailabilityZone: !Select [1, !GetAZs ""]
CidrBlock: !Ref PublicSubnet2CIDR # 引用 PublicSubnet2CIDR 参数
MapPublicIpOnLaunch:真
标签:
- 关键:姓名
值:!Sub ${EnvironmentName} 公共子网 (AZ2)
私有子网 1:
类型:AWS::EC2::子网
特性:
VpcId: !Ref VPC # 引用之前创建的VPC
AvailabilityZone: !Select [0, !GetAZs ""] # 注意我们的私有子网不共享可用性区域。
# 我们将它们分开,正如我们在上一课的图表中显示的那样。
# 为此,!GetAZs‘’ 函数获取您所在地区的可用区列表,这些可用区的索引为 0、1 等。
# 然后,!select [0, !GetAZs‘’] 只返回第一个 AZ。
CidrBlock: !Ref PrivateSubnet1CIDR # 引用 PrivateSubnet1CIDR 参数
MapPublicIpOnLaunch:假
标签:
- 关键:姓名
值:!Sub ${EnvironmentName} 私有子网 (AZ1)
私有子网 2:
类型:AWS::EC2::子网
特性:
VpcId: !Ref VPC # 引用之前创建的VPC
AvailabilityZone: !Select [1, !GetAZs ""] # the!Select [ 0, !GetAZs '' ] 返回您所在地区所有可用区列表中的第一个可用区。
# 同样,对于 PrivateSubnet2,!Select [ 1, !GetAZs '' ] 将返回第二个 AZ。
CidrBlock: !Ref PrivateSubnet2CIDR # 引用 PrivateSubnet2CIDR 参数
MapPublicIpOnLaunch:假
标签:
- 密钥:NameAW
值:!Sub ${EnvironmentName} 私有子网 (AZ2)
# AWS::EC2::EIP中的EIP代表Elastic IP。
# 这将为我们提供一个已知/恒定的 IP 地址,而不是一次性或不断变化的 IP 地址。
# 当你有依赖于特定 IP 地址的应用程序时,这很重要
NatGateway1EIP:
类型:AWS::EC2::EIP
取决于:InternetGatewayAttachment
特性:
域:vpc
# 使用 DependsOn 属性来保护您的依赖项不会在没有适当要求的情况下被创建。
# 在上面的场景中,EIP 分配只会在 InternetGatewayAttachment 完成后发生
NatGateway2EIP:
类型:AWS::EC2::EIP
取决于:InternetGatewayAttachment
特性:
域:vpc
NatGateway1:
类型:AWS::EC2::NatGateway
特性:
AllocationId: !GetAtt NatGateway1EIP.AllocationId
SubnetId: !Ref PublicSubnet1
NatGateway2:
类型:AWS::EC2::NatGateway
特性:
AllocationId: !GetAtt NatGateway2EIP.AllocationIdSubnetId: !Ref PublicSubnet2
公共路由表:
类型:AWS::EC2::路由表
特性:
VpcId: !Ref VPC
标签:
- 关键:姓名
值:!Sub ${EnvironmentName} 公共路由
默认公共路由:
类型:AWS::EC2::路由
DependsOn: InternetGatewayAttachment # 不需要,取决于 InternetGatewayAttachment 是否正常工作。
# 仅在 InternetGateway 附加到 VPC 时使用,在创建这些资源期间的任何其他时间不使用
特性:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0 # 规则意味着:如果你将流量路由到任何地址(0.0.0.0 是通配符地址或所有地址),
# 它们将被路由到 GatewayId InternetGateway 中的这个特定资源
# 0.0.0.0 表示只将流量发送到 InternetGateway
# 目标匹配和通配符地址 (0.0.0/0) 来引用所有流量。
# 当我们使用通配符地址 0.0.0.0/0 时,我们说的是任何发往世界上任何 IP 地址的地址,
# 发送给引用的GatewayId
GatewayId: !Ref InternetGateway
#VPC 有带路由的路由表,但可以有多个子网。 SubnetRouteTableAssociation 将规则关联到子网
公共子网 1 路由表关联:
类型:AWS::EC2::SubnetRouteTableAssociation
特性:
RouteTableId: !Ref PublicRouteTable
SubnetId: !Ref PublicSubnet1
公共子网 2 路由表关联:
类型:AWS::EC2::SubnetRouteTableAssociation
特性:
RouteTableId: !Ref PublicRouteTable
SubnetId: !Ref PublicSubnet2
私人路由表 1:
类型:AWS::EC2::路由表
特性:
VpcId: !Ref VPC
标签:
- 关键:姓名
值:!Sub ${EnvironmentName} 专用路由 (AZ1)
# 路由 DefaultPrivateRoute1 附加到 PrivateRouteTable1 并通过 NatGateway1 路由
# 将流量路由到通配符地址 0.0.0.0/0 然后将此流量发送到 NatGateway1,不要出口到外面
# 保留 VPC 内私有子网的流量
默认专用路由 1:
类型:AWS::EC2::路由
特性:
RouteTableId: !Ref PrivateRouteTable1
DestinationCidrBlock:0.0.0.0/0
NatGatewayId: !Ref NatGateway1
# 私有子网内的服务器没有 IP 地址
# 即使将它们放在公共子网上,如果没有 IP 地址也无法访问它们
# 将 PrivateSubnet1 与路由表 PrivateRouteTable1 中的规则 DefaultPrivateRoute1 相关联
PrivateSubnet1RouteTableAssociation:
类型:AWS::EC2::SubnetRouteTableAssociation
特性:
RouteTableId: !Ref PrivateRouteTable1
SubnetId: !Ref PrivateSubnet1
私有路由表 2:
类型:AWS::EC2::路由表
特性:
VpcId: !Ref VPC
标签:
- 关键:姓名
值:!Sub ${EnvironmentName} 专用路由 (AZ2)
默认专用路由 2:
类型:AWS::EC2::路由
特性:
RouteTableId: !Ref PrivateRouteTable2
DestinationCidrBlock:0.0.0.0/0
NatGatewayId: !Ref NatGateway2
PrivateSubnet2RouteTableAssociation:
类型:AWS::EC2::SubnetRouteTableAssociation
特性:
RouteTableId: !Ref PrivateRouteTable2
SubnetId: !Ref PrivateSubnet2
输出:
# 在其他脚本或文件中使用此资源
# 我们将返回 VPC 的 ID 以及我们的环境名称:
专有网络:
描述:对创建的VPC的引用
值:!Ref VPC # 引用之前创建的 VPC
出口:
Name: !Sub ${EnvironmentName}-VPCID # 从参数中替换 EnvironmentName
公共子网:
描述:公共子网列表
Value: !Join [",", [!Ref PublicSubnet1, !Ref PublicSubnet2]] # join 表示将几个字符串放在一起
出口:
名称:!Sub ${EnvironmentName}-PUB-NETS
# Ref 获取 PublicSubnet1 和 PublicSubnet2 的 ID
私有子网:
描述:私有子网列表
值:!Join [",", [!Ref PrivateSubnet1, !Ref PrivateSubnet2]]
出口:
名称:!Sub ${EnvironmentName}-PRIV-NETS
公共子网 1:
说明:对第一个可用区中公共子网的引用
值:!Ref PublicSubnet1
出口:
名称:!Sub ${EnvironmentName}-PUB1-SN
公共子网 2:
说明:对第二个可用区中公共子网的引用
值:!Ref PublicSubnet2
出口:
名称:!Sub ${EnvironmentName}-PUB2-SN
私有子网 1:
说明:对 1st Avail 中私有子网的引用能力
1 回答
- 最新
- 投票最多
- 评论最多
这些答案有用吗?为正确答案投票,以帮助社区从您的知识中受益。
相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 7 个月前
- AWS 官方已更新 2 年前