더 이상 tistory 블로그를 운영하지 않습니다. glanceyes.github.io에서 새롭게 시작합니다.

새소식

Back-End

AWS CodeDeploy로 배포할 때 환경변수 사용하는 방법, Parameter Store

  • -

AWS CodeDeploy 배포 과정에서 사전에 정의한 환경변수 사용하기

 

AWS CodeDeploy에서는 코드를 배포할 때 ~/.bashrc에서 정의한 환경변수를 쓸 수 없다.

그래서 배포 시 로컬에서 기대한 것과 달리 오류가 발생할 수 있다.

필자는 DB 연결을 환경변수로 정의했는데, AWS EC2에서 vi ~/.bashrc로 정의한 환경변수를 CodeDeploy 배포 과정에서 사용할 수 없어 DB 연결이 제대로 되지 않는 현상이 발생했다.

 

etc/.profile.d/codedeploy.sh에 등록한다?

 

etc/.profile.d/codedeploy.sh에 환경변수를 등록하면 된다는 글이 종종 보이는데, 예전 방법인 건지 적용이 안 된다.

 

 

AWS Parameter Store

 

그래서 AWS Parameter Store에서 직접 파라미터를 등록하고 이를 배포할 때 가져오는 방법으로 해결했다.

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/systems-manager-parameter-store.html

 

AWS Systems Manager Parameter Store - AWS Systems Manager

AWS Systems Manager Parameter Store AWS Systems Manager의 기능인 Parameter Store는 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공합니다. 암호, 데이터베이스 문자열, Amazon Machine Image(AMI

docs.aws.amazon.com

 

암호화만 하지 않으면 무료이고, 변수 설정과 값 지정도 간편해서 사용하기 쉽다.

 

그전에 AWS 자격증명이 필요한데, 아래 글에서 EC2에서 AWS 자격 증명을 하는 방법을 참고했다.

https://fgh0296.tistory.com/51

 

[systems manager] parameter store

사용 계기 배포 시 서버에 환경변수 값을 전달하기 위해서 사용하였다. 서버에 환경설정 값을 전달하는 경우가 적잖이 있다. 예를 들어 서버가 구동되는 포트번호와 DB의 비밀번호, api key 등이

fgh0296.tistory.com

 

 

이 자격 증명은 CodeDeploy에 관한 자격 증명인데, 기존에 사용하는 key가 있으면 그걸 사용하면 되고, 없거나 잊어버렸으면 새로 하나 만들자.

 

AWS Access Key 발급하는 방법은 아래 링크에 자세히 나와 있다.

https://lannstark.tistory.com/66

 

AWS Access Key 발급받고 사용하기

AWS의 Access Key는 CLI를 사용하거나 AWS의 API를 호출할때 자격증명용으로 사용된다. 발급받는법 AWS에서 Access Key를 발급받는 방법을 먼저 알아보자. 1. IAM을 검색해서 들어간다 2. 사용자 추가 (등록

lannstark.tistory.com

스크린샷 2022-06-16 오후 7.38.51

제대로 생성이 되었으면 저렇게 AwsCodeDeployFullAccess가 사용자 권한 정책에 있어야 한다.

 

먼저 EC2에서 다음 명렁어를 실행한다.

apt-get install awscli
aws configure

 

이후 자격 증명에 필요한 값을 차례대로 입력한다.

 

AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]: json 

 

그 다음 배포 과정에서 실행하는 코드 중 적절한 곳에 환경 변수를 할당하는 코드를 삽입한다.

필자는 AfterInstall hook에서 실행되는 after_install.sh 코드에 삽입했다.

이건 케이스마다 다를 것이다.

 

아래 appspec.yml은 AWS CodeDeploy를 통해 코드를 배포할 때 hook마다 무엇을 실행할 것인지를 정의하는 코드이다.

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/server
    overwrite: yes
file_exists_behavior: OVERWRITE

permissions:
  - object: /home/ubuntu
    pattern: '**'
    owner: ubuntu
    group: ubuntu

hooks:
  AfterInstall:
    - location: scripts/after_install.sh
      timeout: 2400
      runas: ubuntu

 

아래와 같은 형식으로 Parameter Store에서 값을 가져와 환경변수를 지정해준다.

export [환경변수명]=$(aws ssm get-parameters --region [AWS region명] --names [Parameter Store에서 정한 변수명] --query Parameters[0].Value | sed 's/"//g')

 

다음은 RECJOON 프로젝트에서 진행했을 때 Parameter Store를 통해 정의한 환경변수이다.

export RECJOON_RDS_HOST=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_RDS_HOST --query Parameters[0].Value | sed 's/"//g')
export RECJOON_RDS_PORT=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_RDS_PORT --query Parameters[0].Value | sed 's/"//g')
export RECJOON_RDS_USERNAME=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_RDS_USERNAME --query Parameters[0].Value | sed 's/"//g')
export RECJOON_RDS_PASSWORD=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_RDS_PASSWORD --query Parameters[0].Value | sed 's/"//g')
export RECJOON_RDS_DATABASE=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_RDS_DATABASE --query Parameters[0].Value | sed 's/"//g')

export RECJOON_SERVER_HOST=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_SERVER_HOST --query Parameters[0].Value | sed 's/"//g')
export RECJOON_SERVER_PORT=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_SERVER_PORT --query Parameters[0].Value | sed 's/"//g')

export RECJOON_RDS_MASTER_HOST=$(aws ssm get-parameters --region ap-northeast-2 --names RECJOON_RDS_MASTER_HOST --query Parameters[0].Value | sed 's/"//g')

 

Contents

글 주소를 복사했습니다

부족한 글 끝까지 읽어주셔서 감사합니다.
보충할 내용이 있으면 언제든지 댓글 남겨주세요.