Category: DevOps*


새 소식 – AWS OpsWorks for Puppet Enterprise 지원

작년 AWS re:Invent에서 고객이 AWS가 관리하는 Chef Automate 서버를 갖도록 할 수 있는 AWS OpsWorks for Chef Automate를 출시했습니다. 고객 피드백을 기반으로 이제 Puppet Enterprise를 OpsWorks에 도입합니다.

Puppet Enterprise를 사용하면 각각의 관리하는 노드에 배포된 Puppet 에이전트를 통해 인스턴스 프로비저닝, 구성 및 관리를 자동화할 수 있습니다. 한 번 구성을 정의하면 자동 롤백 및 드리프트 감지를 통해 수천 개의 노드에 적용할 수 있습니다. AWS OpsWorks for Puppet Enterprise는 기존 Puppet 매니페스트를 사용하여 원활하게 작업하면서 고유한 Puppet 마스터를 유지 관리할 필요를 없앱니다.

OpsWorks for Puppet Enterprise는 Puppet 마스터 서버를 관리하고 설치, 업그레이드 및 백업과 같은 운영 작업을 처리합니다. 또한 노드 등록을 간소화하고 노드 부트스트래핑에 유용한 스타터 키트를 제공합니다. 추가 정보는 아래를 참조하십시오.

관리형 Puppet 마스터 생성

OpsWorks에서 Puppet 마스터 생성은 간단합니다. 우선 OpsWorks 콘솔의 Puppet 섹션으로 이동한 다음 “Create Puppet Enterprise Server”를 클릭합니다.

설정의 첫 번째 부분은 Puppet 마스터에 대한 리전 및 EC2 인스턴스 유형을 구성하는 것입니다. c4.large가 최대 450개의 노드를 지원하는 반면 c4.2xlarge는 1,600개 이상의 노드를 지원할 수 있습니다. Puppet Enterprise 서버는 최신 버전의 Amazon Linux(2017.09)와 Puppet Enterprise(2017.3.2)와 함께 프로비저닝됩니다.

설정의 다음 화면에서 Puppet 마스터에 연결할 SSH 키를 선택적으로 구성할 수 있습니다. 주요 사용자 지정을 할 때 유용하지만 인스턴스 자체에서보다 클라이언트 도구를 통해 Puppet과 상호 작용하는 것이 모범 사례입니다.

또한 이 페이지에서 r10k repo가 동적 구성을 가져오도록 설정할 수 있습니다.

고급 설정 페이지에서 VPC, 보안 그룹, IAM 역할 및 인스턴스 프로파일에 맞는 일반적인 배포 옵션을 선택할 수 있습니다. OpsWorks에서 인스턴스 보안 그룹을 생성하도록 선택한 경우 그룹이 기본적으로 열리기 때문에 이후에는 액세스를 제한하는 것이 중요합니다.

이 페이지에서 주목해야 하는 두 가지 구성 요소는 유지 관리 기간과 백업 구성입니다. Puppet 소프트웨어의 새 마이너 버전이 나오면 AWS 테스트를 통과하는 즉시 Puppet 마스터에서 Puppet Enterprise 마이너 버전을 자동으로 업데이트하도록 시스템 유지 관리가 설계됩니다. AWS는 철저한 테스트를 실시하여 Puppet 업그레이드가 프로덕션 지원이며 기존 고객 환경을 방해하지 않고 배포하는지 확인합니다. 자동 백업을 통해 Puppet 마스터의 내구성이 뛰어난 백업을 S3에 저장하고 언제든지 백업을 복원할 수 있습니다. 업무상 필요에 따라 백업 주기 및 보존을 조정할 수 있습니다.

AWS OpsWorks for Puppet Enterprise 사용하기

Puppet 마스터가 프로비저닝하는 동안 콘솔에 두 가지 유용한 정보 상자가 제공됩니다.

Windows 및 Linux 노드에 Puppet 에이전트를 설치하기 위한 샘플 사용자 데이터는 물론 로그인 자격 증명을 다운로드할 수 있습니다. 여기서 중요한 점은 Puppet 마스터 연결이 가능한 경우 온프레미스 노드 또한 관리할 수 있다는 점입니다.

Puppet 마스터가 완전히 프로비저닝되면 Puppet Enterprise http 콘솔에 액세스하여 사용하던 대로 Puppet을 사용할 수 있습니다.

유용한 세부 정보

AWS OpsWorks for Puppet Enterprise는 관리하는 노드의 노드 시간에 따라 요금이 책정됩니다. 요금은 노드 시간당 $0.017부터 시작하여 노드의 볼륨에 따라 감소합니다. 여기에서 전체 요금 페이지를 볼 수 있습니다. 또한 Puppet 마스터 실행에 필요한 기본 리소스에 대한 요금이 부과됩니다. 출시 시점에서 AWS OpsWorks for Puppet Enterprise는 미국 동부(버지니아 북부) 리전, 미국 서부(오레곤) 리전, EU(아일랜드) 리전에서 사용할 수 있습니다. 물론 콘솔에서 봤던 모든 것을 AWS SDK 및 CLI를 통해 수행할 수 있습니다. 시작 안내서에서 자세한 정보를 얻을 수 있습니다.

Randall;

이 글은 New – AWS OpsWorks for Puppet Enterprise의 한국어 번역입니다.

Github에 대한 AWS DevOps 개발 도구 기능 확대

AWS 개발자 도구는 AWS CodeCommit, AWS CodePipeline, AWS CodeBuildAWS CodeDeploy를 포함하는 서비스 모음입니다. 이들 서비스는 애플리케이션 소스 코드의 버전 관리를 안전하게 저장 및 유지하고 애플리케이션을 AWS 또는 온프레미스 환경에 자동으로 구축하고 테스트하고 배포하는 데 도움이 됩니다. AWS 개발자 도구는 개발자 및 IT 전문가가 소프트웨어를 신속하고 안전하게 제공할 수 있도록 설계되어 있습니다.

AWS는 AWS 개발자 도구 에코시스템을 타사의 도구 및 서비스로 확장하려는 지속적인 노력의 일환으로 마침내 AWS CodeStarAWS CodeBuild와 GitHub의 통합을 실현했습니다. 이 덕분에 GitHub 사용자도 이제 AWS 개발자 도구를 사용하여 지속적 통합 및 배포 도구 체인을 릴리스 프로세스의 일부로 보다 용이하게 구축할 수 있게 되었습니다.

이 게시물에서는 다음에 대해 알아보겠습니다.

사전 조건:

AWS 계정, GitHub 계정, Amazon EC2 키 페어, 그리고 AWS Identity & Access Management(IAM), AWS CodeStar, AWS CodeBuild, AWS CodePipeline, Amazon EC2, Amazon S3의 관리자 수준 권한이 필요합니다.

GitHub와 AWS CodeStar의 통합

AWS CodeStar를 사용하면 AWS에서 애플리케이션을 빠르게 개발하고 빌드하고 배포할 수 있습니다. AWS CodeStar의 통합 사용자 인터페이스는 한 곳에서 소프트웨어 개발 활동을 손쉽게 관리할 수 있게 해 줍니다. AWS CodeStar를 사용하면 몇 분 이내에 지속적 배포 도구 체인 전체를 구축할 수 있으므로 코드 릴리스를 보다 빨리 시작할 수 있습니다.

