AWS App Mesh를 사용한 Amazon ECS의 Blue/Green 배포

4284 단어 ECSAWS
AWS Containers Advent Calendar 2020의 8일째 기사입니다.

이 기사에서는 AWS App Mesh을 사용하여 Amazon ECS에서 Blue/Green 배포를 수행하고 싶습니다.

AWS App Mesh란 무엇입니까?



시작하기 전에 AWS App Mesh를 간략하게 소개합니다.

AWS App Mesh는 서비스 간 상호 통신을 쉽게 제어하고 모니터링하는 서비스 메쉬입니다.

컨트롤 플레인은 AWS App Mesh에서 관리하며 Envoy proxy를 데이터 플레인으로 사용합니다.
AWS App Mesh에서 정의한 리소스를 사용하여 아래 그림과 같은 네트워크 모델을 구축하면 네트워크 모델이 Envoy 설정으로 변환되어 데이터 플레인인 Envoy proxy에 배포됩니다.

20201014 AWS Black Belt Online Seminar AWS App Mesh Deep Dive


여기서 네트워크 모델을 위의 그림과 같이 구성한 경우 Virtual Router에서 요청을 배분할 Virtual Node의 가중치와 연결을 변경하여 client인 Virtual Node의 요청 대상을 변경합니다. 없이 Blue/Green 배포를 수행할 수 있습니다.

실현 정책



이번에는 샘플로 다음 그림과 같은 간단한 애플리케이션을 준비합니다.

  • Frontend service, Backend service는 각각 다른 ECS 서비스
  • Frontend service는 요청을 받은 후 Backend service에서 필요한 정보를 가져옵니다
  • .
  • Frontend service는 Virtual Service에서 Backend service에 요청 보내기

  • 이 어플리케이션에 대해서, 이하와 같이 네트워크 모델을 구축해 둡니다.
  • Backend service 서비스로 구성된 Virtual Service 공급자로 Virtual Router 설정
  • 1로 설정된 Virtual Router의 Route에서 Backend service (blue)Backend service (green)를 대상으로 설정

  • Route 타겟의 가중치는 blue : green = 1 : 0 으로 한다

  • 이 상태에서 Route 대상의 가중치를 변경하여 Blue/Green 배포를 수행할 수 있습니다.

    동작 검증



    그러면 실제로 동작을 확인하고 싶습니다.

    시작하기 전에 Blue/Green 배포 전 Frontend service에 요청을 던져 보겠습니다.
    $ curl -s $ENDPOINT | jq
    {
      "message": "\"blue\""
    }
    

    위와 같이 blue 환경에 대한 정보를 얻었습니다.

    이 상태에서 Route 대상의 가중치를 변경합니다.
    $ cat update-route.json
    {
        "meshName": "advent-calendar",
        "routeName": "default",
        "spec": {
            "httpRoute": {
                "action": {
                    "weightedTargets": [
                        {
                            "virtualNode": "http-server-blue",
                            "weight": 0
                        },
                        {
                            "virtualNode": "http-server-green",
                            "weight": 1
                        }
                    ]
                },
                "match": {
                    "prefix": "/"
                }
            },
            "priority": 1
        },
        "virtualRouterName": "http-server-vr"
    }
    
    $ aws appmesh update-route --cli-input-json file://update-route.json
    ...
    

    변경 후 Frontend service 다시 요청을 던져보십시오.
    $ curl -s $ENDPOINT | jq
    {
      "message": "\"green\""
    }
    

    무사히 green 환경의 정보가 취득되는 것을 확인할 수 있었습니다.

    요약



    이 기사에서는 AWS App Mesh를 사용하여 Amazon ECS의 Blue/Green 배포를 수행했습니다.
    이번 단계에서는 blue 환경에서 green 환경으로 트래픽 전환을 한번에 실시했습니다. 가능합니다.

    이 정보가 Amazon ECS에서 Blue/Green 배포를 고려 중이라면 조금이라도 도움이 되길 바랍니다 🙌

    좋은 웹페이지 즐겨찾기