Cloud(AWS Pipeline을 통한 배포 자동화)

Rina's·2023년 7월 28일

코드스테이츠

목록 보기
85/96
post-thumbnail

AWS Pipeline을 통한 배포 자동화

인스턴스 역할 부여

[태그] cohort 공용태그 , Name 식별자 설정

[보안] -[IAM 역할] - [권한 추가] - [정책 연결]
AmazonS3FullAccess
AmazonEC2RoleforAWSCodeDeploy
AWSCodeDeployRole
AmazonSSMFullAccess

[신뢰관계] - service 에 "codedeploy.ap-northeast-2.amazonaws.com"
추가 하여 액세스 권한이 부여

프로젝트에 CodeDeploy, CodeBuild 설정파일 추가

appspec.yml

version: 0.0
os: linux

files:
  - source: /
    destination: /home/ubuntu/build

hooks:			# 각각의 셀 스크립트를 실행
  BeforeInstall:
    - location: server_clear.sh # 기존 build 디렉토리를 제거
      timeout: 3000
      runas: root
  AfterInstall:
    - location: initialize.sh # build 내부 실행 권한을 추가
      timeout: 3000
      runas: root
  ApplicationStart:
    - location: server_start.sh # DeployServer-0.0.1-SNAPSHOT.jar 실행
      timeout: 3000
      runas: root
  ApplicationStop:
    - location: server_stop.sh # 실행 중인 jar 종료
      timeout: 3000
      runas: root

scripts/initialize.sh

#!/usr/bin/env bash
chmod +x /home/ubuntu/build/**

scripts/server_clear.sh

#!/usr/bin/env bash
rm -rf /home/ubuntu/build

scripts/server_start.sh

#!/usr/bin/env bash
cd /home/ubuntu/build
sudo nohup java -jar DeployServer-0.0.1-SNAPSHOT.jar > /dev/null 2> /dev/null < /dev/null &

scripts/server_stop.sh

#!/usr/bin/env bash
sudo pkill -f 'java -jar'

buildspec.yml

version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11
  build:
    commands:
      - echo Build Starting on `date`
      - cd DeployServer
      - chmod +x ./gradlew
      - ./gradlew build
  post_build:
    commands:
      - echo $(basename ./DeployServer/build/libs/*.jar)
artifacts:
  files:
    - DeployServer/build/libs/*.jar
    - DeployServer/scripts/**
    - DeployServer/appspec.yml
  discard-paths: yes

CodeDeploy 구성

[애플리케이션 생성] :'EC2/온프레미스'로 설정
[배포 그룹 생성] : 인스턴스와 연결되있는 IAM 역할 선택
[환경 구성] : Amazon EC2 인스턴스 체크,
태그 그룹에 EC2 인스턴스의 이름인 Name 태그 키와 값을 선택
[로드 벨런서] : 추가 비용 생기기 싫으면 꺼두자
AWS 시스템 매니저 구성을 추가 하거나 CodeDeploy-Agent를 인스턴스에서 수동 설치

Pipeline 생성

새 서비스 역할로 역할을 추가하여 생성

소스 스테이지 추가(깃허브 사용)

소스 제공자 추가 - 연결 생성
인증 - Only select repositories, 레포지토리 선택하여 연결
출력 아티팩트 형식 - 'CodePipeline 기본값'으로 지정

빌드 스테이지 추가(AWS 코드빌드 사용)

빌드 프로젝트 생성
운영체제 선택 Amazon Linux 2
런타임 선택 Standart
이미지 선택 aws/codebuild/amazonlinux2-x86_64-standart:corretto11
빌드 사양 Buildspec 사용 - 설정파일 경로 설정 DeployServer/buildspec.yml

배포 스테이지 추가(AWS 코드디플로이 사용)

리전 선택 아시아 태평양(서울)
코드디플로이에서 생성한 애플리케이션 선택
빌드 스테이지에서 생성한 배포그룹 선택
파이프라인 생성

생성과 동시에 실행 -> 배포까지 과정 출력


새로운 버전을 github에 push하면 기존 버전의 배포에서 중단 없이 새로운 빌드 파일로 교체 배포된다

Parameter Store

인스턴스에 환경변수를 추가한다
의존 라이브러리 추가와 Parameter Store 설정파일이 필요하다
build.gradle

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-starter-parent:Hoxton.SR12"
	}
}

bootstrap.yml

aws:
  paramstore:
    enabled: true
    prefix: /spring-boot-aws
    name: be-0-SEYUN # 리소스 이름을 작성합니다.
    profileSeparator: _

[파라미터 생성]에서
이름(키)과 값을 쌍으로 등록한다
구분자를 기준으로
prefix(/spring-boot-aws)name(be-0-SEYUN)에 설정된 값
다음에 오는 마지막 경로를 실제로 사용되는 키 값으로 사용됨

profile
갭린이 리나

0개의 댓글