AWS CodeStar가 올해 4월에 출시되었을 때 AWS CodeCommit을 호스팅 대상 소스 리포지토리로 사용했습니다. 이제는 AWS CodeCommit 또는 GitHub 중에 선택하여 CodeStar 프로젝트를 위한 소스 제어 서비스로 지정할 수 있습니다. 이에 더해, CodeStar 프로젝트 대시보드를 사용하면 커밋, 이슈 및 풀 요청과 같은 GitHub 활동을 추적할 수 있습니다. 이 기능은 CI/CD 도구 체인의 구성 요소 전체에 걸쳐 프로젝트 활동을 용이하게 관리할 수 있도록 해 줍니다. GitHub 대시보드 보기 기능이 추가되면 AWS 애플리케이션의 배포가 더욱 간단해질 것입니다.

여기에서는 CodeStar 프로젝트를 위한 소스 공급자로 GitHub를 활용하는 방법을 보여 드릴 것입니다. 아울러 CodeStar 대시보드에서 최근의 커밋, 이슈 및 풀 요청과 관련된 작업을 수행하는 방법을 알려 드릴 것입니다.

AWS Management Console에 로그인한 다음 [Services] 메뉴에서 [CodeStar]를 클릭합니다. CodeStar 콘솔에서 [Create a new project]를 선택합니다. 그러면 [Choose a project template] 페이지가 나타납니다.

CodeStar 프로젝트

프로그래밍 언어, 애플리케이션 범주 또는 AWS 서비스 별로 옵션을 선택합니다. 저는 Amazon EC2에서 실행되는 Rails 웹 애플리케이션에서 Ruby를 선택할 것입니다.

이제 [Project details] 페이지에서 GitHub 옵션을 확인할 수 있습니다. 프로젝트의 이름을 입력하고 [Connect to GitHub]를 선택합니다.

프로젝트 세부 정보

GitHub 리포지토리에 연결할 수 있는 권한을 요청하는 메시지가 표시됩니다. 메시지가 표시되면 [Authorize]를 선택한 다음 GitHub 계정 암호를 입력합니다.

승인

그러면 GitHub ID가 OAuth를 통해 AWS CodeStar에 연결됩니다. 언제나 [GitHub application settings]에서 탐색을 통해 설정을 살펴볼 수 있습니다.

설치된 GitHub 앱

아래와 같이 [AWS CodeStar is now connected to GitHub]라는 메시지가 표시됩니다.

프로젝트 만들기

퍼블릭 또는 프라이빗 리포지토리를 선택할 수 있습니다. GitHub는 퍼블릭 및 오픈 소스 프로젝트에 참여하는 사용자 및 조직에 대해 무료 계정을 제공하는 한편 무제한 프라이빗 리포지토리와 사용자 관리 기능 및 보안 기능(옵션)이 포함된 유료 계정 또한 제공하고 있습니다.

이 예제에서는 퍼블릭 리포지토리 옵션을 선택합니다. 원할 경우 리포지토리 설명을 편집한 다음 [Next]를 선택합니다.

CodeStar 프로젝트 세부 정보를 검토한 다음 [Create Project]를 선택합니다. [Choose an Amazon EC2 Key Pair]에서 [Create Project]를 선택합니다.

키 페어

[Review project details]에서 [Edit Amazon EC2 configuration]이 표시됩니다. 이 링크를 선택하여 인스턴스 유형, VPC 및 서브넷 옵션을 구성합니다. AWS CodeStar의 경우 AWS 리소스 및 IAM 권한을 생성하고 관리하려면 서비스 역할이 필요합니다. 이 서비스 역할은 [AWS CodeStar would like permission to administer AWS resources on your behalf ] 확인란을 선택하면 생성됩니다.

[Create Project]를 선택합니다. 프로젝트 및 리소스를 생성하는 데 몇 분 정도 걸릴 수 있습니다.

프로젝트 세부 정보 검토

CodeStar 프로젝트를 만들면 프로젝트 팀에 소유자로 추가됩니다. AWS CodeStar를 처음으로 사용하는 경우 다음과 같은 정보를 제공하라는 메시지가 표시되는데, 다른 사람에게 공개되는 정보입니다.

  • 표시 이름
  • 이메일 주소

이 정보는 AWS CodeStar 사용자 프로필에 사용됩니다. 사용자 프로필은 프로젝트가 아닌 단일 AWS 리전에 한정됩니다. 사용자가 여러 리전의 프로젝트 일원인 경우 각 리전마다 사용자 프로필을 생성해야 합니다.

사용자 설정

사용자 설정

