ECS 배포 도구를 게시했습니다.

3877 단어 도커OSSECSAWS

개요



AWS ECS를 운영하기 위해 내부에서 개발한 배포 도구를 공개했습니다.

리포지토리



무엇을 할 수 있는가



Slack bot에 대해 deploy를 입력하면 ECS 클러스터에 대상 소스를 배포합니다. 또한 명령 기반 배포와 GitHub의 Push를 트리거로 한 자동 배포도 지원합니다.

기능 상세


  • 서비스 및 작업 스케줄링 배포, 작업 실행 지원
  • YAML 기반 태스크 정의
  • 환경 변수에 건네준 비밀치의 암호화·복호에 대응 (KMS)

  • 배포 형식
  • Slack을 사용한 대화 형 배포
  • 명령 기반 배포
  • GitHub의 Push를 트리거하는 자동 배포

  • 배포 상태를 시각화하는 웹 콘솔 제공
  • 배포 명령이 수행하는 작업
  • 이미지 빌드
  • 이미지 푸시 (ECR)
  • 작업 배포


  • 그림.



    웹 콘솔은 배포의 상태를 시각화합니다. "누가""언제""어디에""무엇을"배포했는지 한눈에 파악할 수 있습니다.



    상세 페이지에서 배포 상태를 확인할 수 있습니다.



    설정 파일



    배치 구성 파일과 태스크 정의 파일을 작성해야 합니다. 자세한 내용은 Wiki을 참조하십시오.

    태스크 정의 파일



    응용 프로그램 디렉토리 아래에 config/deploy/{services}.yml를 만듭니다. 이름은 무엇이든 상관 없습니다. 파일은 컨테이너별 태스크 스펙을 정의합니다. 지정 가능한 파라미터는 태스크 정의 매개변수 와 같습니다.
    환경 변수에 비밀번호와 같은 비밀 값을 전달하는 경우 KMS로 암호화된 값을 지정하는 것이 좋습니다. 값은 배포 시점에 해독되고 환경 변수로 확장됩니다.
    family: sandbox-productiton
    task_role_arn: ''
    network_ode: bridge
    container_definitions:
    - name: app
      image: ***.dkr.ecr.ap-northeast-1.amazonaws.com/sandbox-app-production:{{tag}}
      memory: 1024
      port_mappings:
      - container_port: 3000
        host_port: 0
        protocol: tcp
      essential: true
      environment:
      # Private value can be encrypted with KMS
      - name: SECRET_KEY
        value: ${***}
      readonly_root_filesystem: false
      log_configuration:
        log_driver: fluentd
        options:
          fluentd-address: ***:24224
          fluentd-async-connect: "true"
          tag: docker.sandbox-app-production
    

    배포 정의 파일



    배포 규칙을 정의한 config/deploy.yml 파일을 만듭니다. clusters 에 응용 프로그램을 배포할 클러스터와 서비스를 정의합니다.
    clusters:
      # クラスタ名
      - name: sandbox
        services:
          # サービス名
          production:
            # タスク定義ファイルの相対パス
            path: ./config/development.yml
    
            # コンテナごとのビルドファイル指定
            containers:
            - name: web
              build:
                # etc/docker/web/Dockerfileを参照
                context: ../etc/docker/web
    

    배포 형식



    명령 기반 배포



    대상 리포지토리 클러스터 서비스(필요한 경우 분기)를 지정하여 배포를 시작합니다.
    $ docker-compose run --rm rails thor genova:deploy service -r {repository} -c {cluster} -s {service} -b master
    

    Slack을 사용한 대화형 배포



    Slack App을 설정하면 deploy 명령이 대화식 배포를 시작합니다.



    GitHub의 Push를 트리거로 자동 배포



    Push 이벤트를 트리거로 특정 서비스에 자동 배포가 실행됩니다.
    auto_deploy:
    - branch: master
      cluster: sandbox
      service: production
    

    이 설정은 "master 브랜치에 Push를 감지했을 때 sandbox 클러스터의 production 서비스 배포"라는 의미입니다. 또한 실행 결과는 Slack에 통지됩니다.

    좋은 웹페이지 즐겨찾기