편집자 주: 함께 보면 좋아요!

애플리케이션 개발부터 배포까지, AWS CodeStar


Overview: 작성 환경

AWS CodeStar를 사용하면 애플리케이션의 서버, 언어 , 형상관리, 배포, 빌드까지 한꺼번에 관리할 수 있습니다. AWS를 사용하는 개발자라면 꼭 필요한 도구이기도 합니다. 이번 글에서는 CodeStar를 초기 설정할 때의 도움이 될 내용들을 소개하겠습니다.

-서비스: AWS CodeStar
-템플릿: Python Webservice, AWS Lambda

01



목차
파라미터 바인딩
람다 환경변수 설정
람다 레이어 설정
xray 모니터링 설정
람다 함수명 설정
Global 섹션
로컬 개발환경에서의 SAM 실행


CodeStar 프로젝트 생성 후

CodeStar로 프로젝트를 생성하면 소스코드와 배포를 위한 Code 시리즈 리소스들이 함께 만들어집니다. CodeCommit, CodeBuild, CodePipeline 등이 있습니다. 우선 기본으로 구축된 파이프라인부터 살펴보겠습니다.

02


CodeCommit 리포지토리의 마스터 브랜치 코드를 변경하면 CodeBuild와 CloudFormaton 서비스를 통해 빌드, 테스트, 배포를 진행할 수 있게 설정되어 있습니다. 생성된 리포지토리의 template.yml 파일을 이용하면 프로젝트 리소스도 관리할 수 있는데, 특히 template.yml을 통해 CloudFormation으로 관리하는 리소스까지도 관리가 가능합니다.

기본으로 생성된 template.yml 파일을 자세히 살펴보겠습니다.

AWSTemplateFormatVersion: 2010-09-09     Transform:     - AWS::Serverless-2016-10-31     - AWS::CodeStar          Parameters:       ProjectId:         Type: String         Description: CodeStar projectId used to associate new resources to team members       CodeDeployRole:         Type: String         Description: IAM role to allow AWS CodeDeploy to manage deployment of AWS Lambda functions       Stage:         Type: String         Description: The name for a project pipeline stage, such as Staging or Prod, for which resources are provisioned and deployed.         Default: ''          Globals:       Function:         AutoPublishAlias: live         DeploymentPreference:           Enabled: true           Type: Canary10Percent5Minutes           Role: !Ref CodeDeployRole          Resources:       HelloWorld:         Type: AWS::Serverless::Function         Properties:           Handler: index.handler           Runtime: python3.7           Role:             Fn::GetAtt:             - LambdaExecutionRole             - Arn           Events:             GetEvent:               Type: Api               Properties:                 Path: /                 Method: get             PostEvent:               Type: Api               Properties:                 Path: /                 Method: post       LambdaExecutionRole:         Description: Creating service role in IAM for AWS Lambda         Type: AWS::IAM::Role         Properties:           RoleName: !Sub 'CodeStar-${ProjectId}-Execution${Stage}'           AssumeRolePolicyDocument:             Statement:             - Effect: Allow               Principal:                 Service: [lambda.amazonaws.com]               Action: sts:AssumeRole           Path: /           ManagedPolicyArns:             -  arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole           PermissionsBoundary: !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/CodeStar_${ProjectId}_PermissionsBoundary' 




파라미터 바인딩

Parameters 섹션에서는 ProjectId, CodeDeployRole, Stage 등 템플릿에서 사용할 파라미터를 지정할 수 있습니다. yml 파일 안에서는 ${ProjectId} 와 같이 사용할 수 있고, CodePipeline 환경에서 파라미터를 전달할 수 있습니다.

03


CodePipeline → Deploy → GenerateChangeSet → Advanced → Parameter overrides


람다 환경변수 설정

람다 함수에서 사용할 환경변수를 설정할 수 있습니다. 아래와 같이 람다 환경변수 TZ(timezone)를 지정하면 실행 환경의 표준 시간대 설정이 가능합니다.

Resources:       HelloWorld:         Type: AWS::Serverless::Function         Properties:           Environment:             Variables:               TZ: 'Asia/Seoul' 




람다 레이어 설정

람다 레이어를 적용하면 패키지 관리가 훨씬 편리해집니다. 함수의 패키지 크기가 3MB를 넘지 않으면 콘솔에서 코드를 직접 확인 및 수정할 수 있습니다. 람다 레이어는 zip 파일로 관리되고, /opt 폴더에 압축 해제되며 생성됩니다.

람다는 250MB의 제한이 있습니다. 만약 레이어를 사용해 분리하더라도 람다함수패키지와 람다 레이어의 합으로 걸려있으므로 크기 제약에서 벗어날 수는 없습니다.

Resources:       HelloWorld:         Type: AWS::Serverless::Function         Properties:           Layers:             - arn:aws:lambda:{region}:{id}:layer:{layer-name}:{version} 




xray 모니터링 설정

Tracing Property를 이용하면 람다 함수의 Enable active tracing 설정을 할 수 있습니다. CloudFormation 템플릿 메뉴얼엔 TracingConfig로 안내하고 있어도 빌드에 실패하여 확인해보니 SAM 템플릿의 AWS::Serverless::Function 의 스펙에선 Tracing으로 안내되고 있는 걸 볼 수 있었습니다.

Resources:       HelloWorld:         Type: AWS::Serverless::Function         Properties:           Tracing: Active 




람다 함수명 설정

람다 함수는 기본적으로 아래와 같은 이름을 부여합니다.

awscodestar-{brandi-test(프로젝트명)}-lambda-{HelloWorld(template함수ID)}-{NZ6YXLZ8XD0O(RANDOM_ID)}

만약 함수 간의 호출이 필요할 때는 아래와 같이 함수 이름의 지정도 가능합니다.

Resources:       HelloWorld:         Type: AWS::Serverless::Function         Properties:        FunctionName: !Sub '${ProjectId}-HelloWorld-${Stage}' 




Global 섹션

Global 섹션을 이용하면 리소스마다 동일하게 적용할 항목들을 관리할 수 있습니다.

Globals:       Function:         Runtime: python3.6         Environment:           Variables:             TZ: 'Asia/Seoul'         VpcConfig:           SubnetIds:             - subnet-a1111111             - subnet-b2222222           SecurityGroupIds:             - sg-c2222222 




로컬 개발환경에서의 SAM 실행

API Gateway 환경 실행

sam local start-api 



람다 함수 직접 실행

echo ‘{}’ | sam local invoke —parameter-values=‘ParameterKey=ProjectId,ParameterValue=brandi-test’ HelloWorld 




Conclusion

지금까지 CodeStar 초기 설정에 도움이 될 내용들을 살펴봤습니다. 강력한 기능들과 함께 업무를 진행한다면 조금이라도 더 나은 개발 환경을 구축할 수 있을 거라 생각합니다.


이상근 실장 | R&D DO실
leesg@brandi.co.kr
브랜디, 오직 예쁜 옷만