AWS SAM CLI에 대한 Terraform 지원과 함께 시작하기 - AWS Serverless Application Model

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

AWS SAM CLI에 대한 Terraform 지원과 함께 시작하기

이 항목에서는 AWS Serverless Application Model 명령줄 인터페이스 (AWS SAMCLI) 사용을 시작하는 방법을 다룹니다. Terraform

피드백을 제공하고 기능 요청을 제출하려면 GitHub 문제를 생성하세요.

AWS SAM CLI Terraform사전 조건

Terraform 프로젝트에서 AWS SAMCLI를 사용하려면 모든 사전 조건을 완료하세요.

  1. AWS SAM CLI 설치 또는 업그레이드

    AWS SAMCLI가 설치되어 있는지 확인하려면 다음을 실행합니다.

    $ sam --version

    AWS SAMCLI가 이미 설치된 경우 출력에 버전이 표시됩니다. 최신 버전으로 업그레이드하려면 AWS SAMCLI업그레이드 섹션을 참조하세요.

    모든 사전 조건과 함께 AWS SAMCLI를 설치하는 것에 대한 지침은 AWS SAM CLI 설치 섹션을 참조하세요.

  2. Terraform 설치

    Terraform 설치 여부를 확인하려면 다음을 실행합니다.

    $ terraform -version

    Terraform을 설치하려면 Terraform 레지스트리에서 Terraform 설치를 참조하세요.

  3. 로컬 테스트를 위한 Docker 설치

    AWS SAMCLI에는 로컬 테스트를 위해 Docker가 필요합니다. Docker을 설치하려면 AWS SAMCLI와 함께 사용할 Docker 설치 섹션을 참조하세요.

Terraform과 함께 AWS SAMCLI 명령 사용

지원되는 AWS SAMCLI 명령을 실행할 때는 --hook-name 옵션을 사용하고 terraform 값을 제공합니다. 다음은 그 예제입니다.

$ sam local invoke --hook-name terraform

다음과 같이 AWS SAMCLI 구성 파일에서 이 옵션을 구성할 수 있습니다.

hook_name = "terraform"

Terraform 프로젝트 설정

Terraform 프로젝트에서 AWS SAM CLI를 사용하려면 이 항목의 단계를 완료합니다.

프로젝트 외부에서 AWS Lambda 아티팩트를 빌드하는 경우 추가 설정이 필요하지 않습니다. Terraform 사용을 로컬 디버깅 및 테스트에 Terraform과 함께 AWS SAMCLI 사용하기 시작하려면 을 참조하십시오. AWS SAMCLI

Terraform 프로젝트 내에 Lambda 아티팩트을 빌드하는 경우 다음을 수행해야 합니다.

  1. Python3.8 이상 버전 설치

  2. Make 도구를 설치합니다.

  3. Terraform 프로젝트 내에서 Lambda 아티팩트 빌드 로직을 정의합니다.

  4. 빌드 로직의 AWS SAMCLI를 알릴 sam metadata 리소스를 정의합니다.

  5. AWS SAMCLIsam build명령을 사용하여 Lambda 아티팩트를 빌드합니다.

3.8 이상 버전 설치 Python

Python와 함께 사용하려면 3.8 이상이 필요합니다. AWS SAMCLI sam build를 실행하면 AWS SAMCLI가 Lambda 아티팩트를 빌드하기 위한 Python 명령이 포함된 makefiles를 생성합니다.

설치 지침은 Python 초급 가이드Python 다운로드 섹션을 참조하세요.

다음을 실행하여 Python 3.8 이상이 컴퓨터 경로에 추가되었는지 확인합니다.

$ python --version

출력에는 3.8 이상의 Python 버전이 표시되어야 합니다.

Make 도구를 설치합니다.

GNU Make(은)는 프로젝트의 실행 파일 및 기타 비소스 파일 생성을 제어하는 도구입니다. AWS SAMCLI는 이 도구를 사용하여 Lambda 아티팩트를 빌드하는 makefiles를 생성합니다.

Make가 로컬 시스템에 아직 설치되지 않은 경우, 계속 진행하기 전에 설치하세요.

Windows의 경우 Chocolatey를 사용하여 설치할 수 있습니다. 자세한 지침은 Windows에서 ‘Make’를 설치하고 사용하는 방법Chocolatey 사용하기 섹션을 참조하세요.

Lambda 아티팩트 빌드 로직 정의

null_resource Terraform 리소스 유형을 사용하여 Lambda 빌드 로직을 정의합니다. 다음은 사용자 지정 빌드 스크립트를 사용하여 Lambda 함수를 빌드하는 예제입니다.

