aws cdk-如何防止它创建默认目标组?

50few1ms  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(366)

我们需要使用ec2创建一个ecs集群,并使用现有的应用程序负载均衡器。
经过多次尝试和错误,我设法使它工作,但它总是在端口80上创建一个额外的默认目标组。
这是我的代码(根据需要使用java):

  1. cluster = Cluster.Builder.create(scope, "my-ecs-cluster")
  2. .vpc(awsNetwork.getVpc())
  3. .capacity(
  4. AddCapacityOptions.builder()
  5. .instanceType(new InstanceType("m5n.xlarge"))
  6. .minCapacity(1)
  7. .maxCapacity(1)
  8. .desiredCapacity(1)
  9. .associatePublicIpAddress(true)
  10. .vpcSubnets(
  11. SubnetSelection.builder()
  12. .subnetType(SubnetType.PUBLIC)
  13. .availabilityZones(Arrays.asList("us-west-2a", "us-west-2c"))
  14. .build()
  15. )
  16. .build()
  17. ).build();
  18. taskDefinition = Ec2TaskDefinition.Builder.create(scope, "my-taskDefinition")
  19. .executionRole(Role.fromRoleArn(scope, "my-exec-role", "role-arn..."))
  20. .build();
  21. containerDef = ContainerDefinition.Builder.create(scope, "my-ecs-container")
  22. .essential(true)
  23. .memoryLimitMiB(2048)
  24. .memoryReservationMiB(2048)
  25. .image(ContainerImage.fromEcrRepository(
  26. Repository.fromRepositoryName(scope,
  27. "my-ecr",
  28. "my-image"
  29. ),
  30. "latest")
  31. )
  32. .taskDefinition(taskDefinition)
  33. .build();
  34. containerDef.addPortMappings(PortMapping.builder()
  35. .hostPort(0)
  36. .containerPort(443)
  37. .protocol(Protocol.TCP)
  38. .build());
  39. taskDefinition.setDefaultContainer(containerDef);
  40. ApplicationLoadBalancerLookupOptions balancerLookupOptions = ApplicationLoadBalancerLookupOptions.builder()
  41. .loadBalancerArn("arn:aws:my-alb-arn")
  42. .build();
  43. loadBalancer = ApplicationLoadBalancer.fromLookup(scope, "my-alb", balancerLookupOptions);
  44. balancedEc2Service = ApplicationLoadBalancedEc2Service.Builder.create(scope, "my-ec2-service")
  45. .cluster(cluster)
  46. .desiredCount(1)
  47. .taskDefinition(taskDefinition)
  48. .loadBalancer(loadBalancer)
  49. .cpu(1)
  50. .memoryLimitMiB(2048)
  51. .build();
  52. balancedEc2Service.getService().addPlacementStrategies(PlacementStrategy.spreadAcross("attribute:ecs.availability-zone", "instanceId"));
  53. HealthCheck healthCheck = HealthCheck.builder()
  54. .path("/healthCheck")
  55. .protocol(software.amazon.awscdk.services.elasticloadbalancingv2.Protocol.HTTPS)
  56. .port("traffic-port")
  57. .unhealthyThresholdCount(2)
  58. .interval(Duration.seconds(30))
  59. .healthyThresholdCount(5)
  60. .timeout(Duration.seconds(5))
  61. .build();
  62. balancedEc2Service.getTargetGroup().setHealthCheck(healthCheck);
  63. ListenerCertificate listenerCertificate = ListenerCertificate.fromCertificateManager(Certificate.fromCertificateArn(scope, "dis-certificate-1", "arn:aws:acm:us-west-2:245459132561:certificate/d2962594-8a40-4f36-abd4-62a6d91d0250"));
  64. ApplicationTargetGroup targetGroup = ApplicationTargetGroup.Builder.create(scope, "dis-receiver-targetGroup")
  65. .protocol(ApplicationProtocol.HTTPS)
  66. .port(443)
  67. .healthCheck(healthCheck)
  68. .vpc(awsNetwork.getVpc())
  69. .build();
  70. ApplicationListener.Builder.create(scope, "dis-receiver-listener")
  71. .loadBalancer(loadBalancer)
  72. .defaultTargetGroups(Collections.singletonList(targetGroup))
  73. .protocol(ApplicationProtocol.HTTPS)
  74. .port(443)
  75. .certificates(Collections.singletonList(listenerCertificate))
  76. .build();
  77. balancedEc2Service.getService().attachToApplicationTargetGroup(targetGroup);


其中一个目标组是我在代码中创建的。
另一个是自动创建的,它指向端口80:

如果不使用 balancedEc2Service.getService().attachToApplicationTargetGroup(targetGroup); 我将其直接设置到服务中,例如:

  1. balancedEc2Service = ApplicationLoadBalancedEc2Service.Builder.create(scope, "my-ec2-service")
  2. .cluster(cluster)
  3. .desiredCount(1)
  4. .taskDefinition(taskDefinition)
  5. .loadBalancer(loadBalancer)
  6. .cpu(1)
  7. .memoryLimitMiB(2048)
  8. // New code
  9. .listenerPort(443)
  10. .protocol(ApplicationProtocol.HTTPS)
  11. .certificate(myCertificate)
  12. .domainName(myDomainName)
  13. .domainZone(myDomainZone)
  14. //
  15. .build();

它只创建一个targetgroup,并链接到ecs上的端口443:

但是,目标组本身位于端口80上,因此应用程序超时:

如何使用https配置单个目标组?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题