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 Antwort
0

【以下的回答经过翻译处理】 看起来你没有配置Apache监听端口8080。

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen