

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

이 페이지에서는 Rust 함수를 컴파일한 다음 [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html)를 사용하여 컴파일된 바이너리를 AWS Lambda에 배포하는 방법을 설명합니다. 또한 AWS Command Line Interface 및 AWS Serverless Application Model CLI를 사용하여 컴파일된 바이너리를 배포하는 방법도 보여줍니다.

**Topics**
+ [

## 사전 조건
](#rust-package-prerequisites)
+ [

## macOS, Windows 또는 Linux에서 Rust 함수 빌드
](#rust-package-build)
+ [

## Cargo Lambda로 Rust 함수 바이너리 배포
](#rust-deploy-cargo)
+ [

## Cargo Lambda로 Rust 함수 호출
](#rust-invoke-function)

## 사전 조건
<a name="rust-package-prerequisites"></a>
+ [Rust](https://www.rust-lang.org/tools/install)
+ [AWS CLI 버전 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

## macOS, Windows 또는 Linux에서 Rust 함수 빌드
<a name="rust-package-build"></a>

다음 단계에서는 Rust를 사용하여 첫 번째 Lambda 함수에 대한 프로젝트를 생성하고 Rust Lambda 함수 빌드 및 배포를 간소화하는 Cargo 명령줄 도구의 타사 오픈 소스 확장인 [Cargo Lambda](https://www.cargo-lambda.info/)로 프로젝트를 컴파일하는 방법을 보여줍니다.

1. Cargo 명령줄 도구에 Rust Lambda 함수 빌드 및 배포를 간소화하는 타사 오픈 소스 확장인 [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html)를 설치합니다.

   ```
   cargo install cargo-lambda
   ```

   다른 옵션은 Cargo Lambda 설명서의 [Installation](https://www.cargo-lambda.info/guide/installation.html)을 참조하세요.

1. 패키지 구조를 생성합니다. 이 명령은 `src/main.rs`에 몇 가지 기본 함수 코드를 생성합니다. 이 코드를 테스트에 사용하거나 사용자 고유의 코드로 바꿀 수 있습니다.

   ```
   cargo lambda new my-function
   ```

1. 패키지의 루트 디렉터리 내에서 [build](https://www.cargo-lambda.info/commands/build.html) 하위 명령을 실행하여 함수의 코드를 컴파일합니다.

   ```
   cargo lambda build --release
   ```

   (선택 사항) Lambda에서 AWS Graviton2를 사용하려면 `--arm64` 플래그를 추가하여 ARM CPU용 코드를 컴파일합니다.

   ```
   cargo lambda build --release --arm64
   ```

1. Rust 함수를 배포하기 전에 머신에서 AWS 자격 증명을 구성합니다.

   ```
   aws configure
   ```

## Cargo Lambda로 Rust 함수 바이너리 배포
<a name="rust-deploy-cargo"></a>

[deploy](https://www.cargo-lambda.info/commands/deploy.html) 하위 명령을 사용하여 컴파일된 바이너리를 Lambda에 배포합니다. 이 명령은 [실행 역할](lambda-intro-execution-role.md)을 생성한 다음 Lambda 함수를 생성합니다. 기존 실행 역할을 지정하려면 [--iam-role 플래그](https://www.cargo-lambda.info/commands/deploy.html#iam-roles)를 사용합니다.

```
cargo lambda deploy my-function
```

### AWS CLI로 Rust 함수 바이너리 배포
<a name="rust-deploy-aws-cli"></a>

AWS CLI로 바이너리를 배포할 수도 있습니다.

1. [build](https://www.cargo-lambda.info/commands/build.html) 하위 명령을 사용하여 .zip 배포 패키지를 빌드합니다.

   ```
   cargo lambda build --release --output-format zip
   ```

1. .zip 패키지를 Lambda에 배포하려면 [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) 명령을 실행합니다.
   + `--runtime`에서 `provided.al2023`를 지정합니다. 이는 [OS 전용 런타임](runtimes-provided.md)입니다. OS 전용 런타임은 컴파일된 바이너리와 사용자 지정 런타임을 Lambda에 배포하는 데 사용됩니다.
   + `--role`에서 [실행 역할](lambda-intro-execution-role.md)의 ARN을 지정합니다.

   ```
   aws lambda create-function \
        --function-name my-function \
        --runtime provided.al2023 \
        --role arn:aws:iam::111122223333:role/lambda-role \
        --handler rust.handler \
        --zip-file fileb://target/lambda/my-function/bootstrap.zip
   ```

### AWS SAM CLI로 Rust 함수 바이너리 배포
<a name="rust-deploy-sam-cli"></a>

AWS SAM CLI로 바이너리를 배포할 수도 있습니다.

1. 리소스와 속성 정의를 사용하여 AWS SAM 템플릿을 생성합니다. `Runtime`에서 `provided.al2023`를 지정합니다. 이는 [OS 전용 런타임](runtimes-provided.md)입니다. OS 전용 런타임은 컴파일된 바이너리와 사용자 지정 런타임을 Lambda에 배포하는 데 사용됩니다.

   AWS SAM을 사용한 Lambda 함수 배포에 대한 자세한 내용은 **AWS Serverless Application Model 개발자 안내서의 [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)을 참조하세요.  
**Example Rust 바이너리에 대한 SAM 리소스 및 속성 정의**  

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: SAM template for Rust binaries
   Resources:
     RustFunction:
       Type: AWS::Serverless::Function 
       Properties:
         CodeUri: target/lambda/my-function/
         Handler: rust.handler
         Runtime: provided.al2023
   Outputs:
     RustFunction:
       Description: "Lambda Function ARN"
       Value: !GetAtt RustFunction.Arn
   ```

1. [build](https://www.cargo-lambda.info/commands/build.html) 하위 명령을 사용하여 함수를 컴파일합니다.

   ```
   cargo lambda build --release
   ```

1. [sam deploy](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html) 명령을 사용하여 함수를 Lambda에 배포합니다.

   ```
   sam deploy --guided
   ```

AWS SAM CLI를 사용하여 Rust 함수를 빌드하는 방법에 대한 자세한 내용은 **AWS Serverless Application Model 개발자 안내서의 [Cargo Lambda로 Rust Lambda 함수 빌드](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/building-rust.html)를 참조하세요.

## Cargo Lambda로 Rust 함수 호출
<a name="rust-invoke-function"></a>

[간접 호출](https://www.cargo-lambda.info/commands/invoke.html) 하위 명령을 사용하여 페이로드로 함수를 테스트합니다.

```
cargo lambda invoke --remote --data-ascii '{"command": "Hello world"}' my-function
```

### AWS CLI로 Rust 함수 호출
<a name="rust-invoke-cli"></a>

AWS CLI를 사용하여 함수를 간접 호출할 수도 있습니다.

```
aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"command": "Hello world"}' /tmp/out.txt
```

**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)을 참조하세요.