Amazon Web Services 한국 블로그

AWS Toolkit for Visual Studio에서 VS 2019 지원 사용해 보기

AWS Toolkit for Visual Studio의 새 버전이 Visual Studio Marketplace에 출시되었으며, 최근에 Visual Studio 2019에 대한 지원이 추가되었습니다. Visual Studio 2019는  지난 2019년 4월 2일 일자로 GA(정식 출시) 릴리스를 발표했습니다.

AWS Toolkit for Visual Studio에서는 AWS에서 여러분이 작성한 코드가 실행될 수 있도록 돕는 Visual Studio의 여러 기능을 지원합니다. ASP.NET 및 ASP.NET Core 웹 애플리케이션을 AWS Elastic Beanstalk에 배포하거나 컨테이너를 Amazon Elastic Container Service(Amazon ECS)에 배포, AWS Lambda 및 AWS CloudFormation에서 .NET Core 서버리스 애플리케이션을 배포하는 기능이 포함됩니다.

이 툴킷에는 Amazon S3 버킷 및 Amazon DynamoDB 테이블처럼 가장 많이 사용되는 개발자 리소스를 관리할 수 있는 AWS 탐색기 도구 창도 포함되어 있습니다.

추가적으로 .NET Core Global Tool이나 Amazon.Lambda.Tools에서만 사용할 수 있었던 .NET Core Lambda의 최신 릴리스도 몇 가지 제공합니다. AWS Toolkit for Visual Studio의 새 릴리스에서는 이제 다음과 같은 Visual Studio의 새로운 기능을 사용할 수 있습니다.

Lambda 사용자 지정 .NET Core 런타임

Lambda에서 사용자 지정 .NET Core 런타임 사용에 대한 지원이 최근에 출시되었습니다. 이는 Lambda에서 .NET Core 2.2 또는 .NET Core 3.0 미리보기 버전과 같은 .NET Core의 모든 버전을 사용할 수 있도록 합니다. 이제 AWS Toolkit for Visual Studio에도 이 지원이 추가됩니다.

Custom Runtime Function 블루프린트를 선택하여 .NET Core 2.2를 사용하는 Lambda 프로젝트를 생성할 수 있습니다. .NET Core 3.0 미리보기 버전을 사용하려면 프로젝트 속성에서 프로젝트의 대상 프레임워크만 변경하면 됩니다.

기존의 Lambda 프로젝트를 사용할 때와 같이 해당 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Publish to AWS를 선택하면 몇 가지 차이를 확인할 수 있습니다.

이제 Language Runtime 항목은 Custom .NET Core Runtime으로, Frameworknetcoreapp3.0으로 표시됩니다. 또한 더 이상 Lambda 핸들러의 어셈블리, 유형 및 메서드를 선택하지 않아도 됩니다. 대신 선택적 핸들러 항목이 있습니다. 사용자 지정 런타임 함수에서 .NET Core 프로젝트는 실행 파일로 패키지되므로 핸들러는 선택 사항이며, Main 메서드를 호출하여 .NET 프로세스를 시작합니다. _HANDLER 환경 변수를 사용하여 코드에 액세스할 수 있는 핸들러에 대한 값을 계속 설정할 수 있습니다.

Lambda 계층

Lambda 계층 기능도 Amazon.Lambda.Tools .NET Core Global Tool에 추가되었습니다. 이 기능은  .NET 어셈블리의 계층을 쉽게 생성하고 Lambda의 지정된 계층에 프로젝트를 배포하도록 합니다. 이를 통해 배포 번들의 크기를 줄일 수 있습니다. 또한 Amazon Linux 환경에서 계층을 생성하는 경우 사전 지터를 적용해 계층에 추가된 .NET 어셈블리를 최적화할 수 있습니다. 이 방법으로 콜드 스타트 시간을 줄일 수 있습니다. 여기에서 패키지 최적화에 대한 자세한 내용을 확인할 수 있습니다.

계층은 Amazon.Lambda.Tools .NET Core Global Tool에서 여전히 생성해야 합니다. 하지만 계층을 생성한 후에는 프로젝트 수준에서 계층을 참조할 수 있으므로 Visual Studio가 배포 패키지를 생성할 때 이 계층을 이용할 수 있게 됩니다.

Visual Studio에서 계층을 사용하는 방법을 간단히 살펴보겠습니다. 먼저 Amazon.Lambda.Tools를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다.

dotnet tool install -g Amazon.Lambda.Tools

이미 설치한 경우 버전 3.2.0 이상이어야 합니다. 이 버전보다 낮을 경우 다음 명령을 사용하여 업데이트합니다.

dotnet tool update -g Amazon.Lambda.Tools

그리고 콘솔 창에서 프로젝트를 탐색한 후 다음 명령을 실행합니다.

dotnet lambda publish-layer <layer-name> —layer-type runtime-package-store —s3-bucket <bucket>