[Next]를 선택합니다. AWS CodeStar는 여러분이 설정한 구성에 따라 GitHub 리포지토리를 생성합니다(예: https://github.com/biyer/ruby-on-rails-service).

IDE(통합 개발 환경)를 AWS CodeStar와 통합하면 원하는 환경에서 계속 코드를 작성하고 개발할 수 있습니다. 변경 사항은 코드를 커밋하고 푸시할 때마다 AWS CodeStar 프로젝트에 포함됩니다.

IDE

IDE를 선택한 후에, [Next]를 선택하여 CodeStar 대시보드로 이동합니다. 익숙해지도록 몇 분 정도 대시보드를 살펴보십시오. 작업 항목의 백로그에서 최근의 코드 배포까지 전체 소프트웨어 개발 프로세스에 걸쳐 진행 사항을 용이하게 추적할 수 있습니다.

대시보드

애플리케이션 배포가 완료되면 애플리케이션을 표시할 엔드포인트를 선택합니다.

Pipeline

해당 애플리케이션의 엔드포인트를 열면 다음과 같은 화면이 표시됩니다.

대시보드의 [Commit history] 섹션에 GitHub 리포지토리의 커밋 이력이 표시됩니다. 커밋 ID 또는 [Open in GitHub ]옵션을 선택하면, GitHub 리포지토리에 대한 핫링크를 사용할 수 있습니다.

커밋 이력

AWS CodeStar 프로젝트 대시보드에서 사용자와 사용자의 팀은 프로젝트에 대한 최신 커밋, 지속적 제공 파이프라인의 상태, 인스턴스 성능을 비롯한 프로젝트 리소스의 상태를 확인합니다. 이 정보는 특정 리소스 전용 타일에 표시됩니다. 이러한 리소스에 대한 자세한 내용을 보려면 해당 타일에서 세부 정보 링크를 선택합니다. 해당 AWS 서비스의 콘솔이 해당 리소스의 세부 정보 페이지에서 열립니다.

문제

또한 상태 및 할당된 사용자를 기준으로 이슈를 필터링할 수 있습니다.

필터

AWS CodeBuild, 이제 GitHub 풀 요청 구축 지원

CodeBuild는 소스 코드를 컴파일하고 테스트를 실행하며 배포 준비가 완료된 소프트웨어 패키지를 생성하는 완전 관리형 빌드 서비스입니다. CodeBuild를 사용하면 자체 빌드 서버를 프로비저닝, 관리 및 확장할 필요가 없습니다. CodeBuild는 지속적으로 확장되며 여러 빌드를 동시에 처리하기 때문에 빌드가 대기열에서 대기하지 않습니다. 사전 패키징된 빌드 환경을 사용하여 신속하게 시작할 수 있으며 혹은 자체 빌드 도구를 사용하는 사용자 지정 빌드 환경을 만들 수 있습니다.

최근 AWS는 AWS CodeBuild에서 이제 GitHub 풀 요청 구축을 지원한다는 사실을 발표했습니다. 이 기능을 사용하면 CodeBuild로 애플리케이션 코드를 편집하고 빌드하는 동시에 팀원들과 보다 용이하게 협업할 수 있습니다. AWS CodeBuild 콘솔 또는 AWS CodePipeline 콘솔에서 AWS CodeBuild를 실행할 수 있습니다. 또한 AWS Command Line Interface(AWS CLI), AWS SDK 또는 AWS CodeBuild Plugin for Jenkins를 사용하여 AWS CodeBuild의 실행을 자동화할 수 있습니다.

AWS CodeBuild

이 단원에서는 Webhook을 통한 GitHub로부터의 풀 요청을 사용하여 AWS CodeBuild에서 빌드를 트리거하는 방법을 알아보겠습니다.

https://console.aws.amazon.com/codebuild/에서 AWS CodeBuild 콘솔을 엽니다. [Create Project]를 선택합니다. CodeBuild 프로젝트가 이미 있는 경우, [Edit project]를 선택한 다음 지시를 따르면 됩니다. CodeBuild는 AWS CodeCommit, S3, BitBucket 및 GitHub와 연결하여 빌드의 소스 코드를 가져올 수 있습니다. [Source provider]에서, [GitHub]를 선택한 다음, [Connect to GitHub]를 선택합니다.

구성

GitHub와 CodeBuild 프로젝트를 성공적으로 연결한 후에는 GitHub 계정에서 리포지토리를 선택할 수 있습니다. CodeBuild 또한 임의의 퍼블릭 리포지토리에 대한 연결을 지원합니다. [GitHub application settings]에서 탐색을 통해 설정을 살펴볼 수 있습니다.

GitHub 앱

[Source: What to Build]의 [Webhook]에서 [Rebuild every time a code change is pushed to this repository ] 확인란을 선택합니다.

참고: 이 옵션은 [ Repository]에서 [Use a repository in my account]를 선택한 경우에만 선택할 수 있습니다.

소스

[Environment: How to build]의 [Environment image]에서 [Use an image managed by AWS CodeBuild]를 선택합니다. [Operating system]에서 [Ubuntu]를 선택합니다. [Runtime]에서 [Base]를 선택합니다. [Version]에서 가용한 최신 버전을 선택합니다. [Build specification]에서 빌드 명령 및 관련 설정 모음을 YAML 형식(buildspec.yml)으로 제공하거나 빌드 명령을 콘솔에 직접 삽입함으로써 빌드 사양을 재정의할 수 있습니다. AWS CodeBuild는 이들 명령을 사용하여 빌드를 실행합니다. 이 예제에서 출력은 문자열 “hello”입니다.

환경

[Artifacts: Where to put the artifacts from this build project]의 [Type]에서 [No artifacts]를 선택합니다. (이는 테스트를 실행하거나 도커 이미지를 Amazon ECR에 넣을 경우 선택하는 유형이기도 합니다.) AWS CodeBuild가 사용자를 대신하여 종속 AWS 서비스와 상호 작용할 수 있으려면 AWS CodeBuild 서비스 역할이 있어야 합니다. 기존에 역할이 없는 경우에는 [Create a role]을 선택하고 [Role name]에서 역할 이름을 입력합니다.

결과물

이 예제에서는 고급 설정을 기본값으로 둡니다.

[Show advanced settings]를 확장하면 다음을 포함하여 빌드를 지정할 수 있는 옵션이 표시됩니다.

  • 빌드 제한 시간
  • 이 프로젝트의 빌드에서 사용할 모든 결과물을 암호화하는 KMS 키
  • 도커 이미지 빌드 옵션
  • 빌드 작업 동안의 권한 상승(예: 빌드 컨테이너 내의 도커에 액세스하여 Dockerfile을 빌드)
  • 컴퓨팅 유형을 빌드하기 위한 리소스 옵션
  • 환경 변수(내장 또는 사용자 지정) 자세한 내용은 AWS CodeBuild 사용 설명서의 [Create a Build Project]를 참조하십시오.

고급 설정

AWS CodeBuild 콘솔을 사용하여 Amazon EC2 시스템 관리자에서 파라미터를 생성할 수 있습니다. [Create a parameter]를 선택한 다음, 대화 상자에 표시되는 지시에 따릅니다. (대화 상자의 [KMS key]에서 계정에 있는 AWS KMS 키의 ARN을 선택적으로 지정할 수 있습니다. Amazon EC2 시스템 관리자는 이 키를 사용하여 저장하는 동안 파라미터의 값을 암호화하고 검색 동안 암호를 해독합니다.)

파라미터 생성

[Continue]를 선택합니다. 나중에 [Review] 페이지에서 [Save and build] 또는 [Save]를 선택하여 빌드를 실행합니다.

[Start build]를 선택합니다. 빌드가 완료되면 [Build logs ]에 빌드에 관한 세부 정보가 표시됩니다.

로그

풀 요청을 시연하기 위해 리포지토리를 다른 GitHub 사용자로 포크하고, 포크된 리포지토리로 커밋하고, 변경 사항을 새로 생성된 브랜치로 체크인한 다음, 풀 요청을 엽니다.

풀 요청

풀 요청이 제출되는 즉시, CodeBuild가 빌드 실행을 시작합니다.

구축

GitHub가 HTTP POST 페이로드를 Webhook의 구성된 URL(강조 표시된 부분)로 전송합니다. 이 URL은 CodeBuild가 최신 소스 코드를 다운로드하고 빌드 단계를 실행하는 데 사용합니다.

빌드 프로젝트

GitHub 풀 요청에 대해 [Show all checks] 옵션을 확장하면 CodeBuild가 빌드를 완료하였고, 모든 확인이 통과되었고, CodeBuild 콘솔에서 빌드 이력을 여는 데 사용하는 딥 링크가 [Details]에 제공됨을 확인할 수 있습니다.

풀 요청

요약:

이 게시물에서 GitHub를 CodeStar 프로젝트의 소스 공급자로 활용하는 방법과 CodeStar 대시보드에서 최근의 커밋, 이슈 및 풀 요청과 관련된 작업을 수행하는 방법을 알아봤습니다. 또한 GitHub 풀 요청을 사용하여 AWS CodeBuild에서 빌드를 자동으로 트리거하는 방법과 특히 이 기능을 사용하면 CodeBuild를 통해 애플리케이션 코드를 편집하고 빌드하는 동시에 팀원들과 보다 용이하게 협업할 수 있다는 것을 알려 드렸습니다.


작성자 소개:

Balaji Iyer는 AWS 전문 서비스 팀에서 엔터프라이즈 컨설턴트로 활약하고 있습니다. Balaji Iyer는 이 역할을 맡으면서 다수의 고객이 AWS 제품을 알아보고 선택하는 데 일조했습니다. 그의 전문 분야는 고도 확장형 분산 시스템, 서버 없는 아키텍처, 대규모 마이그레이션, 운영 보안, 전략적 AWS 이니셔티브 등의 설계 및 구현입니다. Balaji Iyer는 Amazon에 합류하기 전에 10년 이상 운영 체계, 빅 데이터 분석 솔루션, 모바일 서비스 및 웹 애플리케이션을 구축해 왔습니다. 여가 시간에는 아웃도어 활동을 즐기거나 가족과 함께 시간을 보냅니다.

이 글은 AWS DevOps 블로그의 AWS Developer Tools Expands Integration to Include GitHub의 한국어 번역입니다.

ASP.NET Core를 위한 AWS CodeStar 사용 방법

AWS CodeStar 팀이 최근 ASP.NET Core 프로젝트 템플릿 2개를 추가로 발표했습니다.  AWS CodeStar는 개발자를 대신해 CI/CD(코드 통합 및 코드 배포) 파이프라인을 생성하므로 개발자는 인프라를 구축하는 대신 애플리케이션 빌드에 집중할 수 있습니다. 새로운 ASP.NET Core 프로젝트 템플릿을 사용하여 .NET 개발자는 처음부터 AWS 애플리케이션을 빌드하고 배포할 수 있습니다. AWS CodeStar에서 ASP.NET Core 애플리케이션을 생성하는 방법이 Tara Walker의 우수 블로그 게시물에 나와 있습니다. 이 블로그 게시물에서는 AWS CodeStar용 ASP.NET Core 프로젝트에 테스트를 추가하는 방법을 배우고 그 이면에서 이루어지는 일을 자세히 살펴볼 수 있습니다.

단위 테스트 프로젝트 추가

HelloController 기능을 연습하는 간단한 테스트 사례를 추가하는 것이 목적입니다. 새로운 ASP.Net Core 웹 서비스 프로젝트가 있다고 가정해 보겠습니다. 이 프로젝트가 없으면 Tara 블로그 게시물(위 내용 참조)에 따라 만드십시오. ASP.NET Core 웹 서비스 템플릿을 선택해야 합니다. AWS CodeStar용 ASP.NET Core를 만들고 Team Explorer를 통해 프로젝트 리포지토리를 복제한 후 AspNetCoreWebService 솔루션을 로드한 다음 블로그 게시물의 나머지 부분에 따르면 됩니다. Team Explorer를 통해 repo를 설정하기 위한 지침이 필요하면 Steve Robert의 Visual Studio 및 AWS CodeCommit 통합 5월자 발표를 참조하십시오.

먼저 AspNetCoreWebServiceTest라는 새 xUnit 프로젝트를 AspNetCoreWebService 솔루션에 추가하십시오. 새로운 테스트 프로젝트는 HelloController 클래스와 JsonResult를 참조하므로 AspNetCoreWebService를 프로젝트 참조로 추가하고 Microsoft.AspNetCore.Mvc를 NuGet 참조로 추가해야 합니다. 이 참조를 테스트 프로젝트에 추가한 후에  AspNetCoreWebServiceTest.csproj에 다음 내용이 추가되어야 합니다.

Xml
<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
    ...
</ItemGroup>
...
<ItemGroup>
    <ProjectReference Include="..\AspNetCoreWebService\AspNetCoreWebService.csproj" />
</ItemGroup>

그러면 HelloController 클래스의 직접 참조를 만들고 JsonResult의 압축을 풀 수 있습니다. 다음과 같이 간단한 테스트 사례를 추가해 보겠습니다.

C#
using System;
using Xunit;
using Microsoft.AspNetCore.Mvc;
using AspNetCoreWebService.Controllers;

namespace AspNetCoreWebServiceTest
{
    public class HelloControllerTest
    {
        [Fact]
        public void SimpleTest()
        {
            HelloController controller = new HelloController();
            var response = controller.Get("AWS").Value as Response;
            Assert.Equal(response.output, "Hello AWS!");
        }
    }
}

파일 이름, 네임스페이스, 클래스 이름 및 메서드 이름이 바뀌었습니다. 테스트를 실행하고 통과하는지 확인하십시오. [Solution Explorer]에 다음과 같이 표시되어야 합니다.

이제 테스트 프로젝트가 작동하므로 애플리케이션을 배포하기 전에 파이프라인을 업데이트하여 테스트를 빌드하고 실행해야 합니다.

AWS CodeBuild 작업 업데이트

먼저 프로젝트가 어떻게 빌드되는지 살펴보겠습니다. 개발자나 팀 구성원이 repo에 변경 사항을 푸시하면 파이프라인이 최신 변경 사항에 따라 자동으로 빌드 프로세스를 시작합니다. 이 단계에서 AWS CodeBuild가 리포지토리 루트에 있는 buildspec.yml 파일을 사용하여 빌드 프로세스를 진행합니다.

YAML
version: 0.2
phases:
  pre_build:
    commands:
      - echo Restore started on `date`
      - dotnet restore AspNetCoreWebService/AspNetCoreWebService.csproj
  build:
    commands:
      - echo Build started on `date`
      - dotnet publish -c release -o ./build_output AspNetCoreWebService/AspNetCoreWebService.csproj
artifacts:
  files:
    - AspNetCoreWebService/build_output/**/*
    - scripts/**/*
    - appspec.yml

AWS CodeBuild용 .NET Core 이미지가 AWS CodeBuild 작업에 사용됩니다. buildspec.yml에서 호출할 .NET Core SDK 및 CLI가 이 이미지에 포함되어 있습니다.  이 프로젝트는 웹 서비스 1개로 구성되므로 buildspec.yml 파일 하나면 충분합니다. 프로젝트가 커지고 빌드 프로세스가 복잡해지면 셸 스크립트나 MSBuild .proj 파일을 통해 외부적으로 빌드 프로세스를 진행하고 buildspec.yml에서 간단하게 스크립트/빌드 파일을 호출할 수 있습니다.

dotnet publish 명령에 주목해 주십시오. 이 게시 단계에서는 호스트 머신에서 즉시 사용할 수 있도록 모든 종속성을 함께 패키지하므로 매우 중요합니다. 위에 나온 buildspec.yml 파일의 artifacts 섹션에서 정의한 대로 파일 목록이 Amazon S3 버킷에 저장되어 AWS CodeDeploy가 호스트에 애플리케이션을 배포하는 데 사용할 수 있습니다.  scripts/**/*에는 appsec.yml이 종속된 모든 스크립트가 포함됩니다. appsec.yml에 익숙하지 않거나 이 파일에 대해 자세히 알아보려면 다음 단원에서 다시 다루겠습니다.

이전 단원에서는 AWS CodeCommit 리포지토리에 테스트 프로젝트를 추가했습니다. 이제 buildspec.yml을 업데이트하여 새 테스트 프로젝트를 빌드하겠습니다. 빌드 단계의 일부로 dotnet vstest를 실행할 수 있습니다. 하지만 이 연습에서는 별도의 빌드 및 테스트 단계를 만들어 모범 사례를 따르겠습니다. buildspec.yml을 수정하여 테스트 바이너리를 빌드하고 비트를 AspNetCoreWebServiceTest/test_output 디렉터리에 게시합니다.

YAML
pre_build:
    commands:
        ...
        - dotnet restore AspNetCoreWebServiceTest/AspNetCoreWebServiceTest.csproj
post_build:
    commands:
        ...
        - dotnet publish -c release -o ./test_output AspNetCoreWebServiceTest/AspNetCoreWebServiceTest.csproj  
artifacts:
    files:
        ...
        - AspNetCoreWebServiceTest/test_output/**/*

AspNetCoreWebServiceTest/test_output/**/*을 아티팩트로 추가했습니다. 그래서 실제로 AWS CodeBuild 서비스가 게시된 테스트 바이너리를 Amazon S3에 업로드하므로 다음에 만들 테스트에서 이 테스트 바이너리를 참조할 수 있습니다.

AWS CodePipeline 업데이트

이전 단원에서는 새로운 테스트 프로젝트를 추가하고 buildspec.yml을 수정하여 테스트 실행에 필요한 바이너리를 빌드하고 저장했습니다. 이제 파이프라인에 테스트 단계를 추가하는 방법을 계속 설명하겠습니다. 먼저 콘솔에서 Test 단계와 UnitTest 작업을 파이프라인에 추가합니다.

나머지 UI를 따르고 다음 파라미터를 입력하십시오.

  • [Action category]: Test
  • [Action name]: UnitTest
  • [Test provider]: AWS CodeBuild
  • [Create a new build project] 선택
  • [Project name]: <your project name>-test
  • [Operating system]: Ubuntu
  • [Runtime]: .NET Core
  • [Version]: aws/codebuild/dot-net:core-1
  • [Build specification]에 대해nbsp;[Insert build Commands] 선택
  • [Build command]: dotnet vstest AspNetCoreWebServiceTest/test_output/AspNetCoreWebServiceTest.dll
  • [Role name]에 대해 목록에서 [CodeStarWorker-<your project name>-CodeBuild] 선택
  • [Input artifacts #1]에 대해 목록에서 [<your project name>-BuildArtifact] 선택

여기서 중요한 정보는 제공된 빌드 명령입니다. 이전 단계에서 빌드한 test .dll에 따라 테스트 작업이 dotnet vstest를 실행합니다. 이제 파이프라인이 다음과 같아야 합니다.

거의 끝났습니다. [Release change]를 눌러 이 파이프라인을 실행하면 [Error Code: AccessDeniedException] 메시지와 함께 Test 단계에서 파이프라인이 실패합니다. AWS CodeStar 서비스에는 새 Test 단계를 실행할 권한이 없기 때문입니다. AWS CodeStar 프로젝트에 적절한 액세스 권한을 부여하는 방법을 알아보겠습니다.

IAM 역할 및 정책 업데이트

AWS CodeStar 프로젝트는 여러 서비스와 작업자가 애플리케이션을 동기화, 빌드 및 배포할 수 있는 최소한의 권한에 대한 정책을 만들었습니다. 새로운 AWS CodeBuild 작업을 추가했기 때문에 [CodeStarWorkerCodePipelinePolicy]에서 새 리소스에 대한 액세스 권한을 부여해야 합니다. IAM 콘솔로 이동하여 변경해 보겠습니다. [Roles] 탭에서 “codebuild” 키워드를 사용하여 검색하십시오 역할은 CodeStarWorker-<project name>-CodePipeline 형식이어야 합니다. 그런 다음 역할에 연결된 정책을 편집하십시오. 편집 과정은 아래와 같습니다.

변경할 내용은 정책에서 AWS CodeBuild 작업과 연결된 새 codebuild 리소스 arn:aws:codebuild:us-east-1:532345249509:project/<your project name>-test를 추가하는 것입니다.

Js
{
    "Action": [
        "codebuild:StartBuild",
        "codebuild:BatchGetBuilds",
        "codebuild:StopBuild"
    ],
    "Resource": [
        "arn:aws:codebuild:us-east-1:532345249509:project/<your project name>"
        "arn:aws:codebuild:us-east-1:532345249509:project/<your project name>-test"
    ],
    "Effect": "Allow"
}

완료되었습니다. 이제 AWS CodeStar 프로젝트에 새 작업을 빌드하는 데 적절한 권한이 생겼습니다. [Release change]를 눌러 시도해 보십시오.

ASP.NET Core 애플리케이션 배포

이제까지 AWS CodeStar를 사용하여 프로젝트를 빌드하고 테스트하는 방법을 알아보았습니다. 이 단원에서는 배포 프로세스를 자세히 살펴보겠습니다. AWS CodeStar 프로젝트를 생성하는 동안 AWS CodeStar 서비스가 애플리케이션을 호스팅하기 위해 Amazon EC2 인스턴스를 만듭니다. appspec.yml의 지침에 따라 해당 인스턴스에서 배포 프로세스를 실행하는 code-deploy-agent도 설치합니다. appspec.yml을 살펴보겠습니다.

YAML
version: 0.0
os: linux
files:
  - source: AspNetCoreWebService/build_output
    destination: /home/ubuntu/aspnetcoreservice
  - source: scripts/virtualhost.conf
    destination: /home/ubuntu/aspnetcoreservice 
hooks:
  ApplicationStop:
    - location: scripts/stop_service
      timeout: 300
      runas: root

  BeforeInstall:
    - location: scripts/remove_application
      timeout: 300
      runas: root

  AfterInstall:
    - location: scripts/install_dotnetcore
      timeout: 500
      runas: root

    - location: scripts/install_httpd
      timeout: 300
      runas: root

  ApplicationStart:
    - location: scripts/start_service
      timeout: 300
      runas: root

배포 프로세스의 여러 단계에서 각 스트립트가 실행됩니다.

  • install_dotnetcore – 아직 설치되지 않은 경우 dotnet core를 설치하고 처음 실행할 때 패키지 캐시를 업데이트합니다. Microsoft에서는 이 방식으로 Ubuntu에서 .NET Core를 설치하도록 권장합니다.
  • install_httpd – HTTPD 대몬과 mod를 설치하고 HTTPD 구성 파일을 덮어써 reverse-proxy를 활성화합니다.
  • start_service – HTTPD 서비스를 다시 시작하고 기존의 ASP.NET 애플리케이션/서비스 프로세스를 다시 시작합니다.
  • scripts/stop_service – HTTPD 서비스를 중지하고, 아직 실행 중인 경우 ASP.NET 애플리케이션/서비스를 중지합니다.
  • remove_application – 배포된 애플리케이션을 인스턴스에서 제거합니다.

애플리케이션 배포 중에 인스턴스의 code-deploy-agent가 이 후크를 실행하여 서비스를 설치하고 시작합니다. AWS CodeDeploy 콘솔에서 이벤트 활동을 모니터링할 수 있으며 EC2 인스턴스에서 자세한 로그를 볼 수 있습니다. 인스턴스와의 SSH 연결을 열고 /var/log/aws/codedeploy-agent로 이동하여 배포 로그를 찾으십시오.

결론

이 블로그 게시물에서는 애플리케이션 파이프라인에 테스트 단계를 추가하는 예제를 통해 AWS CodeStar용 ASP.NET Core 프로젝트가 빌드 및 배포되는 방법을 알아보았습니다. 다양한 구성 요소와 AWS 서비스가 상호 작용하여 AWS CodeStar의 전체 CI/CD 시스템을 제공하는 방법을 이해하는 데 이 게시물이 도움이 되었기를 바랍니다.

이 글은 AWS 개발자 블로그의 Steven Kang이 작성한 ASP.NET Core and AWS CodeStar Deep Dive의 한국어 번역입니다.

Microsoft Visual Studio Team Services용 AWS 개발 도구 출시

오늘 Amazon Web Services는 Microsoft Visual Studio Team Services(VSTS)용 AWS 도구를 발표했습니다. Visual Studio 마켓플레이스에서 도구를 자유롭게 사용하고 배포할 수 있습니다. 빌드에서 이 작업을 사용하고 VSTS 및 Team Foundation Server에서 호스팅되는 파이프라인을 릴리스하여 AWS 제품과 상호 작용할 수 있습니다. 예를 들어, 작업을 사용하여 Amazon S3 버킷으로/버킷에서 콘텐츠를 복사하거나 파이프라인에 작업을 추가하여 빌드 출력을 AWS Elastic Beanstalk, AWS CodeDeployAWS Lambda에 배포할 수 있습니다. 또한 도구는 오픈 소스이며 GitHub에서 찾을 수 있습니다.

이 게시물에서는 도구를 설치하는 방법을 살펴보고 도구에 포함된 작업의 개요를 제공한 후 간단한 시나리오를 안내하여 설정을 확인하고 도구의 간편한 사용 방법을 보여줍니다. 이후의 게시물에서는 작업을 면밀하게 살펴보고 VSTS 파이프라인에서 작업을 사용하는 방법을 알아보겠습니다.

설치하기
쉽고 빠르게 Microsoft Visual Studio Team Services용 AWS 도구를 설치할 수 있습니다. 먼저 Visual Studio 마켓플레이스를 방문하십시오. 아래와 같이 도구 설치를 위한 두 가지 옵션이 있습니다. 온라인 VSTS 계정에 도구를 설치하거나 도구를 다운로드하여 온프레미스 Team Foundation Server 인스턴스에 설치할 수 있습니다.

그러면 끝입니다. 이제 계정이나 온프레미스 인스턴스에서 확장의 작업을 사용할 수 있으므로 이 초기 릴리스에 제공된 작업을 빠르게 검토해 보겠습니다. 앞에서 말했듯이 후속 게시물에서는 이 작업 중 몇 가지에 대해 자세히 살펴보겠습니다.

  • AWS CloudFormation Create/Update Stack. 이 작업을 통해 템플릿 파일과 선택적 파라미터 파일을 사용하여 AWS CloudFormation에서 스택을 생성하거나 업데이트할 수 있습니다. 스택이 이미 있는지 여부에 따라 기존 스택 업데이트와 새 스택 생성 간에 자동으로 작업이 전환됩니다. “모드”를 선택할 필요가 없어 파이프라인에서 이 작업을 편리하게 사용할 수 있습니다. 템플릿과 파라미터 파일을 선택할 뿐 아니라 변경 세트를 자동으로 실행하기 위해 추가한 옵션과 함께(변경 세트 확인에 성공할 경우) 변경 세트를 사용하여 스택을 만들거나 업데이트하도록 선택할 수 있습니다. 또는 Execute Change Set 작업을 사용하여 확인된 변경 세트를 나중에 실행할 수 있습니다.
  • AWS CloudFormation Delete Stack. 이 작업은 이름이나 ID로 식별된 스택을 삭제합니다. 이 작업을 사용하여 제거 및 다시 빌드 시나리오에서 새로운 배포 후에 개발 또는 테스트 환경 스택을 정리할 수 있습니다.
  • AWS CloudFormation Execute Change Set. 앞에서 말했듯이 Create/Update Stack 작업에서는 변경 세트를 사용하여 변경하는 옵션과 세트가 확인될 경우 즉시 또는 나중에 이 스택을 사용하여 변경을 실행하는 옵션이 제공됩니다. 변경 세트 이름과 연결된 스택을 제공하면 스택이 생성 또는 업데이트 완료 상태에 도달할 때까지 대기했다가 작업이 나머지 과정을 진행합니다.
  • AWS Elastic Beanstalk Deployment. 이 작업을 통해 WebDeploy 아카이브를 사용하여 기존의 ASP.NET 애플리케이션을 배포하거나 ASP.NET Core 애플리케이션을 배포할 수 있습니다.
  • AWS Lambda .NET Core Deployment. 이 작업을 통해 독립 실행형 함수 또는 서버리스 애플리케이션을 AWS Lambda에 배포할 수 있습니다. AWS Visual Studio Toolkit과 동일한 dotnet CLI 확장이 작업에 사용되므로 명령둘 도구 스위치의 전체 사용자 정의 기능을 작업에 사용할 수 있습니다.
  • AWS Lambda Invoke Function. AWS Lambda에 배포하는 것 외에도 이 작업을 사용하여 파이프라인에서 실행되도록 Lambda 함수를 트리거합니다 파이프라인의 후속 작업이 소비할 변수로 함수 결과를 내보낼 수 있습니다.
  • AWS S3 Download. 버킷 이름과 선택적 키 접두사를 함께 사용하면 하나 이상의 globbing 패턴 세트가 이 작업에 사용되어 Amazon S3 버킷에서 파이프라인의 작업 폴더로 콘텐츠를 다운로드할 수 있습니다. 예를 들어, 이 작업을 사용하여 사용자 정의 정적 콘텐츠를 빌드에 주입할 수 있습니다.
  • AWS S3 Upload. S3 다운로드 작업과 유사하게 이 작업도 버킷 이름과 globbing 패턴 세트를 소스 폴더에서 실행하여 파이프라인 작업 폴더에서 버킷으로 콘텐츠를 업로드합니다.
  • AWS Tools for Windows PowerShell Script. 이 작업을 통해 Windows PowerShell용 AWS 도구(AWSPowerShell) 모듈의 cmdlets를 사용하는 스크립트를 실행할 수 있습니다. 스크립트가 실행되기 전에 선택적으로 모듈을 설치할 수 있습니다.
  • AWS CLI. 이 작업을 통해 개별 AWS CLI 명령을 실행할 수 있습니다. 하지만 AWS CLI가 빌드 호스트에 이미 설치되어 있어야 합니다.

작업 구성 및 사용
릴리스에 포함된 작업에 대해 약간 알아보았으니 이제 파이프라인에서 AWS S3 Upload 작업을 사용하는 방법을 살펴보겠습니다. 여기서 도구의 설정을 확인하고 작업에 맞게 자격 증명이 처리되는 방식을 알아볼 수도 있습니다.

이 연습에서는 빌드 및/또는 배포할 아티팩트를 가져오는 기존의 빌드 또는 릴리스 정의가 있다고 가정합니다. 파이프라인 끝에 새 작업을 추가하고 빌드되거나 배포 가능한 아티팩트를 S3 버킷에 업로드하도록 구성하는 간단한 과정이 진행됩니다. 이제 사용할 빌드 정의를 선택하거나 새로 만드십시오. 정의를 선택하거나 만들었으면 옵션을 선택하여 정의를 편집합니다.

다음 스크린샷 예에서는 ASP.NET Core 프로젝트의 빌드 정의를 새로 만들기로 선택했습니다. 나열된 작업이 기본적으로 할당됩니다.

1. 파이프라인에 S3 업로드 작업 추가

이 연습에서는 Publish 작업에서 생성된 빌드 출력을 캡처하고 Amazon S3에 추가합니다. 따라서 기존 Publish 작업과 Publish Artifacts 작업 사이에 새 작업을 삽입합니다. 그러려면 [Add Task]를 선택하십시오. 오른쪽 패널에서 AWS 작업, 특히 [AWS S3 Upload]가 보일 때까지 사용 가능한 작업을 스크롤합니다. [Add]를 선택하여 빌드 정의에 추가하십시오.

[Publish] 작업 바로 뒤에 새 작업이 추가되지 않으면 새 작업을 제 자리로 끌어다 놓습니다. 그러면 새 작업 구성을 시작할 수 있습니다.

2. 작업 자격 증명 구성

Amazon S3와 같은 AWS 제품의 요청을 만드는 작업에는 자격 증명을 구성해야 합니다. Team Systems 용어로 서비스 엔드포인트라고 합니다. AWS 작업은 AWS라는 서비스 엔드포인트를 제공하여 자격 증명을 제공할 수 있도록 합니다. 이 작업의 자격 증명을 신속하게 추가하려면 [AWS Credentials] 상자 오른쪽에 있는 “+” 아이콘을 클릭하십시오.

기어 아이콘을 클릭하면 새 브라우저 페이지가 탭에 열리고 여기서 새 AWS 유형을 비롯하여 모든 서비스 엔드포인트를 관리할 수 있습니다. 작업에 사용할 여러 AWS 자격 증명 세트를 설정하려는 경우 이 과정을 수행합니다.

+” 아이콘을 클릭하면 AWS 키를 입력할 수 있는 팝업 창이 나타납니다.

AWS SDK 또는 AWS CLI나 PowerShell용 AWS 모듈과 같은 도구를 자주 사용한 경우 이 옵션이 익숙하게 보일 것입니다. 이 SDK 및 도구에서와 같이 AWS 자격 증명 프로파일을 기본적으로 생성합니다. 프로파일에는 이름이 있으며 여기서는 [Connection name]에 입력한 값이 작업 구성에서 이 자격 증명 세트를 나타내는 이름이 됩니다. 이제 사용할 자격 증명의 액세스 키와 보안 키를 입력하고 기억할 이름을 할당한 후 [OK]를 클릭하여 저장하십시오. 팝업이 닫히고 새 자격 증명이 미리 선택된 [S3 Upload] 작업 구성으로 돌아갑니다.

입력한 자격 증명을 다른 작업에서 다시 사용할 수 있습니다. 구성 중인 작업의 [AWS Credentials] 목록에서 자격 증명을 식별하는 데 사용한 이름을 선택하면 됩니다.

참고
계정의 루트 자격 증명은 사용하지 않는 것이 좋습니다. 대신 하나 이상의 IAM 사용자를 생성한 후 해당 자격 증명을 사용하십시오. 자세한 내용은 AWS 액세스 키 관리를 위한 모범 사례를 참조하십시오.

3. 작업 옵션 구성

자격 증명이 구성 및 선택되어 있으면 작업 구성을 완료할 수 있습니다.

  • 버킷이 있거나 생성될 리전을 설정합니다(예: us-east-1, us-west-2 등).
  • 버킷 이름을 입력합니다. 버킷 이름은 전역적으로 고유해야 합니다.
  • [Source Folder]는 업로드할 콘텐츠가 있는 빌드 영역의 폴더를 가리킵니다. Team Services에서는 하드 코딩 경로를 방지하는 데 사용할 수 있는 여러 가지 변수를 제공합니다. 자세한 내용은 여기를 참조하십시오. 이 연습에서는 Build.ArtifactStagingDirectory 변수를 사용하기로 선택합니다. 이 변수는 …아티팩트가 대상에 게시되기 전에 복사되는 에이전트의 로컬 경로로 정의됩니다. 완벽합니다.
  • [Filename Patterns]에는 업로드용 [Source Folder] 아래에서 파일을 선택하는 데 사용되는 globbing 패턴이 하나 이상 포함됩니다. 여기에 표시된 기본값은 모든 파일을 재귀적으로 선택합니다. 한 줄에 하나씩 여러 패턴을 지정할 수 있습니다. 이 연습의 경우 이전 작업(Publish)에서 빌드가 포함된 zip 파일을 내보냅니다. 이 zip이 업로드할 파일입니다.
  • [Target Folder]는 업로드한 모든 파일에 적용할 버킷의 키 접두사입니다. 폴더 경로와 비슷하게 생각할 수 있습니다. 값을 지정하지 않으면 파일이 버킷의 루트로 업로드됩니다. 기본적으로 상대적 폴더 계층 구조가 유지됩니다.
  • 마지막으로 추가 옵션을 설정할 수 있습니다.
    • Create S3 bucket if it does not exist. 버킷을 생성할 수 없으면 작업이 실패합니다.
    • Overwrite([Advanced] 섹션). 기본적으로 선택됩니다.
    • Flatten folders([Advanced] 섹션). [Source Folder]에 상대적인 각 파일의 경로를 제거하고 모든 파일을 [Target Folder]에 직접 배치합니다.

4. 빌드 실행

새 작업이 구성되었으므로 빌드를 실행할 수 있습니다. [Save & queue]를 선택하십시오.

빌드 도중에 작업이 로그에 메시지를 출력합니다.


맺는말
살펴본 바와 같이 새 작업을 사용하는 일은 단순합니다. 향후 게시물에서는 몇 가지 배포 작업과 그 사용 방법을 자세히 설명하겠습니다. 새로운 도구의 등장이 여러분에게 기쁨이 되고 VSTS 환경에서 유익하게 사용되기 바랍니다. GitHub repo에서 피드백을 주시면 이후의 개발 활동에 참고하겠습니다.

감사의 말씀
이 새로운 도구를 Visual Studio 마켓플레이스에 소개하도록 도움과 지원을 아끼지 않은 Visual Studio ALM Rangers에 감사드립니다.

이 글은 Announcing the AWS Tools for Microsoft Visual Studio Team Services의 한국어 번역입니다.

AWS CodeStar 및 CodeBuild에 신규 닷넷(.Net) 코어 앱 개발 지원

몇 달 전에 AWS 기반 애플리케이션을 신속하게 개발, 구축 및 배포 할 수있게 해주는 AWS CodeStar 서비스를 소개했습니다. AWS CodeStar는 개발팀이 훌륭한 소프트웨어를 하기 위한 다양한 개발 및 배포 도구를 활용하면서 서비스 출시 속도를 높이고, 인프라 관리 비용은 줄이는 최적의 관리 도구 입니다.

CodeStar 서비스 출시 당시 자바 스크립트, 자바, 파이썬, 루비, PHP 등 5가지 프로그래밍 언어와 Amazon EC2, AWS Elastic Beanstalk 및 AWS Lambda에 대한 다양한 프로젝트 템플릿을 출시했습니다. 각 템플릿은 AWS 기반 인프라에 AWS 코드 서비스를 함께 구성하여 빠른 데브옵스(DevOps) 파이프라인을 만들 수 있습니다.

오늘 AWS CodeStar 및 AWS CodeBuild에 닷넷(.NET) 코어 애플리케이션 개발, 구축 및 배포 기능을 추가하였습니다. 이 글에서는 CodeStar를 사용하여 EC2에서 .NET 기반 ASP.Net 웹 애플리케이션 빌드 및 배포를 하고, .NET 기반 Lambda 함수를 만들어 ASP.Net 앱을 CodeBuild를 통해 진행해 보도록 하겠습니다.

먼저 CodeStar 콘솔에 로그인하여 새로운 CodeStar 프로젝트를 시작하겠습니다. 프로젝트 템플릿을 선택하는 옵션이 표시됩니다.

지금은 .NET 핵심 프로젝트를 만드는 데 중점을 두고자하므로 프로그래밍 언어 섹션에서 C#을 선택하여 프로젝트 템플릿을 필터링 합니다.이제 CodeStar는 ASP.NET Core로웹 애플리케이션과 서비스를 작성하는 데 사용할 수있는 새로운 .NET Core 프로젝트 템플릿 만 보여줍니다. 프로젝트 템플릿 정보에서 볼 수 있듯이 Amazon EC2에 배포됩니다. 이는 .NET Core 코드가 AWS CodeBuild를 사용하여 컴파일 및 패키지되고 AWS CodeDeploy 서비스를 사용하여 EC2에 배포된다는 것을 의미합니다.

이제 프로젝트 이름을 ASPNetCore4Tara로 지정하면, Project ID 는 자동으로 지정됩니다. 이 화면에서는 CodeStar에서 닷넷 애플리케이션을 소스 코드로 부터 배포까지 필요한 절차 및 사용할 AWS 서비스를 볼 수 있습니다. Next를 클릭합니다.

ASP.Net 프로그램이 Amazon EC2 인스턴스에 배포되기 때문에 SSH를 통한 콘솔 접속을 위해 EC2 키 페어를 선택(없으면 EC2 콘솔에서 새로 작성 필요) 합니다.  키페어를 선택했으면 Create Project 버튼을 클릭합니다.


AWS CodeStar가 프로젝트 생성을 완료하고, 관련 AWS 서비스를 모두 프로비저닝 한 후에는 CodeStar 대시 보드에 표시된 애플리케이션 엔드 포인트에서 샘플 애플리케이션을 볼 수 있습니다.  Application Endpoints 아래 링크를 클릭하여 샘플 ASP.NET Core 웹 응용 프로그램을 봅니다.

이제 생성 된 프로젝트의 소스 코드를 로컬로 복제(clone)하고 Visual Studio IDE를 프로젝트 리포지토리에 연결합니다. 소스 코드가 변경 되면, AWS CodeBuild를 통해 자동으로 Amazon EC2 및 AWS Lambda에 .NET Core 빌드 및 배포를 지원하며, 변경 사항에 맞게 람다 함수의 빌드 사양 파일을 적절하게 변경합니다.

먼저 Visual Studio IDE를 열고 ASPNetCore4Tara 프로젝트에 제공되는 AWS CodeCommit 리포지토리에 연결합니다. Visual Studio 2017 IDE는 AWS CodeStar의 .NET Core 프로젝트에 필요하며, AWS Toolkit for Visual Studio 2017은 프로젝트 레포지토리를 IDE에 연결하기 전에 설치 해야합니다.

Visual Studio에서 자신의 Repo에 연결하려면 Team Explorer를 열고, Hosted Service Providers  아래의 AWS CodeCommit 옵션에서 연결 링크를 선택합니다. 기본 AWS 프로파일 툴킷 자격 증명을 유지하려면 Ok을 클릭합니다.

공급자 영역의 Manage ConnectionsAWS CodeCommit 아래의 Clone을 선택합니다.

일단 AWS CodeCommit에서 aspnetcore4tara 저장소를 선택하여 Clone AWS CodeCommit Repository 를 선택하면, Git Credentials 대화 상자에 IAM 역할 내 HTTPS Git 자격 증명을 입력합니다. 이제 전체 프로세스가 완료되었고, Git Credential Manager 로그인 대화 상자가 표시되면 동일한 IAM 역할의 Git 자격 증명을 입력해도 됩니다.

개발 프로젝트가 이제 aspnetcore4tara CodeCommit 저장소에 연결되고 웹 애플리케이션 편집이 가능합니다. 아래의 스크린 샷에서 알 수 있듯이 샘플 프로젝트는 표준 ASP.NET Core MVC 웹 응용 프로그램으로 구성되어 있습니다.

프로젝트가 생성되면 변경과 업데이트를 할 수 있습니다. 이 프로젝트를 .NET Lambda 함수로 업데이트하고자 하므로 Visual Studio에서 CodeStar 프로젝트로 컴파일 할 매우 간단한 C# Lambda 함수를 작성하는 새로운 프로젝트를 빠르게 시작합니다. 이 AWS Lambda 함수는 CodeStar ASP.NET Core 웹 앱 프로젝트에 포함됩니다.

아래 람다 함수는 NASA의 유명한 천문학 사진 (Astronomy Picture of the Day) 웹 사이트의 REST API를 호출합니다. API는 최신 행성 이미지 및 관련 정보를 JSON 형식으로 다시 보냅니다. 아래에서 람다 함수 코드를 볼 수 있습니다.

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using System.Net.Http;
using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace NASAPicOfTheDay
{
    public class SpacePic
    {
        HttpClient httpClient = new HttpClient();
        string nasaRestApi = "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY";

        /// <summary>
        /// A simple function that retreives NASA Planetary Info and 
        /// Picture of the Day
        /// </summary>
        /// <param name="context"></param>
        /// <returns>nasaResponse-JSON String</returns>
        public async Task<string> GetNASAPicInfo(ILambdaContext context)
        {
            string nasaResponse;
            
            //Call NASA Picture of the Day API
            nasaResponse = await httpClient.GetStringAsync(nasaRestApi);
            Console.WriteLine("NASA API Response");
            Console.WriteLine(nasaResponse);
            
            //Return NASA response - JSON format
            return nasaResponse; 
        }
    }
}

이제 C# Lambda 함수를 게시하고 NASAPicOfTheDay 프로젝트가있는 Visual Studio 용 AWS Toolkit에서 제공하는 AWS Lambda에 게시 옵션을 사용하여 테스트 할 것입니다. 함수를 게시 한 후 테스트하여 Visual Studio 및 / 또는 AWS Lambda 콘솔에서 올바르게 작동하는지 확인할 수 있습니다. C# 및 .NET을 사용하여 AWS Lambda 함수를 작성하는 방법에 대해 자세히 알아볼 수 있습니다. http://docs.aws.amazon.com/lambda/latest/dg/dotnet-programming-model.html

이제 람다 함수를 완성하고 테스트하였으므로, aspnetcore4tara라는 CodeStar 프로젝트에서 CodeBuild buildspec.yml 파일을 업데이트하여 람다 함수 배포를 포함합니다.

이 작업을 수행하기 위해 functions라는 새 폴더를 만들고 Lambda 함수 .NET 프로젝트가 포함 된 폴더를 aspnetcore4tara 웹 응용 프로그램 프로젝트 디렉토리에 복사합니다.

AWS Lambda 함수 빌드 및 배포를 위해,  aws-lambda-dotnet tools 에 사용된  buildspec.yml 파일에 명령을 사용합니다. 여기의 사용자 맞춤 프로파일 정보가 들어있는 NASAPicOfTheDay 폴더에 funcprof 파일을 추가합니다. 남아있는 작업은 NASAPictureOfDay를 배표하기 위해 AWS 람다 함수를 포함 ASPNetCore4Tara 프로젝트 빌드를 위해 CodeBuild가 사용하는 buildspec.yml 파일을 업데이트하는 것입니다. 업데이트 된 buildspec.yml은 다음과 같습니다 :

YAML
version: 0.2
phases:
  env:
  variables:
    basePath: 'hold'
  install:
    commands:
      - echo set basePath for project
      - basePath=$(pwd)
      - echo $basePath
      - echo Build restore and package Lambda function using AWS .NET Tools...
      - dotnet restore functions/*/NASAPicOfTheDay.csproj
      - cd functions/NASAPicOfTheDay
      - dotnet lambda package -c Release -f netcoreapp1.0 -o ../lambda_build/nasa-lambda-function.zip
  pre_build:
    commands:
      - echo Deploy Lambda function used in ASPNET application using AWS .NET Tools. Must be in path of Lambda function build 
      - cd $basePath
      - cd functions/NASAPicOfTheDay
      - dotnet lambda deploy-function NASAPicAPI -c Release -pac ../lambda_build/nasa-lambda-function.zip --profile-location funcprof -fd 'NASA API for Picture of the Day' -fn NASAPicAPI -fh NASAPicOfTheDay::NASAPicOfTheDay.SpacePic::GetNASAPicInfo -frun dotnetcore1.0 -frole arn:aws:iam::xxxxxxxxxxxx:role/lambda_exec_role -framework netcoreapp1.0 -fms 256 -ft 30  
      - echo Lambda function is now deployed - Now change directory back to Base path
      - cd $basePath
      - echo Restore started on `date`
      - dotnet restore AspNetCoreWebApplication/AspNetCoreWebApplication.csproj
  build:
    commands:
      - echo Build started on `date`
      - dotnet publish -c release -o ./build_output AspNetCoreWebApplication/AspNetCoreWebApplication.csproj
artifacts:
  files:
    - AspNetCoreWebApplication/build_output/**/*
    - scripts/**/*
    - appspec.yml
    

이제 끝났습니다. 이제 ASPNetCore4Tara 프로젝트를 위해 제공된 CodeCommit 저장소에 수정할 파일 추가 및 업데이트를 진행하면, 전체적으로 AWS CodePipeline을 자동 시작하여,  AWS CodeCommit에서 부터 CodeBuild까지 .NET Core에 대한 새로운 기능을 사용하여 ASP.NET Core 웹 애플리케이션과 .NET 기반 AWS Lambda 기능을 모두 처리할 수 있습니다.

요약하기
AWS CodeStar 및 AWS CodeBuild의 .NET Core에 대한 지원은 .NET 개발자가 AWS에서 .NET 기반 솔루션을 빌드 할 때 지속적인 통합(CI) 및 전달(CD)의 이점을 활용할 수 있습니다. AWS CodeStar 및 AWS CodeBuild의 .NET Core 지원에 대한 자세한 내용을 보거나 AWS CodeStar에 대한 소개는 지난 온라인 세미나 영상을 참고하시기 바랍니다.

.NET Core를 AWS CodeStar 및 AWS CodeBuild와 함께 사용함으로서 AWS 기반.NET 프로젝트를 보다 효율적으로 구축 할 수 있습니다.

Tara;

이 글은 Launch – .NET Core Support In AWS CodeStar and AWS Codebuild의 한국어 요약입니다.