기본 AWS Lambda 프로젝트 도커 이미지 생성 - AWS Amazon Q를 사용한 툴킷

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

기본 AWS Lambda 프로젝트 도커 이미지 생성

Visual Studio용 툴킷을 사용하여 함수를 도커 이미지로 배포할 AWS Lambda 수 있습니다. Docker를 사용하면 런타임을 더 잘 제어할 수 있습니다. 예를 들어, .NET 8.0과 같은 사용자 지정 런타임을 선택할 수 있습니다. 다른 컨테이너 이미지와 동일한 방식으로 도커 이미지를 배포합니다. 이 자습서는 자습서: 기본 Lambda 프로젝트와 비슷하지만 두 가지 차이점이 있습니다.

  • Dockerfile은 프로젝트에 포함되어 있습니다.

  • 대체 퍼블리싱 구성이 선택됩니다.

Lambda 컨테이너 이미지에 대한 자세한 정보는 AWS Lambda 개발자 안내서Lambda 배포 패키지를 참조하세요.

AWS Toolkit for Visual Studio Lambda 사용에 대한 추가 정보는 이 사용 AWS Toolkit for Visual Studio설명서의 주제에 있는 템플릿 사용을 AWS Lambda 참조하십시오.

Visual Studio .NET Core Lambda 프로젝트 생성

Lambda Visual Studio 템플릿과 블루프린트를 사용하여 프로젝트 초기화 속도를 높일 수 있습니다. Lambda 블루프린트에는 유연한 프로젝트 기반 생성을 단순화하는 사전 작성된 함수가 포함되어 있습니다.