그러면 계층이 생성되고 계층의 새 버전에 대한 ARN이 출력됩니다. 출력된 계층 이름은 다음과 같은 형식으로 보여집니다. arn:aws:lambda:us-west-2:123412341234:layer:DemoTest:1

만약 Lambda 서비스에 직접 배포되는 Lambda 프로젝트 템플릿을 사용한 경우 aws-lambda-tools-defaults.json 구성 파일에서 function-layers 키를 사용하여 계층을 지정할 수 있습니다. 다중 계층을 사용하려는 경우 쉼표로 구분된 목록을 사용합니다.

{
    "profile"               : "default",
    "region"                : "us-west-2",
    "configuration"         : "Release",
    "framework"             : "netcoreapp2.1",
    "function-runtime"      : "dotnetcore2.1",
    "function-memory-size"  : 256,
    "function-timeout"      : 30,
    "function-handler"      : "DemoLayerTest::DemoLayerTest.Function::FunctionHandler",

    "function-layers"       : "arn:aws:lambda:us-west-2:123412341234:layer:DemoTest:1"
}

AWS CloudFormation 템플릿(보통 serverless.template 파일이라고 함)으로 배포하는 경우 Layers 속성을 사용하여 계층을 지정해야 합니다.

"Get" : {
    "Type" : "AWS::Serverless::Function",
    "Properties": {
        "Handler": "DemoLayerServerlessTest::DemoLayerServerlessTest.Functions::Get",
        "Runtime": "dotnetcore2.1",
        "CodeUri": "",
        
        "Layers" : ["arn:aws:lambda:us-west-2:123412341234:layer:DemoTest:1"],
        
        "MemorySize": 256,
        "Timeout": 30,
        "Role": null,
        "Policies": [ "AWSLambdaBasicExecutionRole" ],
        "Events": {
        }
    }
}

Visual Studio의 배포 마법사는 지정된 계층의 계층 설정을 선택할 것입니다. Visual Studio는 AWS 도구에서 사용하는 dotnet publish 명령으로 이 계층 정보를 전달하므로 배포 번들은 계층에서 제공해야하는 .NET 어셈블리 없이도 생성됩니다.

일반적인 시나리오로서 팀의 한 명의 개발자 또는 자동화를 통해서 최적화 기능을 사용하여 공통 계층이 생성될 수 있습니다. 이 경우 해당 계층은 개발 환경에서 팀의 나머지 구성원과 공유됩니다.

계층과 사용자 지정 런타임에 대해 마지막으로 언급하고 싶은 내용은 현재 사용자 지정 런타임과 계층 기능을 함께 사용할 수 없다는 것입니다. 사용자 지정 런타임이 배포 패키지에 포함된 .NET Core의 모든 필수 런타임 어셈블리에서 모든 필수 요소를 자체 포함한 애플리케이션 형태로 배포하기 때문입니다. 자체 포함 모드로 사용되는 dotnet publish에 대한 호출의 경우 제외할 어셈블리의 매니페스트를 전달할 수 없습니다.

Visual Studio 새 프로젝트 마법사

Visual Studio 2019는 프로젝트 생성 경험을 새롭게 다시 설계했습니다. AWS Toolkit for Visual Studio와 같은 Visual Studio 확장에서는 아직 재설계된 경험의 일부 기능을 사용할 수 없습니다.

예를 들어, 새로운 프로젝트 마법사에 나오는 Language, Platform 또는 Project 유형 필터는 AWS에서 제공하는 템플릿과 같은 사용자 지정 프로젝트 템플릿에서 액세스할 수 없습니다. 언어 필터로 C#을 선택할 경우 C# 프로젝트 템플릿이 표시되지 않습니다.

Visual Studio 팀은 Visual Studio 2019의 향후 업데이트에서 확장 기능에 대한 이 문제를 처리할 계획이지만, 초기 GA 버전에는 변경 사항이 포함되지 않습니다. 이 문제를 해결할 때까지 AWS 프로젝트 템플릿을 찾는 가장 좋은 방법은 검색 표시줄에서 “AWS” 또는 “Lambda”를 검색하는 것입니다.

마무리

AWS Toolkit for Visual Studio는 Visual Studio 2008 및 2010 버전을 대상으로 2011년에 처음으로 출시된 이후로 ASP.NET 웹 앱에 대한 지원을 포함하는 등의 업데이트를 게속 해왔습니다. 서버리스 및 컨테이너 지원과 함께 웹 애플리케이션에 대한 Elastic Beanstalk 지원을 통해 AWS로 댜앙햔 유형의 애플리케이션을 배포하는데 이 툴킷을 사용할 수 있습니다.

저희는 isual Studio 지원에 대한 여러분의 의견을 기다리고 있습니다. .NET 리포지토리를 통해 AWS Toolkit for Visual Studio에 대한 의견을 제공하실 수 있습니다.

– Norm;

이 글은 AWS Developer Blog의 AWS Toolkit for Visual Studio now supports Visual Studio 2019 의 한국어 번역입니다.