쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

컨테이너 이미지를 사용하여 Node.js Lambda 함수 배포

포커스 모드
컨테이너 이미지를 사용하여 Node.js Lambda 함수 배포 - AWS Lambda

Node.js Lambda 함수의 컨테이너 이미지를 빌드하는 세 가지 방법이 있습니다.

작은 정보

Lambda 컨테이너 함수가 활성 상태가 되는 데 걸리는 시간을 줄이려면 Docker 설명서의 다단계 빌드 사용을 참조하세요. 효율적인 컨테이너 이미지를 빌드하려면 Dockerfile 작성 모범 사례를 따르세요.

이 페이지에서는 Lambda용 컨테이너 이미지를 빌드, 테스트 및 배포하는 방법을 설명합니다.

AWSNode.js용 기본 이미지

AWS는 Node.js에 대한 다음과 같은 기본 이미지를 제공합니다.

태그 런타임 운영 체제 Dockerfile 사용 중단

22

Node.js 22 Amazon Linux 2023 GitHub에서 Node.js 22에 대한 Dockerfile

2027년 4월 30일

20

Node.js 20 Amazon Linux 2023 GitHub의 Node.js 20용 Dockerfile

2026년 4월 30일

18

Node.js 18 Amazon Linux 2 GitHub의 Node.js 18용 Dockerfile

2025년 9월 1일

Amazon ECR 리포지토리: gallery.ecr.aws/lambda/nodejs

Node.js 20 이상의 기본 이미지는 Amazon Linux 2023 최소 컨테이너 이미지를 기반으로 합니다. 이전 기본 이미지는 Amazon Linux 2를 사용합니다. AL2023은 작은 배포 공간과 glibc와 같이 업데이트된 라이브러리 버전을 포함하여 Amazon Linux 2에 비해 여러 가지 이점을 제공합니다.

AL2023 기반 이미지는 microdnf(dnf 심볼릭 링크)를 Amazon Linux 2에서 기본 패키지 관리자인 yum 대신 패키지 관리자로 사용합니다. microdnfdnf의 독립 실행형 구현입니다. AL2023 기반 이미지에 포함된 패키지 목록의 경우 Comparing packages installed on Amazon Linux 2023 Container ImagesMinimal Container 열을 참조하세요. AL2023과 Amazon Linux 2의 차이점에 대한 자세한 내용은 AWS 컴퓨팅 블로그의 Introducing the Amazon Linux 2023 runtime for AWS Lambda를 참조하세요.

참고

AWS Serverless Application Model(AWS SAM)을 포함하여 AL2023 기반 이미지를 로컬에서 실행하려면 Docker 버전 20.10.10 이상을 사용해야 합니다.

Node.js용 AWS 기본 이미지 사용

이 섹션의 단계를 완료하려면 다음이 필요합니다.

이 섹션의 단계를 완료하려면 다음이 필요합니다.

Node.js용 AWS 기본 이미지에서 컨테이너 이미지 생성
  1. 프로젝트에 대한 디렉터리를 생성하고 해당 디렉터리로 전환합니다.

    mkdir example cd example
  2. npm을 사용하여 새 Node.js 프로젝트를 생성합니다. 대화형 환경에서 제공되는 기본 옵션을 수락하려면 Enter을 누릅니다.

    npm init
  3. index.js라는 파일을 새로 생성합니다. 테스트를 위해 다음 샘플 함수 코드를 파일에 추가하거나 자체 샘플 함수 코드를 사용할 수 있습니다.

    예 CommonJS 핸들러
    exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
  4. 함수가 AWS SDK for JavaScript 외의 다른 라이브러리를 사용하는 경우 npm을 사용하여 패키지에 해당 라이브러리를 추가합니다.

  5. 다음 구성으로 새 Dockerfile을 생성합니다.

    • FROM 속성을 기본 이미지의 URI로 설정합니다.

    • COPY 명령을 사용하여 함수 코드와 런타임 종속성을 Lambda 정의 환경 변수{LAMBDA_TASK_ROOT}에 복사합니다.

    • CMD 인수를 Lambda 함수 핸들러로 설정합니다.

    참고로 Dockerfile 예제에는 USER 지침이 포함되어 있지 않습니다. Lambda에 컨테이너 이미지를 배포할 때 Lambda는 권한이 최소 권한인 기본 Linux 사용자를 자동으로 정의합니다. 이는 USER 지침이 제공되지 않을 때 root 사용자에게 기본 설정이 적용되는 표준 Docker 동작과는 다릅니다.

    예 Dockerfile
    FROM public.ecr.aws/lambda/nodejs:22 # Copy function code COPY index.js ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "index.handler" ]
  6. docker build 명령으로 도커 이미지를 빌드합니다. 다음 예제에서는 이미지 이름을 docker-image로 지정하고 test 태그를 지정합니다. 이미지를 Lambda와 호환되게 만들려면 --provenance=false 옵션을 사용해야 합니다.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    참고

    이 명령은 빌드 머신의 아키텍처에 관계없이 컨테이너가 Lambda 실행 환경과 호환되는지 확인하기 위해 --platform linux/amd64 옵션을 지정합니다. ARM64 명령 세트 아키텍처를 사용하여 Lambda 함수를 생성하려는 경우 --platform linux/arm64 옵션을 대신 사용하도록 명령을 변경해야 합니다.