Visual Studio .NET Core Lambda 프로젝트 생성
  1. Visual Studio에서 파일 메뉴를 확장하고 새로 만들기를 확장한 다음 프로젝트를 선택합니다.

  2. 새 프로젝트 대화 상자에서 언어, 플랫폼프로젝트 유형 드롭다운 상자를 “모두”로 설정한 다음 검색 필드에 입력합니다. aws lambda AWS Lambda 프로젝트 (.NET 코어 - C#) 템플릿을 선택합니다.

  3. 프로젝트 이름 필드에 파일 위치를 입력하고 AWSLambdaDocker 지정한 다음 [Create] 를 선택합니다.

  4. 블루프린트 선택 페이지에서.NET 8 (컨테이너 이미지) 블루프린트를 선택한 다음 마침을 선택하여 Visual Studio 프로젝트를 만듭니다. 이제 프로젝트의 구조와 코드를 검토할 수 있습니다.

프로젝트 파일 검토

다음 섹션에서는 .NET 8 (컨테이너 이미지) 블루프린트로 만든 세 개의 프로젝트 파일을 살펴봅니다.

  1. Dockerfile

  2. aws-lambda-tools-defaults.json

  3. Function.cs

1. Dockerfile

A는 세 가지 기본 Dockerfile 작업을 수행합니다.

  • FROM: 이 이미지에 사용할 기본 이미지를 설정합니다. 이 기본 이미지는.NET 런타임, Lambda 런타임 및 Lambda .NET 프로세스의 진입점을 제공하는 쉘 스크립트를 제공합니다.

  • WORKDIR: 이미지의 내부 작업 디렉토리를 로 설정합니다. /var/task

  • COPY: 빌드 프로세스에서 생성된 파일을 로컬 위치에서 이미지의 작업 디렉토리로 복사합니다.

지정할 수 있는 선택적 Dockerfile 작업은 다음과 같습니다.

  • ENTRYPOINT: 기본 이미지에는 이미지가 시작될 때 실행되는 시작 ENTRYPOINT 프로세스인 가 이미 포함되어 있습니다. 직접 지정하려는 경우 해당 기본 진입점을 재정의해야 합니다.

  • CMD: AWS 실행하려는 사용자 지정 코드를 지시합니다. 사용자 지정 메서드에는 완전한 이름이 필요합니다. 이 행은 Dockerfile에 직접 포함하거나 게시 프로세스 중에 지정할 수 있습니다.

    # Example of alternative way to specify the Lambda target method rather than during the publish process. CMD [ "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler"]

다음은.NET 8 (컨테이너 이미지) 블루프린트로 만든 Dockerfile의 예제입니다.

FROM public.ecr.aws/lambda/dotnet:8 WORKDIR /var/task # This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image. # The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built # with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project # will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir` # set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish". # # Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image. # For more information on this approach checkout the project's README.md file. COPY "bin/Release/lambda-publish" .

2. aws-lambda-tools-defaults.json

aws-lambda-tools-defaults.json 파일은 Visual Studio용 툴킷 배포 마법사 및 .NET Core CLI의 기본값을 지정하는 데 사용됩니다. 다음 목록은 파일에 설정할 수 있는 필드를 설명합니다. aws-lambda-tools-defaults.json

  • profile: AWS 프로필을 설정합니다.

  • region: 리소스가 저장되는 AWS 지역을 설정합니다.

  • configuration: 함수를 게시하는 데 사용되는 구성을 설정합니다.

  • package-type: 배포 패키지 유형을 컨테이너 이미지 또는.zip 파일 아카이브로 설정합니다.

  • function-memory-size: 함수의 메모리 할당을 MB 단위로 설정합니다.

  • function-timeout: 타임아웃은 Lambda 함수를 실행할 수 있는 최대 시간 (초) 입니다. 이 값을 1초 단위로 최대 15분까지 조정할 수 있습니다.

  • docker-host-build-output-dir: 의 지침과 관련된 빌드 프로세스의 출력 디렉토리를 설정합니다. Dockerfile

  • image-command:는 Lambda 함수를 실행하려는 메서드의 완전한 이름입니다. 구문은 다음과 같습니다. {Assembly}::{Namespace}.{ClassName}::{MethodName} 자세한 정보는 핸들러 서명을 참조하세요. 여기서 image-command를 설정하면 나중에 Visual Studio의 게시 마법사에 이 값이 미리 채워집니다.

다음은.NET 8 (컨테이너 이미지) 블루프린트로 aws-lambda-tools-defaults 생성된.json의 예입니다.

{ "Information": [ "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.", "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.", "dotnet lambda help", "All the command line options for the Lambda command can be specified in this file." ], "profile": "default", "region": "us-west-2", "configuration": "Release", "package-type": "image", "function-memory-size": 512, "function-timeout": 30, "image-command": "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler", "docker-host-build-output-dir": "./bin/Release/lambda-publish" }

3. Function.cs

Function.cs파일은 Lambda 함수로 노출될 C# 함수를 정의합니다. FunctionHandler는 Lambda 함수가 실행될 때 실행되는 Lambda 기능입니다. 이 프로젝트에서는 입력 텍스트를 FunctionHandler ToUpper() 호출합니다.

Lambda에 게시

빌드 프로세스에서 생성되는 도커 이미지는 Amazon Elastic Container Registry(Amazon ECR)에 업로드됩니다. Amazon ECR은 개발자가 도커 컨테이너 이미지를 저장, 관리 및 배포할 수 있게 해주는 완벽한 관리형 도커 컨테이너 레지스트리입니다. Amazon ECR은 이미지를 호스팅하며, Lambda는 호출 시 이를 참조하여 프로그래밍된 Lambda 함수를 제공합니다.

Lambda에 함수 게시
  1. 솔루션 탐색기에서 프로젝트의 컨텍스트 메뉴를 연 다음 (마우스 오른쪽 버튼 클릭) Publish를 선택하여 Lambda 함수 업로드 창을 엽니다. AWS Lambda

  2. Lambda 함수 업로드 페이지에서 다음을 수행하십시오.

    이미지 기반 Lambda 함수를 게시하기 위한 업로드 화면 AWS
    1. 패지지 유형의 경우 게시 마법사가 프로젝트 내에서 Dockerfile을 발견했기 때문에 Image패키지 유형으로 자동 선택되었습니다.

    2. 함수 이름에 Lambda 인스턴스의 표시 이름을 입력하세요. 이 이름은 Visual Studio의 AWS 탐색기 및 AWS Management Console에서 모두 표시되는 참조 이름입니다.

    3. 설명에는 AWS Management Console의 인스턴스와 함께 표시할 텍스트를 입력하세요.

    4. 이미지 명령에는 Lambda 함수를 실행하려는 메서드의 정규화된 경로를 입력하세요. AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler

      참고

      여기에 입력된 모든 메서드 이름은 Dockerfile 내의 모든 CMD 명령을 무시합니다. Dockerfile에 Lambda 함수를 시작하는 방법을 지시하는 CMD가 포함된 경우에만 이미지 명령 입력은 선택 사항입니다.

    5. 이미지 리포지토리에는 새로운 또는 기존의 Amazon Elastic Container Registry 이름을 입력하세요. 빌드 프로세스에서 생성되는 도커 이미지는 이 레지스트리에 업로드됩니다. 게시되는 Lambda 정의는 해당 Amazon ECR 이미지를 참조합니다.

    6. 이미지 태그의 경우 리포지토리의 이미지와 연결할 도커 태그를 입력하세요.

    7. 다음을 선택합니다.

  3. 고급 함수 세부 정보 페이지의 역할 이름에서 계정과 관련된 역할을 선택하세요. 역할은 함수의 코드에 의해 수행된 Amazon Web Services 호출에 대한 임시 보안 인증 정보를 제공하는 데 사용됩니다. 역할이 없는 경우, AWS 관리형 정책 기반 새 역할을 선택한 다음 선택하십시오. AWSLambdaBasicExecutionRole

    참고

    계정에 IAM ListPolicies 작업을 실행할 권한이 있어야 합니다. 그렇지 않으면 역할 이름 목록이 비어 있게 됩니다.

  4. 업로드를 선택하여 업로드 및 게시 프로세스를 시작합니다.

    참고

    함수를 업로드하는 동안 함수 업로드 페이지가 표시됩니다. 그런 다음 게시 프로세스는 구성 파라미터를 기반으로 이미지를 빌드하고, 필요한 경우 Amazon ECR 리포지토리를 생성하고, 이미지를 리포지토리에 업로드하고, 해당 이미지와 함께 해당 리포지토리를 참조하는 Lambda를 생성하세요.

    함수가 업로드되면 함수 페이지가 열리고 새 Lambda 함수의 구성이 표시됩니다.

  5. Lambda 함수를 수동으로 호출하려면 테스트 함수 탭에서 요청 자유 텍스트 입력 필드에 hello image based lambda를 입력한 다음 호출을 선택하세요. 대문자로 변환된 텍스트는 응답에 표시됩니다.

    게시된 함수 보기 페이지의 테스트 함수 탭에는 Lambda 메서드를 수동으로 호출할 수 있는 버튼이 있습니다.
  6. 리포지토리를 보려면 AWS 탐색기Amazon Elastic Container Service에서 리포지토리를 선택하세요.

    AWS 탐색기AWS Lambda 노드 아래에 있는 배포된 인스턴스를 두 번 클릭하여 언제든지 함수: 보기를 다시 열 수 있습니다.

    참고

    AWS 탐색기 창이 열려 있지 않은 경우 보기 ->AWS 탐색기를 통해 도킹할 수 있습니다.

  7. 구성 탭에 있는 추가 이미지별 구성 옵션을 참고하세요. 이 탭은 Dockerfile 내에 지정되었을 수 ENTRYPOINT, CMD, WORKDIR을 재정의하는 방법을 제공합니다. 설명은 업로드/게시 중에 입력한 설명(있는 경우)입니다.

정리

이 예제를 사용하여 개발을 계속하지 않을 경우 계정에서 사용하지 않은 리소스에 대한 요금이 청구되지 않도록 배포된 함수와 ECR 이미지를 삭제해야 합니다.

  • AWS 탐색기AWS Lambda 노드 아래에 있는 배포된 인스턴스를 마우스 오른쪽 버튼으로 클릭하여 함수를 삭제할 수 있습니다.

  • 리포지토리는 AWS 탐색기Amazon Elastic Container Service -> 리포지토리에서 삭제할 수 있습니다.

다음 단계

Lambda 이미지 생성 및 테스트에 대한 정보는 Lambda에서 컨테이너 이미지 사용을 참조하세요.

컨테이너 이미지 배포, 권한 및 구성 설정 재정의에 대한 정보는 함수 구성을 참조하세요.