CDK 앱에서 컨테이너 이미지 자산 빌드 및 배포 - AWS Cloud Development Kit(AWS CDK) v2

이는 AWS CDK v2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.

CDK 앱에서 컨테이너 이미지 자산 빌드 및 배포

AWS Cloud Development Kit(AWS CDK)를 사용하여 컨테이너 이미지 자산을 빌드하면 기본적으로 Docker가 이러한 작업을 수행하는 데 사용됩니다. 다른 컨테이너 관리 도구를 사용하려면 CDK_DOCKER 환경 변수를 통해 Docker를 교체할 수 있습니다.

예: AWS CDK를 사용하여 컨테이너 이미지 자산 빌드 및 게시

다음은 기본적으로 Docker를 사용하여 컨테이너 자산을 빌드하고 Amazon Elastic Container Registry(Amazon ECR)에 게시하는 AWS CDK 앱의 간단한 예제입니다.

프로젝트 구조
my-cdk-app/ ├── lib/ │ ├── my-stack.ts │ └── docker/ │ ├── Dockerfile │ └── app/ │ └── index.js ├── bin/ │ └── my-cdk-app.ts ├── package.json ├── tsconfig.json └── cdk.json
Dockerfile:
FROM public.ecr.aws/lambda/nodejs:16 # Copy application code COPY app/ /var/task/ # (Optional) Install dependencies # RUN npm install # The Lambda Node.js base image looks for index.handler by default
애플리케이션 코드

lib/docker/app/index.js에서:

console.log("Hello from inside the container!");
CDK 스택
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets'; export class MyStack extends cdk.Stack { constructor(scope: Construct, id: string) { super(scope, id); // Define a Docker image asset const dockerImageAsset = new ecr_assets.DockerImageAsset(this, 'MyDockerImage', { directory: 'lib/docker', // Path to the directory containing the Dockerfile }); // Output the ECR URI new cdk.CfnOutput(this, 'ECRImageUri', { value: dockerImageAsset.imageUri, }); } }
CDK 앱
#!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import { MyStack } from '../lib/my-stack'; const app = new cdk.App(); new MyStack(app, 'MyStack');

cdk deploy를 실행하면 AWS Cloud Development Kit(AWS CDK) Command Line Interface(CLI)가 다음을 수행합니다.

  1. Docker 이미지 빌드 - 지정된 디렉터리(lib/docker)의 Dockerfile을 기반으로 로컬에서 docker build를 실행합니다.

  2. 이미지 태그 지정 - docker tag를 실행하여 이미지 콘텐츠를 기반으로 빌드된 이미지에 고유한 해시 태그를 지정합니다.

  3. Amazon ECR에 게시 - docker push를 실행하여 컨테이너 이미지를 Amazon ECR 리포지토리에 게시합니다. 해당 리포지토리가 이미 존재해야 합니다. 이는 기본 부트스트래핑 프로세스 중에 생성됩니다.

  4. 이미지 URI 출력 - 배포에 성공하면 게시된 컨테이너 이미지의 Amazon ECR URI가 명령 프롬프트에 출력됩니다. Amazon ECR에 있는 Docker 이미지의 URI입니다.

Docker를 다른 컨테이너 관리 도구로 교체하는 방법

CDK_DOCKER 환경 변수를 사용하여 대체 컨테이너 관리 도구의 바이너리 경로를 지정합니다. 다음은 Docker를 Finch로 대체하는 예제입니다.

$ which finch /usr/local/bin/finch # Locate the path to the binary $ export CDK_DOCKER='/usr/local/bin/finch' # Set the environment variable $ cdk deploy # Deploy using the replacement

별칭 지정 또는 연결은 지원되지 않습니다. Docker를 교체하려면 CDK_DOCKER 환경 변수를 사용해야 합니다.

지원되는 Docker 드롭인 대체 엔진

Finch는 지원되지만 일부 Docker 기능은 사용할 수 없거나 도구가 발전함에 따라 다르게 작동할 수 있습니다. Finch에 대한 자세한 내용은 AWS 오픈 소스 블로그출시 준비 완료: Finch 1.0 GA! 발표를 참조하세요.

다른 컨테이너 관리 도구가 작동할 수 있습니다. CDK는 Docker를 교체하여 사용하려는 대상이 지원되는지를 확인하지 않습니다. 도구에 동등한 Docker 명령이 있고 비슷하게 동작하는 경우 작동해야 합니다.