Node.js용 AWS 기본 이미지에서 컨테이너 이미지 생성
  1. 프로젝트에 대한 디렉터리를 생성하고 해당 디렉터리로 전환합니다.

    mkdir example cd example
  2. npm을 사용하여 새 Node.js 프로젝트를 생성합니다. 대화형 환경에서 제공되는 기본 옵션을 수락하려면 Enter을 누릅니다.

    npm init
  3. index.js라는 파일을 새로 생성합니다. 테스트를 위해 다음 샘플 함수 코드를 파일에 추가하거나 자체 샘플 함수 코드를 사용할 수 있습니다.

    예 CommonJS 핸들러
    exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
  4. 함수가 AWS SDK for JavaScript 외의 다른 라이브러리를 사용하는 경우 npm을 사용하여 패키지에 해당 라이브러리를 추가합니다.

  5. 다음 구성으로 새 Dockerfile을 생성합니다.

    • FROM 속성을 기본 이미지의 URI로 설정합니다.

    • COPY 명령을 사용하여 함수 코드와 런타임 종속성을 Lambda 정의 환경 변수{LAMBDA_TASK_ROOT}에 복사합니다.

    • CMD 인수를 Lambda 함수 핸들러로 설정합니다.

    참고로 Dockerfile 예제에는 USER 지침이 포함되어 있지 않습니다. Lambda에 컨테이너 이미지를 배포할 때 Lambda는 권한이 최소 권한인 기본 Linux 사용자를 자동으로 정의합니다. 이는 USER 지침이 제공되지 않을 때 root 사용자에게 기본 설정이 적용되는 표준 Docker 동작과는 다릅니다.

    예 Dockerfile
    FROM public.ecr.aws/lambda/nodejs:22 # Copy function code COPY index.js ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "index.handler" ]
  6. docker build 명령으로 도커 이미지를 빌드합니다. 다음 예제에서는 이미지 이름을 docker-image로 지정하고 test 태그를 지정합니다. 이미지를 Lambda와 호환되게 만들려면 --provenance=false 옵션을 사용해야 합니다.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    참고

    이 명령은 빌드 머신의 아키텍처에 관계없이 컨테이너가 Lambda 실행 환경과 호환되는지 확인하기 위해 --platform linux/amd64 옵션을 지정합니다. ARM64 명령 세트 아키텍처를 사용하여 Lambda 함수를 생성하려는 경우 --platform linux/arm64 옵션을 대신 사용하도록 명령을 변경해야 합니다.

  1. docker run 명령을 사용하여 Docker 이미지를 시작합니다. 이 예제에서 docker-image는 이미지 이름이고 test는 태그입니다.

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    이 명령은 이미지를 컨테이너로 실행하고 localhost:9000/2015-03-31/functions/function/invocations에 로컬 엔드포인트를 생성합니다.

    참고

    ARM64 명령 세트 아키텍처를 위한 도커 이미지를 빌드한 경우 --platform linux/arm64 옵션을 --platform linux/amd64 대신 사용해야 합니다.

  2. 새 터미널 창에서 로컬 엔드포인트에 이벤트를 게시합니다.

    Linux/macOS

    Linux 및 macOS에서 다음 curl 명령을 실행합니다.

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    PowerShell에서 다음 Invoke-WebRequest 명령을 실행합니다.

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. 컨테이너 ID를 가져옵니다.

    docker ps
  4. docker kill 명령을 사용하여 컨테이너를 중지합니다. 이 명령에서 3766c4ab331c를 이전 단계의 컨테이너 ID로 바꿉니다.

    docker kill 3766c4ab331c

  1. docker run 명령을 사용하여 Docker 이미지를 시작합니다. 이 예제에서 docker-image는 이미지 이름이고 test는 태그입니다.

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    이 명령은 이미지를 컨테이너로 실행하고 localhost:9000/2015-03-31/functions/function/invocations에 로컬 엔드포인트를 생성합니다.

    참고

    ARM64 명령 세트 아키텍처를 위한 도커 이미지를 빌드한 경우 --platform linux/arm64 옵션을 --platform linux/amd64 대신 사용해야 합니다.

  2. 새 터미널 창에서 로컬 엔드포인트에 이벤트를 게시합니다.

    Linux/macOS

    Linux 및 macOS에서 다음 curl 명령을 실행합니다.

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    PowerShell에서 다음 Invoke-WebRequest 명령을 실행합니다.

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"

    Linux 및 macOS에서 다음 curl 명령을 실행합니다.

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
  3. 컨테이너 ID를 가져옵니다.

    docker ps
  4. docker kill 명령을 사용하여 컨테이너를 중지합니다. 이 명령에서 3766c4ab331c를 이전 단계의 컨테이너 ID로 바꿉니다.

    docker kill 3766c4ab331c
