버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

펼치기
title목록 펼쳐서 보기...


패널
borderColor#6699ff
bgColor#ffffff
titleColorwhite
titleBGColor#6699ff
borderStylesolid
title목차


목차 영역

목차
maxLevel3
outlinetrue
stylenone
separatorpipe




펼치기
title버전 정보 업데이트

2021-04-12

  • 실습 UI 업데이트
  • Nodejs 버전 8.0 → 14.x로 전환

2019-09-26

  • 서버리스 기반 간단하게 테스트 해볼 수 있는 CI/CD 배포 파이프라인 구축 실습

...

  1. Lambda 함수 파일과, SAM template 2개의 파일을 직접 만들었습니다. 해당 파일을 CodeCommit 리포지토리에 체크인 합니다.

    코드 블럭
    languagebash
    themeDJango
    title코드 체크인
    git add .
    git commit -am "Initial commit"
    git push origin master



  2. CodeCommit 서비스의 AWS301Repo에 해당 코드가 코드 체크인 여부를 확인합니다.

...

  1. Image Added


CodePipeline 생성

  1. 배포 파이프라인을 생성합니다. AWS 관리콘솔에서 CodePipeline 서비스로 이동하고 Create pipeline 버튼을 클릭합니다.

...

  1. Image Added

  2. Step 1에서 Pipeline name은 AWS301-Pipeline 을 Service role은 New service role  을 체크하고 Next 버튼을 클릭합니다.
    Image Modified

  3. Step 2에서 Source provider는 AWS CodeCommit , Repository name은 AWS301Repo , Branch name은 master 로 선택하고 Next 버튼을 클릭합니다.

...

  1. Image Added


  1. Step 3에서 Build 환경을 구성합니다. Build provider는 AWS CodeBuild 를 선택하고, 하단의 Create project 버튼을 클릭합니다.

...

  1. Image Added

  2. Build를 위한 project를 생성합니다. Project name은 AWS301Build, Environment image는 Managed

...

  1. image 선택하고, OS는

...

  1. Ubuntu 선택합니다. 나머지는 동일하게 선택하고, Additional configuration에서 Timeout을 5분으로 변경합니다.

...

  1.  Buildspec 은 Insert build commands를 선택하고 Switch to editor를 클릭하여 아래의 buildspec 코드를 추가합니다.

    경고

    반드시 아래 버킷 이름은 시작할 때 생성한 S3 버킷 이름과 동일하게 변경하세요.


    코드 블럭
    languageyml
    themeRDark
    titlebuildspec yaml 파일
    linenumberstrue
    version: 0.2
    phases:
      install:
        runtime-versions:
          nodejs: 

...

  1. 14
      post_build:
        commands:
          - aws cloudformation package 
            --template-file template.yml 
            --s3-bucket aws301-devops-이부분을바꾸셔야합니다
            --output-template-file api-output.yml
            --region $AWS_DEFAULT_REGION
    artifacts:
      type: zip
      files:
        - template.yml
        - api-output.yml



    Image Added
    Image Added

...

  1. Image Added

  2. 성공적으로 Build project가 생성되면 자동으로 아래와 같이 구성됩니다. Next 버튼을 클릭합니다.

...

  1. Image Added

  2. Step 4의 배포 파이프라인은 추후 생성할 예정이므로 Skip deploy stage 버튼을 클릭합니다. 팝업 출력시 Skip 버튼을 클릭합니다.

...

  1. Image Added
    Image Added

  2. Step 5의 Review 화면에서 확인 후, Create pipeline 버튼을 클릭합니다.

...

  1. Image Added

CodePipeline 동작 확인

  1. CodePipeline이 Source에서 코드를 받아서 Build로 넘어가는 과정을 확인할 수 있습니다. 좌측 녹색은 완료, 파란색은 진행중, 붉은 색은 에러를 의미합니다. 
    Image Added

...

  1. Image Added

  2. 기다리면, Build 과정에서 에러가 발생하게 됩니다. 해당 에러가 발생하는 원인을 찾기 위해서 Details 를 클릭합니다.

