

# PowerShell을 사용하여 Lambda 함수 빌드
<a name="lambda-powershell"></a>

다음 단원에서는 일반적인 프로그래밍 패턴 및 핵심 개념이 PowerShell로 Lambda 함수 코드를 작성할 때 어떻게 적용되는지 설명합니다.

Lambda는 PowerShell에 대해 다음과 같은 샘플 애플리케이션을 제공합니다.
+ [blank-powershell](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-powershell) – 로깅, 환경 변수 및 AWS SDK를 사용하는 방법을 보여주는 PowerShell 함수입니다.

시작하기 전에 PowerShell 개발 환경을 먼저 설정해야 합니다. 작업 방법에 대한 지침은 [PowerShell 개발 환경 설정](powershell-devenv.md) 단원을 참조하십시오.

AWSLambdaPSCore 모듈을 사용해 템플릿에서 샘플 PowerShell 프로젝트를 다운로드하고, PowerShell 배포 패키지를 생성하고, AWS 클라우드에 PowerShell 함수를 배포하는 방법을 알아보려면 [.zip 파일 아카이브를 사용하여 PowerShell Lambda 함수 배포](powershell-package.md) 단원을 참조하세요.

Lambda는 .NET 언어에 대해 다음과 같은 런타임을 제공합니다.


| 이름 | 식별자 | 운영 체제 | 사용 중단 날짜 | 블록 함수 생성 | 블록 함수 업데이트 | 
| --- | --- | --- | --- | --- | --- | 
|  .NET 10  |  `dotnet10`  |  Amazon Linux 2023  |   2028년 11월 14일   |   2028년 12월 14일   |   2029년 1월 15일   | 
|  .NET 9(컨테이너만 해당)  |  `dotnet9`  |  Amazon Linux 2023  |   2026년 11월 10일   |   예약되지 않음   |   예약되지 않음   | 
|  .NET 8  |  `dotnet8`  |  Amazon Linux 2023  |   2026년 11월 10일   |   2026년 12월 10일   |   2027년 1월 11일   | 

**Topics**
+ [PowerShell 개발 환경 설정](powershell-devenv.md)
+ [.zip 파일 아카이브를 사용하여 PowerShell Lambda 함수 배포](powershell-package.md)
+ [PowerShell에서 Lambda 함수 핸들러 정의](powershell-handler.md)
+ [Lambda 컨텍스트 객체를 사용하여 PowerShell 함수 정보 검색](powershell-context.md)
+ [Powershell Lambda 함수 기록 및 모니터링](powershell-logging.md)

# PowerShell 개발 환경 설정
<a name="powershell-devenv"></a>