Amazon ECR에 이미지 배포 및 Lambda 함수 생성
  1. get-login-password 명령을 실행하여 Amazon ECR 레지스트리에 대해 Docker CLI를 인증합니다.

    • --region 값을 Amazon ECR 리포지토리를 생성하려는 AWS 리전으로 설정합니다.

    • 111122223333를 사용자의 AWS 계정 ID로 바꿉니다.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. create-repository 명령을 사용하여 Amazon ECR에 리포지토리를 생성합니다.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    참고

    Amazon ECR 리포지토리는 Lambda 함수와 동일한 AWS 리전 내에 있어야 합니다.

    성공하면 다음과 같은 응답이 표시됩니다.

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. 이전 단계의 출력에서 repositoryUri를 복사합니다.

  4. docker tag 명령을 실행하여 로컬 이미지를 Amazon ECR 리포지토리에 최신 버전으로 태깅합니다. 이 명령에서:

    • docker-image:test는 Docker 이미지의 이름과 태그입니다. docker build 명령에서 지정한 이미지 이름 및 태그입니다.

    • <ECRrepositoryUri>를 복사한 repositoryUri로 바꿉니다. URI 끝에 :latest를 포함해야 합니다.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    예시:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. docker push 명령을 실행하여 Amazon ECR 리포지토리에 로컬 이미지를 배포합니다. 리포지토리 URI 끝에 :latest를 포함해야 합니다.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. 함수에 대한 실행 역할이 아직 없는 경우 하나 생성합니다. 다음 단계에서는 역할의 Amazon 리소스 이름(ARN)이 필요합니다.

  7. Lambda 함수를 생성합니다. ImageUri의 경우 이전의 리포지토리 URI를 지정합니다. URI 끝에 :latest를 포함해야 합니다.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    참고

    이미지가 Lambda 함수와 동일한 리전에 있는 한 다른 AWS 계정의 이미지를 사용하여 함수를 생성할 수 있습니다. 자세한 내용은 Amazon ECR 교차 계정 권한 단원을 참조하십시오.

  8. 함수를 간접 호출합니다.

    aws lambda invoke --function-name hello-world response.json

    다음과 같은 응답이 표시되어야 합니다.

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 함수의 출력을 보려면 response.json 파일을 확인합니다.

함수 코드를 업데이트하려면 이미지를 다시 빌드하고 Amazon ECR 리포지토리에 새 이미지를 업로드한 다음 update-function-code 명령을 사용하여 이미지를 Lambda 함수에 배포해야 합니다.

Lambda는 이미지 태그를 특정 이미지 다이제스트로 확인합니다. 즉, 함수를 배포하는 데 사용된 이미지 태그가 Amazon ECR의 새 이미지로 가리키는 경우 Lambda는 새 이미지를 사용하도록 함수를 자동으로 업데이트하지 않습니다.