resource "null_resource" "build_lambda_function" { triggers = { build_number = "${timestamp()}" } provisioner "local-exec" { command = substr(pathexpand("~"), 0, 1) == "/"? "./py_build.sh \"${local.lambda_src_path}\" \"${local.building_path}\" \"${local.lambda_code_filename}\" Function" : "powershell.exe -File .\\PyBuild.ps1 ${local.lambda_src_path} ${local.building_path} ${local.lambda_code_filename} Function" } }

sam metadata 리소스를 정의합니다.

sam metadata 리소스는 AWS SAMCLI에 Lambda 아티팩트를 찾는 데 필요한 정보를 제공하는 null_resource Terraform 리소스 유형입니다. 프로젝트의 각 Lambda 함수 또는 계층에는 고유한 sam metadata 리소스가 필요합니다. 이 리소스 유형에 대해 자세히 알아보려면 Terraform 레지스트리null_resource를 참조하세요.

sam metadata 리소스를 정의하려면
  1. 리소스가 sam metadata 리소스임을 식별하는 sam_metadata_로 시작하는 리소스의 이름을 지정합니다.

  2. 리소스의 triggers 블록 내에서 Lambda 아티팩트 속성을 정의합니다.

  3. depends_on 인수와 함께 Lambda 빌드 로직을 포함하는 null_resource를 지정합니다.

    다음은 템플릿의 예입니다.

    resource "null_resource" "sam_metadata_..." { triggers = { resource_name = resource_name resource_type = resource_type original_source_code = original_source_code built_output_path = built_output_path } depends_on = [ null_resource.build_lambda_function # ref to your build logic ] }

    다음은 sam metadata 리소스의 예입니다.

    resource "null_resource" "sam_metadata_aws_lambda_function_publish_book_review" { triggers = { resource_name = "aws_lambda_function.publish_book_review" resource_type = "ZIP_LAMBDA_FUNCTION" original_source_code = "${local.lambda_src_path}" built_output_path = "${local.building_path}/${local.lambda_code_filename}" } depends_on = [ null_resource.build_lambda_function ] }

sam metadata 리소스의 콘텐츠는 Lambda 리소스 유형(함수 또는 계층)과 패키지 유형(ZIP 또는 이미지)에 따라 달라집니다. 예에 사용된 SSML에 대한 자세한 내용은 sam 메타데이터 리소스 섹션을 참조하세요.

sam metadata 리소스를 구성하고 지원되는 AWS SAMCLI 명령을 사용하면 AWS SAMCLI는 AWS SAMCLI 명령을 실행하기 전에 메타데이터 파일을 생성합니다. 이 파일을 생성한 후에는 미래 AWS SAMCLI 명령과 함께 --skip-prepare-infra 옵션을 사용하여 메타데이터 생성 프로세스를 건너뛰고 시간을 절약할 수 있습니다. 이 옵션은 새 Lambda 함수 또는 새 API 엔드포인트 생성과 같이 인프라를 변경하지 않은 경우에만 사용해야 합니다.

AWS SAMCLI를 사용하여 Lambda 아티팩트를 빌드합니다.

AWS SAMCLIsam build명령을 사용하여 Lambda 아티팩트를 빌드합니다. sam build를 실행하면 AWS SAMCLI는 다음과 같은 작업을 수행합니다.

  1. Lambda 리소스에 대해 알아보고 위치를 찾기 위해 Terraform 프로젝트에서 sam metadata 리소스를 찾습니다.

  2. Lambda 빌드 로직을 시작하여 Lambda 아티팩트를 빌드합니다.

  3. 명령과 함께 사용할 Terraform 프로젝트를 구성하는 .aws-sam 디렉토리를 생성합니다. AWS SAMCLI sam local

sam build로 빌드하려면
  1. Terraform 루트 모듈이 포함된 디렉터리에서 다음을 실행합니다.

    $ sam build --hook-name terraform
  2. 특정 Lambda 함수 또는 계층을 빌드하려면 다음을 실행합니다.

    $ sam build --hook-name terraform lambda-resource-id

    Lambda 리소스 ID는 aws_lambda_function.list_books 또는 module.list_book_function.aws_lambda_function.this[0]과 같은 Lambda 함수 이름 또는 전체 Terraform 리소스 주소일 수 있습니다.

함수 소스 코드나 기타 Terraform 구성 파일이 Terraform 루트 모듈이 포함된 디렉터리 외부에 있는 경우 위치를 지정해야 합니다. --terraform-project-root-path 옵션을 사용하여 이러한 파일이 포함된 최상위 디렉터리의 절대 경로 또는 상대 경로를 지정합니다. 다음은 그 예제입니다.

$ sam build --hook-name terraform --terraform-project-root-path ~/projects/terraform/demo

컨테이너를 사용하여 빌드하기

AWS SAMCLIsam build명령을 실행할 때 로컬 Docker 컨테이너를 사용하여 애플리케이션을 AWS SAMCLI 빌드하도록 를 구성할 수 있습니다.

참고

Docker를 설치하고 구성합니다. 지침은 AWS SAMCLI와 함께 사용할 Docker 설치 섹션을 참조하세요.

컨테이너를 사용하여 빌드하려면
  1. Terraform,Python, Make 도구가 포함된 Dockerfile를 만듭니다. Lambda 함수 런타임도 포함해야 합니다.

    다음은 한 Dockerfile 예입니다.

    FROM public.ecr.aws/amazonlinux/amazonlinux:2
    
    RUN yum -y update \
        && yum install -y unzip tar gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \
        less libcurl-devel openssl openssl-devel readline-devel xz-devel \
        zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \
        && rm -rf /var/cache/yum
    
    RUN yum -y install make \
        && yum -y install zip
    
    RUN yum install -y yum-utils \
        && yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo \
        && yum -y install terraform \
        && terraform --version
    
    # AWS Lambda Builders
    RUN amazon-linux-extras enable python3.8
    RUN yum clean metadata && yum -y install python3.8
    RUN curl -L get-pip.io | python3.8
    RUN pip3 install aws-lambda-builders
    RUN ln -s /usr/bin/python3.8 /usr/bin/python3
    RUN python3 --version
    
    VOLUME /project
    WORKDIR /project
    
    ENTRYPOINT ["sh"]
  2. docker build를 사용하여 Docker 이미지를 빌드합니다.

    다음은 그 예제입니다.

    $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
  3. --use-container--build-image 옵션을 AWS SAMCLI sam build 사용하여 명령을 실행합니다.

    다음은 그 예제입니다.

    $ sam build --use-container --build-image terraform-build:v1

다음 단계

Terraform 프로젝트에서 로컬 디버깅 및 테스트에 Terraform과 함께 AWS SAMCLI 사용하기 AWS SAM를 사용하려면 CLI 섹션을 참조하세요.

Terraform Cloud에 대해 설정

Terraform v1.6.0 버전 이상을 사용하는 것이 좋습니다. 이전 버전을 사용하는 경우 로컬에서 Terraform 계획 파일을 생성해야 합니다. 로컬 계획 파일은 로컬 테스트 및 디버깅을 수행하는 데 필요한 정보를 제공합니다. AWS SAM CLI

로컬 계획 파일을 생성하려면
참고

Terraform v1.6.0 이후의 버전에는 이러한 단계가 필요하지 않습니다. AWS SAM CLI와 함께 사용을 시작하려면 Terraform Cloud 을 참조하십시오Terraform과 함께 AWS SAM CLI 사용.

  1. API 토큰 구성 - 토큰 유형은 액세스 수준에 따라 달라집니다. 자세한 내용은 API 토큰Terraform Cloud 배문서를 참조하세요.

  2. API 토큰 환경 변수 설정 - 다음은 명령줄의 예입니다.

    $ export TOKEN="<api-token-value>"
  3. 실행 ID 확인 - Terraform Cloud 콘솔에서 에서 함께 사용하려는 Terraform 실행의 실행 ID를 찾습니다 AWS SAMCLI.

    실행 ID는 실행의 브레드크럼 경로에 있습니다.

    실행 ID를 표시하는 Terraform Cloud의 브레드크럼 경로.
  4. 계획 파일 가져오기 - API 토큰을 사용하여 로컬 계획 파일을 가져옵니다. 다음은 명령줄의 예입니다.

    curl \ --header "Authorization: Bearer $TOKEN" \ --header "Content-Type: application/vnd.api+json" \ --location \ https://app.terraform.io/api/v2/runs/<run ID>/plan/json-output \ > custom_plan.json

이제 Terraform Cloud와 함께 AWS SAM CLI를 사용할 준비가 되었습니다. 지원되는 AWS SAMCLI 명령을 사용하는 경우 --terraform-plan-file 옵션을 사용하여 로컬 계획 파일의 이름과 경로를 지정합니다. 다음은 그 예제입니다.

$ sam local invoke --hook-name terraform --terraform-plan-file custom-plan.json

다음은 sam local start-api를 사용한 명령의 예입니다.

$ sam local start-api --hook-name terraform --terraform-plan-file custom-plan.json

이러한 예제와 함께 사용할 수 있는 샘플 애플리케이션은 aws-samples GitHub 리포지토리api_gateway_v2_tf_cloud를 참조하세요.

다음 단계

Terraform Cloud와 함께 AWS SAMCLI를 시작하려면 로컬 디버깅 및 테스트에 Terraform과 함께 AWS SAMCLI 사용하기 섹션을 참조하세요.