Lambda는 PowerShell 런타임을 위한 여러 도구와 라이브러리를 제공합니다. 설치 지침은 GitHub에서 [Lambda Tools for PowerShell](https://github.com/aws/aws-lambda-dotnet/tree/master/PowerShell)을 참조하세요.

AWSLambdaPSCore 모듈에는 PowerShell Lambda 함수 작성 및 게시에 유용하게 사용할 수 있는 다음과 같은 cmdlet이 있습니다.
+ **Get-AWSPowerShellLambdaTemplate** – 시작하기 템플릿의 목록을 반환합니다.
+ **New-AWSPowerShellLambda** – 템플릿을 기반으로 최초의 PowerShell 스크립트를 생성합니다.
+ **Publish-AWSPowerShellLambda** – 지정된 PowerShell 스크립트를 Lambda에 게시합니다.
+ **New-AWSPowerShellLambdaPackage** – 배포를 위해 CI/CD 시스템에서 사용할 수 있는 Lambda 배포 패키지를 생성합니다.

# .zip 파일 아카이브를 사용하여 PowerShell Lambda 함수 배포
<a name="powershell-package"></a>

PowerShell 런타임의 배포 패키지는 PowerShell 스크립트, PowerShell 스크립트에 필요한 PowerShell 모듈 및 PowerShell Core를 호스팅하는 데 필요한 어셈블리를 포함합니다.

## Lambda 함수 생성
<a name="powershell-package-create"></a>

Lambda를 사용하여 PowerShell 스크립트를 작성하고 호출하려면 `New-AWSPowerShellLambda` cmdlet을 사용하여 템플릿을 기반으로 스타터 스크립트를 생성할 수 있습니다. `Publish-AWSPowerShellLambda` cmdlet을 사용해 스크립트를 Lambda에 배포할 수 있습니다. 그런 다음 명령줄 또는 Lambda 콘솔에서 스크립트를 테스트할 수 있습니다.

새 PowerShell 스크립트를 생성하고, 업로드하고, 테스트하려면 다음 절차를 수행합니다.

1. 사용 가능한 템플릿 목록을 보려면 다음 명령을 실행합니다.

   ```
   PS C:\> Get-AWSPowerShellLambdaTemplate
   
   Template               Description
   --------               -----------
   Basic                  Bare bones script
   CodeCommitTrigger      Script to process AWS CodeCommit Triggers
   ...
   ```

1. `Basic` 템플릿을 토대로 샘플 스크립트를 생성하려면 다음 명령을 실행합니다.

   ```
   New-AWSPowerShellLambda -ScriptName MyFirstPSScript -Template Basic
   ```

   현재 디렉터리의 새 하위 디렉터리에 `MyFirstPSScript.ps1`이라는 새 파일이 생성됩니다. 이 디렉터리의 이름은 `-ScriptName` 파라미터를 기반으로 지정됩니다. `-Directory` 파라미터를 사용하면 대체 디렉터리를 선택할 수 있습니다.

   새 파일의 내용은 다음과 같습니다.

   ```
   # PowerShell script file to run as a Lambda function
   # 
   # When executing in Lambda the following variables are predefined.
   #   $LambdaInput - A PSObject that contains the Lambda function input data.
   #   $LambdaContext - An Amazon.Lambda.Core.ILambdaContext object that contains information about the currently running Lambda environment.
   #
   # The last item in the PowerShell pipeline is returned as the result of the Lambda function.
   #
   # To include PowerShell modules with your Lambda function, like the AWSPowerShell.NetCore module, add a "#Requires" statement 
   # indicating the module and version.
                   
   #Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
   
   # Uncomment to send the input to CloudWatch Logs
   # Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
   ```

1. PowerShell 스크립트의 로그 메시지가 Amazon CloudWatch Logs로 전송되는 방법을 알아보려면 샘플 스크립트의 `Write-Host` 행의 주석 처리를 해제합니다.

   Lambda 함수에서 데이터를 다시 반환하는 방법을 확인하려면 `$PSVersionTable`을 사용해 스크립트 끝에 새 행을 추가합니다. 그러면 PowerShell 파이프라인에 `$PSVersionTable` 테이블이 추가됩니다. PowerShell 스크립트가 완성되면 PowerShell 파이프라인의 마지막 객체가 Lambda 함수의 반환 데이터입니다. `$PSVersionTable`은 실행 환경에 대한 정보도 제공하는 PowerShell 전역 변수입니다.

   이와 같이 변경한 후 샘플 스크립트의 마지막 두 개 행은 다음과 같습니다.

   ```
   Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
   $PSVersionTable
   ```

1. `MyFirstPSScript.ps1` 파일 편집 후 디렉터리를 스크립트가 있는 위치로 변경합니다. 다음 명령을 실행하여 스크립트를 Lambda에 게시합니다.

   ```
   Publish-AWSPowerShellLambda -ScriptPath .\MyFirstPSScript.ps1 -Name  MyFirstPSScript -Region us-east-2
   ```

   `-Name` 파라미터는 Lambda 콘솔에 나타나는 Lambda 함수 이름을 지정합니다. 이 함수를 사용해 스크립트를 수동으로 호출할 수 있습니다.

1. AWS Command Line Interface (AWS CLI) `invoke` 명령을 사용하여 함수를 호출합니다.

   ```
   > aws lambda invoke --function-name MyFirstPSScript out
   ```

# PowerShell에서 Lambda 함수 핸들러 정의
<a name="powershell-handler"></a>

Lambda 함수가 호출되면 Lambda 핸들러가 PowerShell 스크립트를 호출합니다.

PowerShell 스크립트가 호출되면 다음 변수가 미리 정의되어 있습니다.
+  *\$1LambdaInput* – 핸들러에 대한 입력이 포함된 PSObject입니다. 이 입력은 이벤트 데이터(이벤트 소스에서 게시)가 되거나, 문자열이나 사용자 지정 데이터 객체 같은 사용자 지정 입력이 될 수 있습니다.
+  *\$1LambdaContext* – 현재 호출에 대한 정보(예: 현재 함수의 이름, 메모리 제한, 남아 있는 실행 시간, 로깅 등)에 액세스하는 데 사용할 수 있는 Amazon.Lambda.Core.ILambdaContext 객체입니다.

예를 들어 다음과 같은 PowerShell 예제 코드를 고려해 보세요.

```
#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
Write-Host 'Function Name:' $LambdaContext.FunctionName
```

이 스크립트는 \$1LambdaContext 변수에서 얻은 FunctionName 속성을 반환합니다.

**참고**  
스크립트에서 사용하는 모듈을 나타내기 위해서는 PowerShell 스크립트 내에서 `#Requires` 문을 사용해야 합니다. 이 문은 두 가지 중요한 작업을 수행하는데 바로, 1) 다른 개발자에게 스크립트가 사용하는 모듈을 알리는 작업과 2) 배포의 일부로 스크립트를 패키징하는 데 AWS PowerShell 도구에 필요한 종속 모듈을 식별하는 작업입니다. PowerShell의 `#Requires` 문에 대한 자세한 내용은 [Requires 정보](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_requires?view=powershell-6)를 참조하세요. PowerShell 배포 패키지에 대한 자세한 내용은 [.zip 파일 아카이브를 사용하여 PowerShell Lambda 함수 배포](powershell-package.md) 단원을 참조하세요.  
PowerShell Lambda 함수가 AWS PowerShell cmdlet을 사용하는 경우 Windows PowerShell만 지원하는 `AWSPowerShell` 모듈이 아니라 PowerShell Core를 지원하는 `AWSPowerShell.NetCore` 모듈을 참조하는 `#Requires` 문을 설정해야 합니다. cmdlet 가져오기 프로세스를 최적화하는 `AWSPowerShell.NetCore` 버전 3.3.270.0 이상을 사용해야 합니다. 이전 버전을 사용하는 경우 콜드 부팅 시간이 더 길어집니다. 자세한 내용은 [AWS Tools for PowerShell](https://aws.amazon.com/powershell/?track=sdk) 페이지를 참조하세요.

## 데이터 반환
<a name="powershell-handler-output"></a>

일부 Lambda 호출은 호출자에게 데이터가 반환됨을 의미합니다. 예를 들어, API Gateway의 웹 요청에 대한 응답으로 호출이 발생한 경우 Lambda 함수는 해당 응답을 다시 반환해야 합니다. PowerShell Lambda의 경우 PowerShell 파이프라인에 추가된 마지막 객체는 Lambda 호출의 반환 데이터입니다. 객체가 문자열인 경우 데이터는 있는 그대로 반환됩니다. 그렇지 않으면 `ConvertTo-Json` cmdlet을 사용해 객체가 JSON으로 변환됩니다.

예를 들어, PowerShell 파이프라인에 `$PSVersionTable`을 추가하는 다음 PowerShell 문에 대해 생각해 보세요.

```
$PSVersionTable
```

PowerShell 스크립트가 완성되면 PowerShell 파이프라인의 마지막 객체가 Lambda 함수의 반환 데이터입니다. `$PSVersionTable`은 실행 환경에 대한 정보도 제공하는 PowerShell 전역 변수입니다.

# Lambda 컨텍스트 객체를 사용하여 PowerShell 함수 정보 검색
<a name="powershell-context"></a>

Lambda가 함수를 실행하면 `$LambdaContext` 변수를 [핸들러](powershell-handler.md)에 제공하여 컨텍스트 정보를 전달합니다. 이 변수는 호출, 함수 및 실행 환경에 관한 정보를 메서드 및 속성에 제공합니다.

**컨텍스트 속성**
+ `FunctionName` – Lambda 함수의 이름입니다.
+ `FunctionVersion` – 함수의 [버전](configuration-versions.md)입니다.
+ `InvokedFunctionArn` – 함수를 호출할 때 사용하는 Amazon 리소스 이름(ARN)입니다. 호출자가 버전 번호 또는 별칭을 지정했는지 여부를 나타냅니다.
+ `MemoryLimitInMB` – 함수에 할당된 메모리의 양입니다.
+ `AwsRequestId` – 호출 요청의 식별자입니다.
+ `LogGroupName` – 함수에 대한 로그 그룹입니다.
+ `LogStreamName` – 함수 인스턴스에 대한 로그 스트림입니다.
+ `RemainingTime` – 실행 시간이 초과되기 전에 남은 시간(밀리초)입니다.
+ `Identity` – (모바일 앱) 요청을 승인한 Amazon Cognito 자격 증명에 대한 정보입니다.
+ `ClientContext` – (모바일 앱) 클라이언트 애플리케이션이 Lambda에게 제공한 클라이언트 컨텍스트입니다.
+ `Logger` - 함수에 대한 [로거 객체](powershell-logging.md)입니다.

다음 PowerShell 코드 조각은 일부 콘텍스트 정보를 인쇄하는 간단한 핸들러 함수를 보여줍니다.

```
#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
Write-Host 'Function name:' $LambdaContext.FunctionName
Write-Host 'Remaining milliseconds:' $LambdaContext.RemainingTime.TotalMilliseconds
Write-Host 'Log group name:' $LambdaContext.LogGroupName
Write-Host 'Log stream name:' $LambdaContext.LogStreamName
```

# Powershell Lambda 함수 기록 및 모니터링
<a name="powershell-logging"></a>

AWS Lambda는 자동으로 Lambda 함수를 모니터링하고 로그를 Amazon CloudWatch로 보냅니다. Lambda 함수는 함수의 각 인스턴스에 대한 CloudWatch Logs 로그 그룹 및 로그 스트림과 함께 제공됩니다. Lambda 런타임 환경은 각 호출에 관한 세부 정보를 로그 스트림에 전송하며, 함수 코드에서 로그 및 그 외 출력을 중계합니다. 자세한 내용은 [CloudWatch Logs로 Lambda 함수 로그 전송](monitoring-cloudwatchlogs.md) 섹션을 참조하세요.

이 페이지에서는 AWS Command Line Interface, Lambda 콘솔 또는 CloudWatch 콘솔을 사용하여 Lambda 함수 코드의 로그 출력하고 액세스 로그를 생성하는 방법에 대해 설명합니다.

**Topics**
+ [로그를 반환하는 함수 생성](#powershell-logging-output)
+ [Lambda 콘솔에서 로그 보기](#powershell-logging-console)
+ [CloudWatch 콘솔에서 로그 보기](#powershell-logging-cwconsole)
+ [AWS Command Line Interface(AWS CLI)(을)를 사용하여 로그 보기](#powershell-logging-cli)
+ [로그 삭제](#powershell-logging-delete)

## 로그를 반환하는 함수 생성
<a name="powershell-logging-output"></a>

함수 코드에서 로그를 출력하려면 [Microsoft.PowerShell.Utility](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility)에서 cmdlets를 사용하거나, `stdout` 또는 `stderr`에 쓰는 로깅 모듈을 사용합니다. 다음 예에는 `Write-Host`가 사용됩니다.

**Example [function/Handler.ps1](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-powershell/function/Handler.ps1) – 로깅**  

```
#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
Write-Host `## Environment variables
Write-Host AWS_LAMBDA_FUNCTION_VERSION=$Env:AWS_LAMBDA_FUNCTION_VERSION
Write-Host AWS_LAMBDA_LOG_GROUP_NAME=$Env:AWS_LAMBDA_LOG_GROUP_NAME
Write-Host AWS_LAMBDA_LOG_STREAM_NAME=$Env:AWS_LAMBDA_LOG_STREAM_NAME
Write-Host AWS_EXECUTION_ENV=$Env:AWS_EXECUTION_ENV
Write-Host AWS_LAMBDA_FUNCTION_NAME=$Env:AWS_LAMBDA_FUNCTION_NAME
Write-Host PATH=$Env:PATH
Write-Host `## Event
Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 3)
```

**Example 로그 형식**  

```
START RequestId: 56639408-xmpl-435f-9041-ac47ae25ceed Version: $LATEST
Importing module ./Modules/AWSPowerShell.NetCore/3.3.618.0/AWSPowerShell.NetCore.psd1
[Information] - ## Environment variables
[Information] - AWS_LAMBDA_FUNCTION_VERSION=$LATEST
[Information] - AWS_LAMBDA_LOG_GROUP_NAME=/aws/lambda/blank-powershell-function-18CIXMPLHFAJJ
[Information] - AWS_LAMBDA_LOG_STREAM_NAME=2020/04/01/[$LATEST]53c5xmpl52d64ed3a744724d9c201089
[Information] - AWS_EXECUTION_ENV=AWS_Lambda_dotnet6_powershell_1.0.0
[Information] - AWS_LAMBDA_FUNCTION_NAME=blank-powershell-function-18CIXMPLHFAJJ
[Information] - PATH=/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin
[Information] - ## Event
[Information] - 
{
    "Records": [
        {
            "messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
            "receiptHandle": "MessageReceiptHandle",
            "body": "Hello from SQS!",
            "attributes": {
                "ApproximateReceiveCount": "1",
                "SentTimestamp": "1523232000000",
                "SenderId": "123456789012",
                "ApproximateFirstReceiveTimestamp": "1523232000001"
            },
            ...
END RequestId: 56639408-xmpl-435f-9041-ac47ae25ceed
REPORT RequestId: 56639408-xmpl-435f-9041-ac47ae25ceed	Duration: 3906.38 ms	Billed Duration: 9867 ms	Memory Size: 512 MB	Max Memory Used: 367 MB	Init Duration: 5960.19 ms	
XRAY TraceId: 1-5e843da6-733cxmple7d0c3c020510040	SegmentId: 3913xmpl20999446	Sampled: true
```

.NET 런타임은 각 호출에 대해 `START`, `END` 및 `REPORT` 줄을 로깅합니다. 보고서 행은 다음과 같은 세부 정보를 제공합니다.

**REPORT 행 데이터 필드**
+ **RequestId** – 호출의 고유한 요청 ID입니다.
+ **지속시간** – 함수의 핸들러 메서드가 이벤트를 처리하는 데 걸린 시간입니다.
+ **청구 기간** – 호출에 대해 청구된 시간입니다.
+ **메모리 크기** - 함수에 할당된 메모리 양입니다.
+ **사용된 최대 메모리** – 함수에서 사용한 메모리 양입니다. 간접 호출이 실행 환경을 공유하는 경우 Lambda는 모든 간접 호출에서 사용된 최대 메모리를 보고합니다. 이 동작으로 인해 보고된 값이 예상보다 높을 수 있습니다.
+ **초기화 기간** – 제공된 첫 번째 요청의 경우 런타임이 핸들러 메서드 외부에서 함수를 로드하고 코드를 실행하는 데 걸린 시간입니다.
+ **XRAY TraceId** – 추적된 요청의 경우 [AWS X-Ray 추적 ID](services-xray.md)입니다.
+ **SegmentId** - 추적된 요청의 경우 X-Ray 세그먼트 ID입니다.
+ **샘플링 완료(Sampled)** – 추적된 요청의 경우 샘플링 결과입니다.

## Lambda 콘솔에서 로그 보기
<a name="powershell-logging-console"></a>

Lambda 함수를 간접 호출한 후 Lambda 콘솔을 사용하여 로그 출력을 볼 수 있습니다.

포함된 **코드** 편집기에서 코드를 테스트할 수 있는 경우 **실행 결과**에서 로그를 찾을 수 있습니다. 콘솔 테스트 기능을 사용하여 함수를 간접적으로 간접 호출하면 **세부 정보** 섹션에서 **로그 출력**을 찾을 수 있습니다.

## CloudWatch 콘솔에서 로그 보기
<a name="powershell-logging-cwconsole"></a>

Amazon CloudWatch 콘솔을 사용하여 모든 Lambda 함수 호출에 대한 로그를 볼 수 있습니다.

**CloudWatch 콘솔에서 로그를 보려면**

1. CloudWatch 콘솔에서 [로그 그룹 페이지](https://console.aws.amazon.com/cloudwatch/home?#logs:)를 엽니다.

1. 함수(**/aws/lambda/*your-function-name***)에 대한 로그 그룹을 선택합니다.

1. 로그 스트림을 선택합니다.

각 로그 스트림은 [함수의 인스턴스](lambda-runtime-environment.md)에 해당합니다. 로그 스트림은 Lambda 함수를 업데이트할 때, 그리고 동시 호출을 처리하기 위해 추가 인스턴스가 생성될 때 나타납니다. 특정 호출에 대한 로그를 찾으려면 AWS X-Ray로 함수를 계측하는 것이 좋습니다. X-Ray는 요청 및 로그 스트림에 대한 세부 정보를 기록합니다.

## AWS Command Line Interface(AWS CLI)(을)를 사용하여 로그 보기
<a name="powershell-logging-cli"></a>

AWS CLI은(는) 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 이 섹션의 단계를 완료하려면 [AWS CLI 버전 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)가 필요합니다.

[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)를 사용하면 `--log-type` 명령 옵션을 통해 호출에 대한 로그를 검색할 수 있습니다. 호출에서 base64로 인코딩된 로그를 최대 4KB까지 포함하는 `LogResult` 필드가 응답에 포함됩니다.

**Example 로그 ID 검색**  
다음 예제에서는 `LogResult`이라는 함수의 `my-function` 필드에서 *로그 ID*를 검색하는 방법을 보여줍니다.  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
다음 결과가 표시됩니다:  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example decode the logs**  
동일한 명령 프롬프트에서 `base64` 유틸리티를 사용하여 로그를 디코딩합니다. 다음 예제에서는 `my-function`에 대한 base64로 인코딩된 로그를 검색하는 방법을 보여줍니다.  

```
aws lambda invoke --function-name my-function out --log-type Tail \
--query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
```
**cli-binary-format** 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. 이 설정을 기본 설정으로 지정하려면 `aws configure set cli-binary-format raw-in-base64-out`을(를) 실행하세요. 자세한 내용은 *AWS Command Line Interface 사용 설명서 버전 2*에서 [AWS CLI 지원 글로벌 명령줄 옵션](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)을 참조하세요.  
다음 결과가 표시됩니다.  

```
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB
```
`base64` 유틸리티는 Linux, macOS 및 [Ubuntu on Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10)에서 사용할 수 있습니다. macOS 사용자는 `base64 -D`를 사용해야 할 수도 있습니다.

**Example get-logs.sh 스크립트**  
동일한 명령 프롬프트에서 다음 스크립트를 사용하여 마지막 5개 로그 이벤트를 다운로드합니다. 이 스크립트는 `sed`를 사용하여 출력 파일에서 따옴표를 제거하고, 로그를 사용할 수 있는 시간을 허용하기 위해 15초 동안 대기합니다. 출력에는 Lambda의 응답과 `get-log-events` 명령의 출력이 포함됩니다.  
다음 코드 샘플의 내용을 복사하고 Lambda 프로젝트 디렉터리에 `get-logs.sh`로 저장합니다.  
**cli-binary-format** 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. 이 설정을 기본 설정으로 지정하려면 `aws configure set cli-binary-format raw-in-base64-out`을(를) 실행하세요. 자세한 내용은 *AWS Command Line Interface 사용 설명서 버전 2*에서 [AWS CLI 지원 글로벌 명령줄 옵션](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)을 참조하세요.  

```
#!/bin/bash
aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out
sed -i'' -e 's/"//g' out
sleep 15
aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
```

**Example macOS 및 Linux(전용)**  
동일한 명령 프롬프트에서 macOS 및 Linux 사용자는 스크립트가 실행 가능한지 확인하기 위해 다음 명령을 실행해야 할 수 있습니다.  

```
chmod -R 755 get-logs.sh
```

**Example 마지막 5개 로그 이벤트 검색**  
동일한 명령 프롬프트에서 다음 스크립트를 실행하여 마지막 5개 로그 이벤트를 가져옵니다.  

```
./get-logs.sh
```
다음 결과가 표시됩니다:  

```
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}
{
    "events": [
        {
            "timestamp": 1559763003171,
            "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n",
            "ingestionTime": 1559763003309
        },
        {
            "timestamp": 1559763003173,
            "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r  \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003173,
            "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r  \"key\": \"value\"\r}\n",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003218,
            "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003218,
            "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n",
            "ingestionTime": 1559763018353
        }
    ],
    "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795",
    "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080"
}
```

## 로그 삭제
<a name="powershell-logging-delete"></a>

함수를 삭제해도 로그 그룹이 자동으로 삭제되지 않습니다. 로그를 무기한 저장하지 않으려면 로그 그룹을 삭제하거나 로그가 자동으로 삭제되는 [보존 기간을 구성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#SettingLogRetention)하세요.