새 이미지를 동일한 Lambda 함수에 배포하려면 Amazon ECR의 이미지 태그가 동일하게 유지되더라도 update-function-code 명령을 사용해야 합니다. 다음 예제에서 --publish 옵션은 업데이트된 컨테이너 이미지를 사용하여 새 버전의 함수를 생성합니다.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Amazon ECR에 이미지 배포 및 Lambda 함수 생성
  1. get-login-password 명령을 실행하여 Amazon ECR 레지스트리에 대해 Docker CLI를 인증합니다.

    • --region 값을 Amazon ECR 리포지토리를 생성하려는 AWS 리전으로 설정합니다.

    • 111122223333를 사용자의 AWS 계정 ID로 바꿉니다.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. create-repository 명령을 사용하여 Amazon ECR에 리포지토리를 생성합니다.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    참고

    Amazon ECR 리포지토리는 Lambda 함수와 동일한 AWS 리전 내에 있어야 합니다.

    성공하면 다음과 같은 응답이 표시됩니다.

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. 이전 단계의 출력에서 repositoryUri를 복사합니다.

  4. docker tag 명령을 실행하여 로컬 이미지를 Amazon ECR 리포지토리에 최신 버전으로 태깅합니다. 이 명령에서:

    • docker-image:test는 Docker 이미지의 이름과 태그입니다. docker build 명령에서 지정한 이미지 이름 및 태그입니다.

    • <ECRrepositoryUri>를 복사한 repositoryUri로 바꿉니다. URI 끝에 :latest를 포함해야 합니다.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    예시:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. docker push 명령을 실행하여 Amazon ECR 리포지토리에 로컬 이미지를 배포합니다. 리포지토리 URI 끝에 :latest를 포함해야 합니다.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. 함수에 대한 실행 역할이 아직 없는 경우 하나 생성합니다. 다음 단계에서는 역할의 Amazon 리소스 이름(ARN)이 필요합니다.

  7. Lambda 함수를 생성합니다. ImageUri의 경우 이전의 리포지토리 URI를 지정합니다. URI 끝에 :latest를 포함해야 합니다.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    참고

    이미지가 Lambda 함수와 동일한 리전에 있는 한 다른 AWS 계정의 이미지를 사용하여 함수를 생성할 수 있습니다. 자세한 내용은 Amazon ECR 교차 계정 권한 단원을 참조하십시오.

  8. 함수를 간접 호출합니다.

    aws lambda invoke --function-name hello-world response.json

    다음과 같은 응답이 표시되어야 합니다.

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 함수의 출력을 보려면 response.json 파일을 확인합니다.

함수 코드를 업데이트하려면 이미지를 다시 빌드하고 Amazon ECR 리포지토리에 새 이미지를 업로드한 다음 update-function-code 명령을 사용하여 이미지를 Lambda 함수에 배포해야 합니다.

Lambda는 이미지 태그를 특정 이미지 다이제스트로 확인합니다. 즉, 함수를 배포하는 데 사용된 이미지 태그가 Amazon ECR의 새 이미지로 가리키는 경우 Lambda는 새 이미지를 사용하도록 함수를 자동으로 업데이트하지 않습니다.

새 이미지를 동일한 Lambda 함수에 배포하려면 Amazon ECR의 이미지 태그가 동일하게 유지되더라도 update-function-code 명령을 사용해야 합니다. 다음 예제에서 --publish 옵션은 업데이트된 컨테이너 이미지를 사용하여 새 버전의 함수를 생성합니다.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

런타임 인터페이스 클라이언트에서 대체 기본 이미지 사용

OS 전용 기본 이미지나 대체 기본 이미지를 사용하는 경우 이미지에 런타임 인터페이스 클라이언트를 포함해야 합니다. 런타임 인터페이스 클라이언트는 Lambda와 함수 코드 간의 상호 작용을 관리하는 사용자 지정 런타임을 위한 Lambda 런타임 API 사용을 확장합니다.

npm 패키지 관리자를 사용하여 Node.js 런타임 인터페이스 클라이언트를 설치합니다.

npm install aws-lambda-ric

GitHub에서 Node.js 런타임 인터페이스 클라이언트를 다운로드할 수도 있습니다.

다음 예제에서는 비 AWS 기본 이미지를 사용하여 Node.js용 컨테이너 이미지를 빌드하는 방법을 보여줍니다. 예제 Dockerfile에서는 buster 기본 이미지를 사용합니다. Dockerfile에는 런타임 인터페이스 클라이언트가 포함되어 있습니다.

이 섹션의 단계를 완료하려면 다음이 필요합니다.

이 섹션의 단계를 완료하려면 다음이 필요합니다.

