Category: AWS .NET Development


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의 한국어 요약입니다.