AWS-IAM

hwany·2020년 2월 26일
1

AWS

목록 보기
1/2
post-thumbnail

AWS-IAM

여기서 배포할 때 CodeDeploy서비스를 이용해 jar파일을 전달하기 위해서 먼저 s3을 ci도구와 연동이 필요합니다. (CodeDeploy는 저장 기능이 없기 때문)

Circle CI가 AWS의 S3와 CodeDeploy에도 접근할 수 있도록 해보겠습니다.

S3

  • 일종의 파일 서버
  • 이미지 파일을 비롯한 정적 파일들을 관리하거나 배포 파일들을 관리하는 등의 기능을 지원

CodeDeploy

  • CodeDeploy는 깃허브 코드를 가져오는 기능을 지원하기 때문에 빌드도 하고 배포도 할 수 있지만, 그러면 CodeDeploy가 모든 것을 하게 될 떈 항상 빌드를 하게 되니 확장성이 많이 떨어짐

  • 빌드와 배포가 분리되어 있으면 예전에 빌드되어 만들어진 jar를 재사용하면 되기 때문에 분리하는 것을 추천

일반적으로 AWS 서비스에 외부 서비스가 접근할 수 없기 때문에 접근 가능한 권한을 가진 key를 생성해서 사용해야함
AWS에서는 이러한 인증과 관련된 기능을 제공하는 서비스로 IAM(Identity and Access Management)를 제공
IAM을 통해 CI도구가 AWS의 S3와 CodeDeploy에 접근할 수 있도록 함

1. IAM 사용자 추가 후 엑세스 유형 선택

2. 사용자 권한 설정

S3권한 및 CodeDeploy권한 설정
권한도 S3와 CodeDeploy를 분리해서 관리하기도 하지만 여기서는 합쳐서 관리

3. 태그등록

태그는 Name값을 지정

4. 권한 최종 확인

5. access key 확인

아래에 나온 [엑세스 키][비밀 엑세스 키] 는 Circle CI에서 사용될 키입니다.

6. Circle CI에 key등록

Circle CI의 프로젝트설정 중에 AWS Permission 부분에 키값을 입력합니다.

아래와 같이 다른 값들은 환경변수로 등록이 가능합니다.

7. S3

S3 버킷을 만드는 부분은 생략하였지만 이곳에 Circle CI에서 생성된 Build파일을 저장하도록 구성합니다. S3에 저장된 Build파일은 이후 CodeDeploy 에서 배포할 파일로 가져가도록 구성할 예정입니다. 또한 S3에 접근하려면 IAM의 키를 사용하여 접근합니다.

8. Circle CI 세팅

.circleci폴더의 config.yml파일에 세팅값을 입력합니다.

version: 2.1

orbs:
  aws-s3: circleci/aws-s3@1.0.13
  aws-code-deploy: circleci/aws-code-deploy@0.0.12

executors:
  my-executor:
    docker:
      - image: circleci/openjdk:8-jdk

    working_directory: ~/springboot2-webservice

jobs:
  build:
    executor: my-executor

    # OOM오류를 피하기 위해 JVM 및 Gradle을 구성
    environment:
      _JAVA_OPTIONS: "-Xmx3g" # Heap memory
      GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2"

    steps:
      # workflow에서 트리거된 git branch를 checkout
      - checkout

      # Download and cache depen에dencies, keys에 저장된 키로 캐시에 저장된 내용을 복사
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "build.gradle" }}

      - run:
          name: Downloading Dependencies
          command: ./gradlew dependencies

      - save_cache:
          paths:
            - ~/.gradle
          key: v1-dependencies-{{ checksum "build.gradle" }}  # build.gradle 파일에서 무언가가 변경 될 때마다 캐시가 재생성되며,이 프로젝트의 다른 브랜치는 동일한 캐시 키를 생성합니다.

      - run: ./gradlew clean build

      - run:
          name: before_deploy
          command: |
            tar cvzf springboot2-webservice.tgz scripts/*.sh appspec.yml build/libs/*.jar

      - persist_to_workspace:
          root: .
          paths: .

  deploy:
    executor: my-executor

    steps:
      - attach_workspace:
          at: .

      - aws-s3/copy:
          from: springboot2-webservice.tgz
          to: 's3://hwany-springboot-build'
          aws-region: AWS_DEFAULT_REGION
          
       
 workflows:
  version: 2.1

  build-deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: master

0개의 댓글