비 AWS 기본 이미지에서 컨테이너 이미지 생성
  1. 프로젝트에 대한 디렉터리를 생성하고 해당 디렉터리로 전환합니다.

    mkdir example cd example
  2. npm을 사용하여 새 Node.js 프로젝트를 생성합니다. 대화형 환경에서 제공되는 기본 옵션을 수락하려면 Enter을 누릅니다.

    npm init
  3. index.js라는 파일을 새로 생성합니다. 테스트를 위해 다음 샘플 함수 코드를 파일에 추가하거나 자체 샘플 함수 코드를 사용할 수 있습니다.

    예 CommonJS 핸들러
    exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
  4. 새 Dockerfile을 생성합니다. 다음 Dockerfile은 AWS 기본 이미지 대신 buster 기본 이미지를 사용합니다. Dockerfile에는 이미지가 Lambda와 호환되도록 하는 런타임 인터페이스 클라이언트가 포함되어 있습니다. Dockerfile은 다단계 빌드를 사용합니다. 첫 번째 단계에서는 함수의 종속 항목이 설치되는 표준 Node.js 환경인 빌드 이미지를 생성합니다. 두 번째 단계에서는 함수 코드와 해당 종속 항목을 포함하는 더 슬림한 이미지를 생성합니다. 이렇게 하면 최종 이미지 크기가 줄어듭니다.

    • FROM 속성을 기본 이미지 식별자로 설정합니다.

    • COPY 명령을 사용하여 함수 코드와 런타임 종속 항목을 복사합니다.

    • Docker 컨테이너가 시작될 때 실행할 모듈로 ENTRYPOINT를 설정합니다. 이 경우 모듈은 런타임 인터페이스 클라이언트입니다.

    • CMD 인수를 Lambda 함수 핸들러로 설정합니다.

    참고로 Dockerfile 예제에는 USER 지침이 포함되어 있지 않습니다. Lambda에 컨테이너 이미지를 배포할 때 Lambda는 권한이 최소 권한인 기본 Linux 사용자를 자동으로 정의합니다. 이는 USER 지침이 제공되지 않을 때 root 사용자에게 기본 설정이 적용되는 표준 Docker 동작과는 다릅니다.

    예 Dockerfile
    # Define custom function directory ARG FUNCTION_DIR="/function" FROM node:20-buster as build-image # Include global arg in this stage of the build ARG FUNCTION_DIR # Install build dependencies RUN apt-get update && \ apt-get install -y \ g++ \ make \ cmake \ unzip \ libcurl4-openssl-dev # Copy function code RUN mkdir -p ${FUNCTION_DIR} COPY . ${FUNCTION_DIR} WORKDIR ${FUNCTION_DIR} # Install Node.js dependencies RUN npm install # Install the runtime interface client RUN npm install aws-lambda-ric # Grab a fresh slim copy of the image to reduce the final size FROM node:20-buster-slim # Required for Node runtimes which use npm@8.6.0+ because # by default npm writes logs under /home/.npm and Lambda fs is read-only ENV NPM_CONFIG_CACHE=/tmp/.npm # Include global arg in this stage of the build ARG FUNCTION_DIR # Set working directory to function root directory WORKDIR ${FUNCTION_DIR} # Copy in the built dependencies COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} # Set runtime interface client as default command for the container runtime ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] # Pass the name of the function handler as an argument to the runtime CMD ["index.handler"]
  5. docker build 명령으로 도커 이미지를 빌드합니다. 다음 예제에서는 이미지 이름을 docker-image로 지정하고 test 태그를 지정합니다. 이미지를 Lambda와 호환되게 만들려면 --provenance=false 옵션을 사용해야 합니다.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    참고

    이 명령은 빌드 머신의 아키텍처에 관계없이 컨테이너가 Lambda 실행 환경과 호환되는지 확인하기 위해 --platform linux/amd64 옵션을 지정합니다. ARM64 명령 세트 아키텍처를 사용하여 Lambda 함수를 생성하려는 경우 --platform linux/arm64 옵션을 대신 사용하도록 명령을 변경해야 합니다.

