이는 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)가 다음을 수행합니다.
-
Docker 이미지 빌드 - 지정된 디렉터리(
lib/docker)의Dockerfile을 기반으로 로컬에서docker build를 실행합니다. -
이미지 태그 지정 -
docker tag를 실행하여 이미지 콘텐츠를 기반으로 빌드된 이미지에 고유한 해시 태그를 지정합니다. -
Amazon ECR에 게시 -
docker push를 실행하여 컨테이너 이미지를 Amazon ECR 리포지토리에 게시합니다. 해당 리포지토리가 이미 존재해야 합니다. 이는 기본 부트스트래핑 프로세스 중에 생성됩니다. -
이미지 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 명령이 있고 비슷하게 동작하는 경우 작동해야 합니다.