ALB+ECS의 동적 포트 매핑으로 롤링 업데이트

3288 단어 EC2도커ECSAWS

롤링 업데이트



ECS에서 롤링 업데이트를 수행하는 경우
Desired count와 Minimum percent, Maximum percent
설정해야합니다.

Desired count:4 min:50% max:100% 의 경우





최소 50%까지 감소하고 최대 100%까지 증가한다.
단번에 새로워지는 것이 아니라, 50%까지 축소해, 서서히 바뀌어 간다.

Desired count:4 min:100% max:200% 의 경우





최소한 100%는 유지하고 최대 200%까지 증가한다.
단번에 새 컨테이너를 배포할 수 있지만,
그만큼 자원이 필요합니다.

ALB 설정



ALB를 만들 때
ターゲットの登録でEC2インスタンスの登録は行わない。

나중에 컨테이너를 기동했을 때에, ALB가 자동으로 등록해 준다.

ECS 설정



ECS의 호스트 포트를 0으로 지정합니다.

(이번 컨테이너 포트는 3000을 사용하고 있습니다)

그렇게함으로써 호스트 포트는
컨테이너 인스턴스의 임시 포트 범위에서 동적으로 선택됩니다.
(최신 Amazon ECS-optimized AMI의 경우 32768-61000)

Desired count:4 min:50% max:100%에서 설정한다.



ECS의 서비스 등록시에 작성한 ALB를 설정한다.



동적으로 부여 된 포트는 대상 그룹에 등록됩니다.

여담 1 : 80포트에서 롤링 업데이트를 한다



처음에는 호스트 포트를 명시적으로 80으로 했다.

codepipeline에서 작업 정의를 업데이트하고 배포할 때
既に80が使用されている라는 오류가 발생합니다.
롤링 업데이트를 할 수 없었다.

하지만 80포트에서 롤링 업데이트하는 방법이 있었다.
ECSのMinimum percentを0%、Maximum percentを100%に設定する。
그렇게 하면 80포트에서 가동하는 컨테이너가 존재해도,
배포 시 0%가 되므로 롤링 업데이트는 가능해졌다.
だが、これだとダウンタイムが発生してしまう。
コンテナがデプロイされるまでの間にアクセスされた場合
503となるので、この方法は現実的に不可能である。

여담 2 : ALB의 헬스 체크가 죽는다



여러 컨테이너를 시작할 수 있었지만
ALB의 헬스 체크가 unhealthy가 되어 버린다.

EC2의 퍼블릭 IP에 해당 포트에서 액세스하면 표시할 수 있는데,
ALB 경유(도메인)로 액세스하면 503이 된다.

직전에 기본 인증을 설정했기 때문에,
ALB가 200을 돌려주지 않았는지 생각했지만
기본 인증을 제거해도 unhealthy가 되어 버린다.
単純に、ホストポート(32768-61000)を
セキュリティグループのインバウンドに設定し忘れていた。

쓸데없는 실수.

참고



htps : // chss 04. 하테나 bぉg. 코m/엔트리/2016/11/02/190000
htps : // 코 m / 타이신 / ms / e b759 a8 e c0c583fc5 e bd
htps : // 취해 s. 이오 / 2015 / 12 / 아 - ぇ w ぃ ん gs ー ー ー ー ー ー ー ー ー w w

좋은 웹페이지 즐겨찾기