비 AWS 기본 이미지에서 컨테이너 이미지 생성
  1. 프로젝트에 대한 디렉터리를 생성하고 해당 디렉터리로 전환합니다.

    mkdir example cd example
  2. npm을 사용하여 새 Node.js 프로젝트를 생성합니다. 대화형 환경에서 제공되는 기본 옵션을 수락하려면 Enter을 누릅니다.

    npm init
  3. index.js라는 파일을 새로 생성합니다. 테스트를 위해 다음 샘플 함수 코드를 파일에 추가하거나 자체 샘플 함수 코드를 사용할 수 있습니다.

    예 CommonJS 핸들러
    exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
  4. 새 Dockerfile을 생성합니다. 다음 Dockerfile은 AWS 기본 이미지 대신 buster 기본 이미지를 사용합니다. Dockerfile에는 이미지가 Lambda와 호환되도록 하는 런타임 인터페이스 클라이언트가 포함되어 있습니다. Dockerfile은 다단계 빌드를 사용합니다. 첫 번째 단계에서는 함수의 종속 항목이 설치되는 표준 Node.js 환경인 빌드 이미지를 생성합니다. 두 번째 단계에서는 함수 코드와 해당 종속 항목을 포함하는 더 슬림한 이미지를 생성합니다. 이렇게 하면 최종 이미지 크기가 줄어듭니다.

    • FROM 속성을 기본 이미지 식별자로 설정합니다.

    • COPY 명령을 사용하여 함수 코드와 런타임 종속 항목을 복사합니다.

    • Docker 컨테이너가 시작될 때 실행할 모듈로 ENTRYPOINT를 설정합니다. 이 경우 모듈은 런타임 인터페이스 클라이언트입니다.

    • CMD 인수를 Lambda 함수 핸들러로 설정합니다.

    참고로 Dockerfile 예제에는 USER 지침이 포함되어 있지 않습니다. Lambda에 컨테이너 이미지를 배포할 때 Lambda는 권한이 최소 권한인 기본 Linux 사용자를 자동으로 정의합니다. 이는 USER 지침이 제공되지 않을 때 root 사용자에게 기본 설정이 적용되는 표준 Docker 동작과는 다릅니다.

    예 Dockerfile
    # Define custom function directory ARG FUNCTION_DIR="/function" FROM node:20-buster as build-image # Include global arg in this stage of the build ARG FUNCTION_DIR # Install build dependencies RUN apt-get update && \ apt-get install -y \ g++ \ make \ cmake \ unzip \ libcurl4-openssl-dev # Copy function code RUN mkdir -p ${FUNCTION_DIR} COPY . ${FUNCTION_DIR} WORKDIR ${FUNCTION_DIR} # Install Node.js dependencies RUN npm install # Install the runtime interface client RUN npm install aws-lambda-ric # Grab a fresh slim copy of the image to reduce the final size FROM node:20-buster-slim # Required for Node runtimes which use npm@8.6.0+ because # by default npm writes logs under /home/.npm and Lambda fs is read-only ENV NPM_CONFIG_CACHE=/tmp/.npm # Include global arg in this stage of the build ARG FUNCTION_DIR # Set working directory to function root directory WORKDIR ${FUNCTION_DIR} # Copy in the built dependencies COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} # Set runtime interface client as default command for the container runtime ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] # Pass the name of the function handler as an argument to the runtime CMD ["index.handler"]
  5. docker build 명령으로 도커 이미지를 빌드합니다. 다음 예제에서는 이미지 이름을 docker-image로 지정하고 test 태그를 지정합니다. 이미지를 Lambda와 호환되게 만들려면 --provenance=false 옵션을 사용해야 합니다.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    참고

    이 명령은 빌드 머신의 아키텍처에 관계없이 컨테이너가 Lambda 실행 환경과 호환되는지 확인하기 위해 --platform linux/amd64 옵션을 지정합니다. ARM64 명령 세트 아키텍처를 사용하여 Lambda 함수를 생성하려는 경우 --platform linux/arm64 옵션을 대신 사용하도록 명령을 변경해야 합니다.

런타임 인터페이스 에뮬레이터를 사용하여 이미지를 로컬로 테스트합니다. 에뮬레이터를 이미지에 빌드하거나 다음 절차를 사용하여 로컬 시스템에 설치할 수 있습니다.

로컬 시스템에 런타임 인터페이스 에뮬레이터 설치 및 실행
  1. 프로젝트 디렉터리에서 다음 명령을 실행하여 GitHub에서 런타임 인터페이스 에뮬레이터(x86-64 아키텍처)를 다운로드하고 로컬 시스템에 설치합니다.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    arm64 에뮬레이터를 설치하려면 이전 명령의 GitHub 리포지토리 URL을 다음과 같이 바꿉니다.

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    arm64 에뮬레이터를 설치하려면 $downloadLink을(를) 다음과 같이 바꿉니다.

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. docker run 명령을 사용하여 Docker 이미지를 시작합니다. 다음 사항에 유의하세요.

    • docker-image는 이미지 이름이고 test는 태그입니다.

    • /usr/local/bin/npx aws-lambda-ric index.handler는 Docker 파일의 CMD 다음에 오는 ENTRYPOINT입니다.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/local/bin/npx aws-lambda-ric index.handler
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/local/bin/npx aws-lambda-ric index.handler

    이 명령은 이미지를 컨테이너로 실행하고 localhost:9000/2015-03-31/functions/function/invocations에 로컬 엔드포인트를 생성합니다.

    참고

    ARM64 명령 세트 아키텍처를 위한 도커 이미지를 빌드한 경우 --platform linux/arm64 옵션을 --platform linux/amd64 대신 사용해야 합니다.

  3. 로컬 엔드포인트에 이벤트를 게시합니다.

    Linux/macOS

    Linux 및 macOS에서 다음 curl 명령을 실행합니다.

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    PowerShell에서 다음 Invoke-WebRequest 명령을 실행합니다.

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. 컨테이너 ID를 가져옵니다.

    docker ps
  5. docker kill 명령을 사용하여 컨테이너를 중지합니다. 이 명령에서 3766c4ab331c를 이전 단계의 컨테이너 ID로 바꿉니다.

    docker kill 3766c4ab331c

