나는 어떤 새로운 프로젝트를 시작할때면 항상 개발환경 구성에 애를 먹곤 했다.
앞으로는 빠른 환경구성을 위해 "개발을 위한 개발"이라는 타이틀로 정리를 할까한다.

나보다 트렌디한 개발자의 조언으로 알게된 배포 자동화

당시 회사에서는 AWS의 Elastic Beanstalk에 압축파일을 직접 업로드하는 방식을 사용하고 있었다.
코드 작성 -> 빌드 -> 압축 -> EB에 업로드. 그리고 히스토리관리를 위해 git까지 관리해야하니 정말 귀찮은 방식이었다.
하지만 pipeline 방식을 사용하면 git push & merge만 해주면 된다.

아래에 "Bitbucket의 pipeline을 통한 Elastic Beantalk 배포자동화" 세팅 순서를 정리해봤다.

순서

  1. AWS IAM에서 Access key 생성
  2. Bitbucket에 Access key 등록
  3. bitbucket-pipelines.yml 작성
  4. 진행 중 마주친 문제들...

서버 Access key 생성

AWS IAM - 사용자 - 사용자추가 - 프로그래밍 방식 액세스 체크
여기서 ACCESS KEY ID와 VALUE가 발급된다.
사용자 권한은 최소한의 권한만 부여한다.

Bitbucket에 Access key 등록

Bitbucket - Setting - Repository variables에 등록한다

 AWS_ACCESS_KEY_ID    : IAM에서 발급받은 ACCESS KEY ID
 AWS_DEFAULT_REGION   : ap-northeast-2
 APPLICATION_ENV      : Elastic Beanstalk 환경이름
 APPLICATION_NAME     : Elastic Beanstalk 애플리케이션 이름
 AWS_SECRET_ACCESS_KEY: IAM에서 발급받은 ACCESS KEY의 VALUE

.ebextensions 작성

option_settings:
    aws:elasticbeanstalk:container:nodejs:
        NodeCommand: "npm start"
        GzipCompression: true
    aws:elasticbeanstalk:container:nodejs:staticfiles:
        /public: public

bitbucket-pipelines.yml 작성

image: node:10.15.0

pipelines:
  branches:
    master:
      - step:
          caches:
            - node
          script:
            - apt-get update && apt-get install -y python-dev
            - curl -O https://bootstrap.pypa.io/get-pip.py
            - python get-pip.py
            - pip install awsebcli
            - eb init <애플리케이션 이름> -r ap-northeast-2 -p Node.js
            - eb deploy <환경 이름>

진행중 마주친 문제들...

Bitbucket은 pipeline 빌드 횟수와 시간에 제한이 있어서 이를 초과시 요금 결제를 하지 않으면 다음 달까지 더 이상 빌드를 할 수 없었다. 이 점을 모르고 테스트를 하는 바람에 빌드 시간이 초과돼서 어쩔 수 없이 결제를 해야했다. (회사 돈으로...)

Backend를 Node.js로 개발을 했는데 Elastic Beanstalk은 Node.js서버를 8081포트로 실행한다. 때문에 Product 서버 포트를 8081로 작성해야한다.