

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자습서:를 사용하여 서버리스 애플리케이션 빌드 및 테스트 AWS Lambda
<a name="lambda-build-test-severless-app"></a>

 AWS Toolkit for Visual Studio 템플릿을 사용하여 서버리스 Lambda 애플리케이션을 빌드할 수 있습니다. Lambda 프로젝트 템플릿에는 **AWS 서버리스 애플리케이션** 모델(SAM)의 AWS Toolkit for Visual Studio 구현인 서버리스 애플리케이션용 템플릿이 포함되어 있습니다. [AWSAWS](https://github.com/awslabs/serverless-application-model) 이 프로젝트 유형을 사용하면 AWS Lambda 함수 모음을 개발하고 필요한 AWS 리소스와 함께 전체 애플리케이션으로 배포할 수 있습니다.를 사용하여 배포를 오케스트레이션 AWS CloudFormation 할 수 있습니다.

설정에 대한 사전 조건 및 정보는 Toolkit for Visual Studio의 Lambda 템플릿 사용을 AWS Toolkit for Visual Studio참조하세요. [AWSAWS](lambda-index.md) 

**Topics**
+ [새 AWS 서버리스 애플리케이션 프로젝트 생성](#create-a-new-aws-serverless-application-project)
+ [서버리스 애플리케이션 파일 검토](#examine-the-files-in-the-serverless-application)
+ [서버리스 애플리케이션 배포](#deploy-the-serverless-application)
+ [서버리스 애플리케이션 테스트](#test-the-serverless-application)

## 새 AWS 서버리스 애플리케이션 프로젝트 생성
<a name="create-a-new-aws-serverless-application-project"></a>

AWS 서버리스 애플리케이션 프로젝트는 서버리스 CloudFormation 템플릿으로 Lambda 함수를 생성합니다. CloudFormation templates를 사용하면 데이터베이스와 같은 추가 리소스를 정의하고, IAM 역할을 추가하고, 한 번에 여러 함수를 배포할 수 있습니다. 이는 단일 AWS Lambda 함수를 개발하고 배포하는 데 중점을 둔 Lambda 프로젝트와 다릅니다.

다음 절차에서는 새로운 AWS 서버리스 애플리케이션 프로젝트를 생성하는 방법을 설명합니다.

1. Visual Studio에서 **파일** 메뉴와 **새로 만들기**를 확장한 다음 **프로젝트**를 선택합니다.

1. **새 프로젝트** 대화 상자에서 **언어**, **플랫폼** 및 **프로젝트 유형** 드롭다운 상자가 ‘모두…’로 설정되어 있는지 확인하고 **검색** 필드에 **aws lambda**를 입력합니다.

1. **테스트가 포함된AWS 서버리스 애플리케이션(.NET Core - C\$1)** 템플릿을 선택하세요.
**참고**  
**테스트가 포함된AWS 서버리스 애플리케이션(.NET Core - C\$1)** 템플릿이 결과 상단에 채워지지 않을 수 있습니다.

1. **다음**을 클릭하여 **새 프로젝트 구성** 대화 상자를 엽니다.

1. **새 프로젝트 구성** 대화 상자에서 **이름**에 **ServerlessPowertools**를 입력한 다음 나머지 필드를 원하는 대로 작성합니다. **생성** 버튼을 선택하여 **블루프린트 선택** 대화 상자로 이동합니다.

1. **블루프린트 선택** 대화 상자에서 ** AWS Lambda용 Powertools** 블루프린트를 선택한 후 **완료**를 선택하여 Visual Studio 프로젝트를 만듭니다.

## 서버리스 애플리케이션 파일 검토
<a name="examine-the-files-in-the-serverless-application"></a>

다음 섹션에서는 프로젝트에 대해 생성된 3개의 서버리스 애플리케이션 파일을 자세히 살펴봅니다.

1. serverless.template

1. Functions.cs

1. aws-lambda-tools-defaults.json

### 1. serverless.template
<a name="blogcs"></a>

`serverless.template` 파일은 Serverless 함수 및 기타 AWS 리소스를 선언하기 위한 AWS CloudFormation 템플릿입니다. 이 프로젝트에 포함된 파일에는 Amazon API Gateway를 통해 `HTTP *Get*` 작업으로 노출되는 단일 Lambda 함수에 대한 선언이 포함되어 있습니다. 이 템플릿을 편집하여 기존 함수를 사용자 지정하거나 애플리케이션에 필요한 함수 및 기타 리소스를 더 추가할 수 있습니다.

다음은 `serverless.template` 파일의 예제입니다.

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Description": "An AWS Serverless Application.",
  "Resources": {
    "Get": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
         "Architectures": [
            "x86_64"
            ],
         "Handler": "ServerlessPowertools::ServerlessPowertools.Functions::Get",
         "Runtime": "dotnet8",
         "CodeUri": "",
         "MemorySize": 512,
         "Timeout": 30,
         "Role": null,
         "Policies": [
            "AWSLambdaBasicExecutionRole"
            ],
         "Environment": {
            "Variables": {
               "POWERTOOLS_SERVICE_NAME": "ServerlessGreeting",
               "POWERTOOLS_LOG_LEVEL": "Info",
               "POWERTOOLS_LOGGER_CASE": "PascalCase",
               "POWERTOOLS_TRACER_CAPTURE_RESPONSE": true,
               "POWERTOOLS_TRACER_CAPTURE_ERROR": true,
               "POWERTOOLS_METRICS_NAMESPACE": "ServerlessGreeting"
               }
            },
         "Events": {
            "RootGet": {
               "Type": "Api",
               "Properties": {
                  "Path": "/",
                  "Method": "GET"
                  }
               }
            }
         }
      }
   },
  "Outputs": {
    "ApiURL": {
      "Description": "API endpoint URL for Prod environment",
      "Value": {
        "Fn::Sub": "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"
      }
    }
  }
}
```

많은 `...AWS:: Serverless::Function...` 선언 필드가 Lambda 프로젝트 배포의 필드와 유사합니다. Powertools 로깅, 지표 및 추적은 다음 환경 변수를 통해 구성됩니다.
+ POWERTOOLS\$1SERVICE\$1NAME=ServerlessGreeting
+ POWERTOOLS\$1LOG\$1LEVEL=Info
+ POWERTOOLS\$1LOGGER\$1CASE=PascalCase
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1RESPONSE=true
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1ERROR=true
+ POWERTOOLS\$1METRICS\$1NAMESPACE=ServerlessGreeting

환경 변수에 대한 정의 및 추가 세부 정보는 [Powertools for AWS Lambda references](https://awslabs.github.io/aws-lambda-powertools-dotnet/references/) 웹 사이트를 참조하세요.

### 2. Functions.cs
<a name="functionscs"></a>

`Functions.cs`는 템플릿 파일에 선언된 단일 함수에 매핑된 C\$1 메서드가 포함된 클래스 파일입니다. Lambda 함수는 API Gateway의 `HTTP Get` 메서드에 응답합니다. 다음은 `Functions.cs` 파일의 예입니다.

```
public class Functions
{
    [Logging(LogEvent = true, CorrelationIdPath = CorrelationIdPaths.ApiGatewayRest)]
    [Metrics(CaptureColdStart = true)]
    [Tracing(CaptureMode = TracingCaptureMode.ResponseAndError)]
    public APIGatewayProxyResponse Get(APIGatewayProxyRequest request, ILambdaContext context)
    {
        Logger.LogInformation("Get Request");

        var greeting = GetGreeting();

        var response = new APIGatewayProxyResponse
        {
            StatusCode = (int)HttpStatusCode.OK,
            Body = greeting,
            Headers = new Dictionary (string, string) { { "Content-Type", "text/plain" } }
        };

        return response;
    }

    [Tracing(SegmentName = "GetGreeting Method")]
    private static string GetGreeting()
    {
        Metrics.AddMetric("GetGreeting_Invocations", 1, MetricUnit.Count);

        return "Hello Powertools for AWS Lambda (.NET)";
    }
}
```

### 3. aws-lambda-tools-defaults.json
<a name="functionscs"></a>

`aws-lambda-tools-defaults.json`는 Visual Studio 내의 AWS 배포 마법사 기본값과 .NET Core CLI에 추가된 AWS Lambda 명령을 제공합니다. 다음은 이 프로젝트에 포함된 `aws-lambda-tools-defaults.json` 파일의 예입니다.

```
{
  "profile": "Default",
  "region": "us-east-1",
  "configuration": "Release",
  "s3-prefix": "ServerlessPowertools/",
  "template": "serverless.template",
  "template-parameters": ""
}
```

## 서버리스 애플리케이션 배포
<a name="deploy-the-serverless-application"></a>

서버리스 애플리케이션을 배포하려면 다음 단계를 완료합니다.

1. **솔루션 탐색**기에서 프로젝트의 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 열고 ** AWS Lambda에 게시**를 선택하여 ** AWS 서버리스 애플리케이션 게시** 대화 상자를 엽니다.

1. ** AWS 서버리스 애플리케이션 게시** 대화 상자에서 CloudFormation 스택 이름 필드에 스택 컨테이너의 **이름을** 입력합니다.

1. **S3 버킷** 필드에서 애플리케이션 번들이 업로드할 Amazon S3 버킷을 선택하거나 **새로 만들기...** 버튼을 선택하고 새 Amazon S3 버킷의 이름을 입력합니다. 그런 다음 **게시**를 선택하여 애플리케이션 배포를 게시합니다.
**참고**  
 CloudFormation 스택과 Amazon S3 버킷이 동일한 AWS 리전에 있어야 합니다. 프로젝트의 나머지 설정은 `serverless.template` 파일에 정의되어 있습니다.  
![\[AWS 서버리스 애플리케이션 게시 대화 상자의 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-serverless-03192024.png)

1. 게시 프로세스 중에 **스택** 보기 창이 열리고 배포가 완료되면 **상태** 필드에 `CREATE_COMPLETE`가 표시됩니다.  
![\[Visual Studio의 배포 스택 보기 창 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-stackview-03192024.png)

## 서버리스 애플리케이션 테스트
<a name="test-the-serverless-application"></a>

스택 생성이 완료되면 **AWS 서버리스 URL**을 사용하여 애플리케이션을 볼 수 있습니다. 함수나 파라미터를 추가하지 않고이 자습서를 완료한 경우 AWS 서버리스 URL에 액세스하면 웹 브라우저에 라는 문구가 표시됩니다`Hello Powertools for AWS Lambda (.NET)`.