런타임 인터페이스 에뮬레이터를 사용하여 이미지를 로컬로 테스트합니다. 에뮬레이터를 이미지에 빌드하거나 다음 절차를 사용하여 로컬 시스템에 설치할 수 있습니다.

로컬 시스템에 런타임 인터페이스 에뮬레이터 설치 및 실행
  1. 프로젝트 디렉터리에서 다음 명령을 실행하여 GitHub에서 런타임 인터페이스 에뮬레이터(x86-64 아키텍처)를 다운로드하고 로컬 시스템에 설치합니다.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    arm64 에뮬레이터를 설치하려면 이전 명령의 GitHub 리포지토리 URL을 다음과 같이 바꿉니다.

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    arm64 에뮬레이터를 설치하려면 $downloadLink을(를) 다음과 같이 바꿉니다.

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    arm64 에뮬레이터를 설치하려면 이전 명령의 GitHub 리포지토리 URL을 다음과 같이 바꿉니다.

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. docker run 명령을 사용하여 Docker 이미지를 시작합니다. 다음 사항에 유의하세요.

    • docker-image는 이미지 이름이고 test는 태그입니다.

    • /usr/local/bin/npx aws-lambda-ric index.handler는 Docker 파일의 CMD 다음에 오는 ENTRYPOINT입니다.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/local/bin/npx aws-lambda-ric index.handler
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/local/bin/npx aws-lambda-ric index.handler
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/local/bin/npx aws-lambda-ric index.handler

    이 명령은 이미지를 컨테이너로 실행하고 localhost:9000/2015-03-31/functions/function/invocations에 로컬 엔드포인트를 생성합니다.

    참고

    ARM64 명령 세트 아키텍처를 위한 도커 이미지를 빌드한 경우 --platform linux/arm64 옵션을 --platform linux/amd64 대신 사용해야 합니다.

  3. 로컬 엔드포인트에 이벤트를 게시합니다.

    Linux/macOS

    Linux 및 macOS에서 다음 curl 명령을 실행합니다.

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    PowerShell에서 다음 Invoke-WebRequest 명령을 실행합니다.

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"

    Linux 및 macOS에서 다음 curl 명령을 실행합니다.

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    이 명령은 빈 이벤트와 함께 함수를 간접 호출하고 응답을 반환합니다. 샘플 함수 코드가 아닌 자체 함수 코드를 사용하는 경우 JSON 페이로드로 함수를 간접 호출할 수 있습니다. 예시:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
  4. 컨테이너 ID를 가져옵니다.

    docker ps
  5. docker kill 명령을 사용하여 컨테이너를 중지합니다. 이 명령에서 3766c4ab331c를 이전 단계의 컨테이너 ID로 바꿉니다.

    docker kill 3766c4ab331c
Amazon ECR에 이미지 배포 및 Lambda 함수 생성
  1. get-login-password 명령을 실행하여 Amazon ECR 레지스트리에 대해 Docker CLI를 인증합니다.

    • --region 값을 Amazon ECR 리포지토리를 생성하려는 AWS 리전으로 설정합니다.

    • 111122223333를 사용자의 AWS 계정 ID로 바꿉니다.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. create-repository 명령을 사용하여 Amazon ECR에 리포지토리를 생성합니다.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    참고

    Amazon ECR 리포지토리는 Lambda 함수와 동일한 AWS 리전 내에 있어야 합니다.

    성공하면 다음과 같은 응답이 표시됩니다.

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. 이전 단계의 출력에서 repositoryUri를 복사합니다.

  4. docker tag 명령을 실행하여 로컬 이미지를 Amazon ECR 리포지토리에 최신 버전으로 태깅합니다. 이 명령에서:

    • docker-image:test는 Docker 이미지의 이름과 태그입니다. docker build 명령에서 지정한 이미지 이름 및 태그입니다.

    • <ECRrepositoryUri>를 복사한 repositoryUri로 바꿉니다. URI 끝에 :latest를 포함해야 합니다.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    예시:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. docker push 명령을 실행하여 Amazon ECR 리포지토리에 로컬 이미지를 배포합니다. 리포지토리 URI 끝에 :latest를 포함해야 합니다.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. 함수에 대한 실행 역할이 아직 없는 경우 하나 생성합니다. 다음 단계에서는 역할의 Amazon 리소스 이름(ARN)이 필요합니다.

  7. Lambda 함수를 생성합니다. ImageUri의 경우 이전의 리포지토리 URI를 지정합니다. URI 끝에 :latest를 포함해야 합니다.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    참고

    이미지가 Lambda 함수와 동일한 리전에 있는 한 다른 AWS 계정의 이미지를 사용하여 함수를 생성할 수 있습니다. 자세한 내용은 Amazon ECR 교차 계정 권한 단원을 참조하십시오.

  8. 함수를 간접 호출합니다.

    aws lambda invoke --function-name hello-world response.json

    다음과 같은 응답이 표시되어야 합니다.

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 함수의 출력을 보려면 response.json 파일을 확인합니다.