...

  1. Image Added

  2. 좀 더 상세한 확인이 필요하기 때문에 Link to execution details 를 클릭합니다.
    Image Modified

  3. Build logs를 확인한 결과 Code Build에서 만들어진 아티팩트를 S3 버킷에 업로드(PutObject) 수행하려는 순간 권한이 없어서 AccessDenied 에러가 발생한 것을 확인할 수 있습니다.
    즉, CodeBuild에게 부여되어 있는 Role에 S3로 접근할 수 있는 권한을 추가하면 됩니다.
    Image Added

...

  1. Image Added

  2. 정책을 추가하기 위해 AWS 관리 콘솔의 IAM 서비스로 이동하고, CodeBuild에 부여된 Role을 찾고, 기존 Policy에서 Edit policy 버튼을 클릭합니다.

...

  1. Image Added

  2. 아래와 같이 Add ARN을 통해 해당 버킷에 대한 정보를 입력합니다.

...

  1. Image Modified

  2. ARN 정보는 다음과 같이 입력합니다. arn:aws:s3:::aws301-devops-

...

  1. 01012345678/* 여기서 계정번호에 따라서 다르게 입력하셔야 합니다. Add 버튼을 클릭합니다.

...

  1. Image Added

  2. 다음과 같이 설정이 되었으면 Review policy 버튼을 클릭합니다.

...

  1. Image Added

  2. Save changes 버튼을 클릭하여 저장합니다.

...

  1. Image Added

  2. 다시 CodePipeline 재가동합니다. Pipeline에서 Build Stage의 우측 상단의 Retry 버튼을 클릭합니다.

...

  1. Image Added

  2. 아래와 같이 재기동 되는 걸 볼 수 있습니다.

...

  1. Image Added

  2. 정상적으로 구동되는 모습을 볼 수 있습니다.

...

  1. Image Added


배포를 위한 Role 생성

  1. CloudFormation을 통해서 배포를 하기 위해서는 Role이 필요합니다. IAM 서비스로 이동한 다음 Create Role 버튼을 클릭합니다.
    Image Modified

이 Role은 CloudFormation이 사용할 것이므로 아래와 같이 AWS service 를 선택하고, CloudFormation 을 선택하고 Next: Permissions 버튼을 클릭합니다.

...

Role Name에는  AWS301-DevOps-CloudFormation-Role 을 입력하고 Create role 버튼을 클릭합니다.

배포를 위한 파이프라인 수정

  1. 배포를 수행하도록 파이프라린을 수정합니다. Edit 버튼을 클릭합니다.

...

  1. Image Added

  2. 파이프라인 하단의 + Add Stage 버튼을 클릭합니다.
    Image Modified

  3. 팝업에서 Stage name에는 Deploy 를 입력하고, Add stage 버튼을 클릭합니다.
    Image Modified

  4. + Add action group 버튼을 클릭합니다.
    Image Modified

  5. 팝업이 열리면, 아래와 같이 Action group을

...

  1. 추가합니다. Action name은 CreateChangeSet , Stack name은 AWS301-DevOps-prod 이며, 아직 생선 전이기 때문에 찾기에 활성화 되어 있지 않으므로 직접 복사해서 붙여 넣으세요.
    Image Modified

  2. 바로 하단에 + Add action group 버튼을 클릭합니다.
    Image Modified

  3. 아래와 같이 ExecuteChangeSet 을 하나 생성합니다.
    Image Modified

  4. 배포 파이프 라인 생성 작업이 완료되었습니다. 상단의 Save 버튼을 클릭합니다.
    Image Modified

  5. 팝업이 열리면, Save 버튼을 클릭합니다.
    Image Modified


파이프라인 실행

  1. 파이프라인의 Release change 버튼을 클릭하여 파이프라인을 재실행합니다.
    Image Modified

  2. 팝업이 열리면 Release 버튼을 클릭합니다.
    Image Modified

  3. 다시 배포 파이프라인을 따라서 아래와 같이 배포가 진행되는 것을 볼 수 있습니다.

...

  1. Image Added Image Added Image Added 

  2. 배포가 완료되면 CloudFormation을 통해서 API가 배포된 Endpoint URL을 확인하여 테스트 합니다. ExecuteChangeSet의 Details 버튼을 클릭하여 배포 결과물을 확인합니다.Image Added

Image Removed


API Gateway 접속 테스트

CloudFormation에 배포 결과물 확인

  1. 아래와 같이 CloudFormation에 배포 Stack이 추가된 것을 확인할 수 있습니다. Resources 탭을 클릭하고 하단의 ServerlessRestApi  로 기재된 우측의 파란색 링크를 클릭하여 새창을 엽니다.

...

  1. Image Added

API Gateway의 배포 URL 확인

  1. 배포되어 있는 API를 선택하고 Stages 탭으로 이동합니다. Prod 스테이지를 클릭하면 배포되어 있는 Invoke URL 을 확인할 수 있습니다. 해당 URL을 클릭합니다.

...

  1. Image Added

  2. 아래와 같이 메시지가 나오는 것을 확인할 수 있습니다.

...

  1. Image Added


Canary 배포 적용

코드 수정

Lambda 코드 수정

  1. Lambda 코드를 수정하여 새로운 버전의 API를 만들어 보겠습니다. Cloud9에서 index.js 파일을 열고 기존 "Hello, AWS!"를 " Hello, DevOps! "로 변경합니다. Ctrl + S 를 눌러 저장합니다.

...

  1. Image Added

SAM 템플릿 수정

  1. 아래와 같이 Canary 배포를 위한 코드를 넣고 Ctrl +s 를 눌러 저장합니다. 5분간 10퍼센트의 트래픽만 변경된 버전으로 흐릅니다.

    코드 블럭
    languageyml
    themeRDark
    titleCanary 배포를 위한 SAM 템플릿 수정
    linenumberstrue
    AWSTemplateFormatVersion: '2010-09-09'
    Transform: AWS::Serverless-2016-10-31
    Description: AWS DevOps 301 Demo Application
    
    Resources:
      ApiAppFunction:
        Type: AWS::Serverless::Function
        Properties:
          Handler: index.handler
          Runtime: 

...

  1. nodejs14.

...

  1. x
          Timeout: 5
          AutoPublishAlias: live
          DeploymentPreference: 
            Enabled: true
            Type: Canary10Percent5Minutes
          Events:
            RootHandler:
              Type: Api
              Properties:
                Path: /
                Method: GET

    Image Added

변경된 코드 체크인

  1. 아래와 같이 변경된 코드를 체크인 합니다.

    코드 블럭
    languagebash
    themeDJango
    title변경된 코드 체크인
    git add .
    git commit -am "Canary deploy"
    git push origin master

    Image Added


CodePipeline에서 배포 상황 확인

코드가 체크인 되면 CodePipeline은 자동으로 CI/CD 작업을 수행합니다.
Image Added

배포가 진행되는 동안 ExecuteChangeSet은 대기를 하게 됩니다. 이때, Canary 배포가 진행중이므로 아래로 내려가서 트래픽이 바뀌는지 테스트를 진행합니다.

Image RemovedImage Added

CodeDeploy 서비스에서 확인

Canary 배포 확인

  1. Canary 배포가 정상적으로 되는지 확인합니다. 배포가 진행중이면 클릭합니다.

...

  1. Image Added

  2. 배포가 진행중인 것을 확인할 수 있습니다.

...

  1. Image Added


테스트

  1. Cloud9에서 정상적으로 API가 동작하는지 살펴 봅니다. 아래와 같은 명령을 수행합니다. API 주소는 본인이 배포된 URL로 변경합니다.

    코드 블럭
    for ((i=1;i<=100;i++)); do curl "https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod"; echo ; sleep 0.1; done

...

  1. Image Added

  2. 5분이 지나면, 배포가 모두 완료되고 트래픽은 새로운 버전으로 100% 전환됩니다.

...

  1. Image Added

...

  1. Image Added

  2. CodeDeploy가 배포되는 중에 Stop and roll back deployment 버튼을 클릭하여 배포가 중단되도록 테스트 해 보세요.


CleanUp

Code 서비스를 이용한 서버리스 서비스 CICD 배포 프로세스를 만들 수 있게 되었습니다.

...