2

私はCloudFormationスタックを構築しています。私はポート80と443の両方をELBから同じECSコンテナにマップするにはどうすればよいですか?

  • Listener sおよびTargetGroup sのHostPort S 80及び443、及び
  • にマッピングContainerPort S 9000及び9002のためのPortMappingsを有するECS容器内のウェブアプリケーション、アプリケーションのロードバランサ(AWS::ElasticLoadBalancingV2::LoadBalancer)を有しますポート80でのHTTPとポート443でのHTTPSについて

私がServiceを定義するとき、1つのロードバランサ要素しか指定できません。 LoadBalancersは複数ですが、ドキュメントでは1つのロードバランサのみが許可されており、2つのロードバランサ要素を指定しても機能しないことが記載されています。どのようにして両方のポートをマッピングするのですか?

CloudSation JSONのサービス部分は、HTTPSの部分だけで動作します。 HTTPを同じコンテナにルーティングするように拡張できますか?そうでない場合、最良の解決策は何ですか?

"Service": { 
    "Type": "AWS::ECS::Service", 
    "DependsOn": ["AutoScalingGroup", "HTTPSListener"], 
    "Properties": { 
    "Cluster": { "Ref": "Cluster" }, 
    "DesiredCount": { "Ref": "InstanceCount" }, 
    "LoadBalancers": [ 
     { 
     "TargetGroupArn": { "Ref": "HTTPSTargetGroup" }, 
     "ContainerName": "nginx", 
     "ContainerPort": "9002" 
     } 
    ], 
    "Role": { "Ref": "ServiceRole" }, 
    "TaskDefinition": { "Ref": "TaskDefinition" } 
    } 
} 

CloudFormationソリューションも理想的ですが、APIソリューションも重要です。

別のロードバランサとコンテナインスタンスを使用してHTTP用に2番目のServiceを作成できますが、これは単純で経済的でもありません。

+0

HTTPSへのリダイレクトにのみポート80を使用していますか? – Andreas

+0

これまでのところ、CloudFormationやAWS APIでリダイレクトを行う方法は興味深いでしょう。ただし、コンテナは他のコンテキストで使用されるため、リダイレクトをコンテナに保持することが最善です。 –

答えて

1

私は、これらのオプションのいずれかを示唆している:

a)は、コンテナの起動プロセスの一環として、同じロードバランサの二つの異なるタスク定義でタスク(コンテナ)を登録する代わりに、の特徴でビルドを使用してECSサービス。

b)それぞれが自身のターゲットグループに接続された別のECSサービスを定義する。どちらのターゲットグループも同じALBにリンクしています。スタックを作成した後

+0

コンテナの2番目のインスタンス化を必要としないこれらのいずれかを実行する方法はありますか? –

+0

はい、オプションa)はコンテナの2回目のインスタンス化を必要としません。しかし、あなたは既に自分自身にすでに答えています。 :) – Andreas

+0

CloudFormationのみを使用したソリューション、ターゲットグループ(ホスト上のスクリプトなし)で自動的に更新されたホスト登録、またはその両方が私のものより優れています。投稿する前に2つのサービスのソリューションを試しましたが、ターゲットグループごとに異なるコンテナが開始されました。あなたはそれをしない方法の詳細を提供できますか? –

0

部分的な解決策は、手動でAPIを介してHTTPのターゲットグループとのインスタンスを登録することである。

autoscaling = boto3.client('autoscaling') 
auto_scaling_groups = autoscaling.describe_auto_scaling_groups(AutoScalingGroupNames=[auto_scaling_group_name]) 
instances = auto_scaling_groups['AutoScalingGroups'][0]['Instances'] 

elbv2 = boto3.client('elbv2') 
for instance in instances: 
    elbv2.register_targets(
     TargetGroupArn=http_target_group_arn, 
     Targets=[{'Id': instance['InstanceId'], 'Port': instance}] 
    ) 

これは、自動スケーリンググループ内で作成されたインスタンスから完全に許容答えではありません将来は自動的にHTTPターゲットグループに登録されません。インスタンスをリグで自分自身を登録できるようにする必要があります。私はそれを調べます。

関連する問題