함수 코드를 업데이트하려면 이미지를 다시 빌드하고 Amazon ECR 리포지토리에 새 이미지를 업로드한 다음 update-function-code 명령을 사용하여 이미지를 Lambda 함수에 배포해야 합니다.

Lambda는 이미지 태그를 특정 이미지 다이제스트로 확인합니다. 즉, 함수를 배포하는 데 사용된 이미지 태그가 Amazon ECR의 새 이미지로 가리키는 경우 Lambda는 새 이미지를 사용하도록 함수를 자동으로 업데이트하지 않습니다.

새 이미지를 동일한 Lambda 함수에 배포하려면 Amazon ECR의 이미지 태그가 동일하게 유지되더라도 update-function-code 명령을 사용해야 합니다. 다음 예제에서 --publish 옵션은 업데이트된 컨테이너 이미지를 사용하여 새 버전의 함수를 생성합니다.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Amazon ECR에 이미지 배포 및 Lambda 함수 생성
  1. get-login-password 명령을 실행하여 Amazon ECR 레지스트리에 대해 Docker CLI를 인증합니다.

    • --region 값을 Amazon ECR 리포지토리를 생성하려는 AWS 리전으로 설정합니다.

    • 111122223333를 사용자의 AWS 계정 ID로 바꿉니다.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. create-repository 명령을 사용하여 Amazon ECR에 리포지토리를 생성합니다.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    참고

    Amazon ECR 리포지토리는 Lambda 함수와 동일한 AWS 리전 내에 있어야 합니다.

    성공하면 다음과 같은 응답이 표시됩니다.

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. 이전 단계의 출력에서 repositoryUri를 복사합니다.

  4. docker tag 명령을 실행하여 로컬 이미지를 Amazon ECR 리포지토리에 최신 버전으로 태깅합니다. 이 명령에서:

    • docker-image:test는 Docker 이미지의 이름과 태그입니다. docker build 명령에서 지정한 이미지 이름 및 태그입니다.

    • <ECRrepositoryUri>를 복사한 repositoryUri로 바꿉니다. URI 끝에 :latest를 포함해야 합니다.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    예시:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. docker push 명령을 실행하여 Amazon ECR 리포지토리에 로컬 이미지를 배포합니다. 리포지토리 URI 끝에 :latest를 포함해야 합니다.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. 함수에 대한 실행 역할이 아직 없는 경우 하나 생성합니다. 다음 단계에서는 역할의 Amazon 리소스 이름(ARN)이 필요합니다.

  7. Lambda 함수를 생성합니다. ImageUri의 경우 이전의 리포지토리 URI를 지정합니다. URI 끝에 :latest를 포함해야 합니다.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    참고

    이미지가 Lambda 함수와 동일한 리전에 있는 한 다른 AWS 계정의 이미지를 사용하여 함수를 생성할 수 있습니다. 자세한 내용은 Amazon ECR 교차 계정 권한 단원을 참조하십시오.

  8. 함수를 간접 호출합니다.

    aws lambda invoke --function-name hello-world response.json

    다음과 같은 응답이 표시되어야 합니다.

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. 함수의 출력을 보려면 response.json 파일을 확인합니다.

함수 코드를 업데이트하려면 이미지를 다시 빌드하고 Amazon ECR 리포지토리에 새 이미지를 업로드한 다음 update-function-code 명령을 사용하여 이미지를 Lambda 함수에 배포해야 합니다.

Lambda는 이미지 태그를 특정 이미지 다이제스트로 확인합니다. 즉, 함수를 배포하는 데 사용된 이미지 태그가 Amazon ECR의 새 이미지로 가리키는 경우 Lambda는 새 이미지를 사용하도록 함수를 자동으로 업데이트하지 않습니다.

새 이미지를 동일한 Lambda 함수에 배포하려면 Amazon ECR의 이미지 태그가 동일하게 유지되더라도 update-function-code 명령을 사용해야 합니다. 다음 예제에서 --publish 옵션은 업데이트된 컨테이너 이미지를 사용하여 새 버전의 함수를 생성합니다.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish
프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.