버전 비교

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

...

draw.io Diagram
bordertrue
viewerToolbartrue
fitWindowfalse
diagramNameServerless CICD
simpleViewerfalse
width
diagramWidth971
revision12


개발환경 구성

개발통합환경은 AWS Cloud9을 이용합니다. 개발을 위해서 별도의 개발 서버를 할당 받거나 서버에 런타임 설정을 할 필요가 없습니다.
해당 실습은 Node.js 언어를 이용해서 Lambda 함수를 개발하며, 인프라는 SAM Template을 활용합니다.

리전 선택

  1. 이 애플리케이션은 Seoul 리전에서 개발합니다. AWS 관리 콘솔 우측 하단에 Seoul 를 선택합니다. 화면에 표시되는 언어는 English 를 기본으로 진행합니다.
    Image Modified

AWS Cloud9 시작하기

  1. 서비스에서 AWS Cloud9으로 이동하여 새로운 AWS Cloud9 환경을 생성합니다. Create

...

  1. Environment 버튼을 클릭합니다.
    Image Modified

  2. AWS Cloud9의 Name cdkenv

...

  1.  를 입력하고, 우측 하단의 Next step버튼을 클릭합니다.
    Image Modified

  2. 기본

...

  1. 설정에서 Instance Type을 t3.small 로 변경하고, 우측 하단의 Next step버튼을 클릭합니다.

...

  1. Image Added

  2. Review에서 설정된 상태(EC2의

...

  1. t3.

...

  1. small타입)를 확인하고 하단의 Create environment버튼을 클릭합니다.

...

  1. Cloud9 환경이 준비되는 것을 볼 수 있습니다. Cloud9이 가용해질 때까지 잠시 기다립니다. (약 1분 내외면 웹 상에서 개발을 할 수 있는 환경을 구축할 수 있습니다.)

...

  1. Image Modified

리소스 생성

S3 버킷 생성

  1. 템플릿 및

...

  1. 아티팩트를 보관할 S3 버킷을 생성합니다.

...

  1.  AWS 관리 콘솔에서 S3 서비스로 이동하고 Create bucket 버튼을 클릭합니다.

...

  1. Image Added

  2. 아래와 같은 이름을 가지는 버킷을 생성합니다. 숫자가 들어가는 부분은 

...

  1. 본인

...

  1. 전화 번호로

...

  1. 대체 해서 입력합니다. 해당 버킷은 

...

  1. Seoul (ap-northeast-2) Region에 만들어져야 합니다. 설정이 완료되면 우측 하단의 Create Bucket 버튼을 클릭합니다.

    정보
    aws301-devops-

...

  1. 01012345678

...

  1. Image Added


소스 리포지토리 생성

  1. AWS 관리 콘솔에서 CodeCommit 서비스로 이동하고,  Create repository 버튼을 클릭합니다.
    Image Modified

  2. Repository name에  AWS301Repo 를 입력하고 Create 버튼을 클릭합니다.
    Image Modified

  3. 생성된 Repository를 Clone 하기 위해서 주소를 복사합니다. Clone URL 콤보상자를 클릭하여 Clone HTTPS  를 선택합니다. 복사된 주소를 메모장에 기록해 둡니다.

...

  1. Image Added
    복사된 URL의 예) https://git-codecommit.ap-northeast-

...

  1. 2.amazonaws.com/v1/repos/AWS301Repo


Cloud9에서 CodeCommit

...

설정

  1. Cloud9에서 CodeCommit 접근을 하기 위해서 Cloud9 하단의 Terminal에서 다음과 같은 설정을

...

  1. 수행하고 체크인 한 후 해당 디렉토리로 이동합니다.
    Image Added

    코드 블럭
    languagebash
    themeDJango
    titleCodeCommit 접근 설정
    git config --global credential.helper '!aws codecommit credential-helper $@'
    git config --global credential.UseHttpPath true

...

소스 코드 체크인

Cloud9 하단의 Terminal에서 아래의 명령을 실행하여 소스 코드를 체크인 합니다.

...

languagebash
themeDJango
title소스 코드 체크인
  1. 
    git clone https://git-codecommit.ap-northeast-

...

  1. 2.amazonaws.com/v1/repos/AWS301Repo
    cd ./AWS301Repo/



Lambda 소스 코드 생성

  1. 해당 폴더로 이동한 다음 vim 에디터를 이용해서 index.js Lambda 소스 코드를 만들겠습니다.

    코드 블럭
    languagebash
    themeDJango
    title폴더 이동 및 파일 생성

...

  1. vim index.js

    Image Modified

  2. vim 에디터를 이용해서 소스코드를 붙이고 저장합니다. (vim 에디터 대신 Cloud9 화면에서 직접 파일을 생성해서 작업할 수도 있습니다.)

    코드 블럭
    languagejs
    themeRDark
    titleindex.js Lambda 코드
    linenumberstrue

...

  1. "use strict

...

  1. ";
    

...

  1. exports.handler = 

...

  1. async (event) => {
        // TODO implement
        console.log("request: " + JSON.stringify(event));
        

...

  1. let 

...

  1. message = {
            

...

  1. message: 

...

  1. "Hello, AWS!"
        };
        

...

  1. let response = {
            

...

  1. statusCode: 

...

  1. 200,
     

...

  1.        

...

  1. body: JSON.stringify(message)
        };
    

...

  1. 
        

...

  1. return response

...

  1. ;
    };

...


  1. 정보
    titleVIM 사용시 명령어

    1. vim이 실행되고, 최초 키보드에서 i 키를 클릭하면, 커서 위치에서 "Insert" 가능한 모드가 됩니다.
    2. 위 복사한 코드를 붙여 넣기 한 다음, esc 키를 누르고 편집 모드를 빠져 나옵니다.
    3. :wq를 입력하고 Enter 키를 누르면 편집된 내용을 저장하고 종료 합니다.

    만약 실수를 했을 경우, esc 키를 누르고 편집 모드를 빠져나와서 :q! 명령을 통해서 빠져 나온 다음 위 과정을 다시 실행하세요.

...



SAM 템플릿 작성

  1. Lambda 함수와 매핑될 API Gateway를 포함한 template.yml SAM 템플릿을 생성합니다. vim 에디터 또는 Cloud9 IDE에서 작업합니다.

    코드 블럭
    languagebash
    themeDJango
    titletemplate.yml 파일 생성
    vim template.yml


    코드 블럭
    languageyml
    themeRDark
    titletemplate.yml 파일
    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
          Events:
            RootHandler:
              Type: Api
              Properties:
                Path: /
                Method: GET



Lambda 함수 로컬 테스트

Lambda 함수가 정상 동작하는지 테스트를 해 보겠습니다. Cloud9에서 index.js 파일을 열고,  Run  버튼을 클릭합니다.

...