

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

# CloudShell AWS CDK 에서를 사용하여 Lambda 함수 배포
<a name="tutorial-docker-cdk-deploy"></a>

이 자습서에서는 CloudShell에서 AWS Cloud Development Kit (AWS CDK) 를 사용하여 Lambda 함수를 계정에 배포하는 방법을 보여줍니다.

## 사전 조건
<a name="prerequisites-docker-cdk-deploy"></a>
+  AWS CDK에 사용할 계정을 부트스트래핑합니다. 를 사용한 부트스트래핑에 대한 자세한 내용은 *AWS CDK v2 개발자 안내서*의 [부트스트래핑](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)을 AWS CDK참조하세요. 계정을 부트스트래핑하지 않은 경우 CloudShell에서 `cdk bootstrap`을 실행할 수 있습니다.
+ 계정에 리소스를 배포할 수 있는 적절한 권한이 있는지 확인합니다. 관리자 권한이 권장됩니다.

## 자습서 절차
<a name="tutorial-docker-cdk-deploy-steps"></a>

다음 자습서에서는 CloudShell AWS CDK 에서를 사용하여 Docker 컨테이너 기반 Lambda 함수를 배포하는 방법을 간략하게 설명합니다.

1. 홈 디렉터리에 새 폴더를 생성합니다.

   ```
   mkdir ~/docker-cdk-tutorial
   ```

1. 생성한 폴더로 이동합니다.

   ```
   cd ~/docker-cdk-tutorial
   ```

1. 로컬에 AWS CDK 종속 항목을 설치합니다.

   ```
   npm install aws-cdk aws-cdk-lib
   ```  
![\[AWS CDK 종속성을 설치하는 데 사용되는 명령의 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/cloudshell/latest/userguide/images/docker-cdk-tutorial%20-%201-setup.png)

1. 생성한 폴더에 스켈레톤 AWS CDK 프로젝트를 생성합니다.

   ```
   touch cdk.json
   mkdir lib
   touch lib/docker-tutorial.js lib/Dockerfile lib/hello.js
   ```

1. 텍스트 편집기를 사용하여(예: `nano cdk.json`) 파일을 열고 다음 콘텐츠를 붙여 넣습니다.

   ```
   {
     "app": "node lib/docker-tutorial.js"
   }
   ```

1. `lib/docker-tutorial.js` 파일을 열고 다음 내용을 붙여 넣습니다.

   ```
   // this file defines the CDK constructs we want to deploy
   
   const { App, Stack } = require('aws-cdk-lib');
   const { DockerImageFunction, DockerImageCode } = require('aws-cdk-lib/aws-lambda');
   const path = require('path');
   
   // create an application
   const app = new App();
   
   // define stack
   class DockerTutorialStack extends Stack {
     constructor(scope, id, props) {
       super(scope, id, props);
   
       // define lambda that uses a Docker container
       const dockerfileDir = path.join(__dirname);
       new DockerImageFunction(this, 'DockerTutorialFunction', {
         code: DockerImageCode.fromImageAsset(dockerfileDir),
         functionName: 'DockerTutorialFunction',
       });
     }
   }
   
   // instantiate stack
   new DockerTutorialStack(app, 'DockerTutorialStack');
   ```

1. `lib/Dockerfile`을 열고 다음 내용을 붙여 넣습니다.

   ```
   # Use a NodeJS 20.x runtime
   FROM public.ecr.aws/lambda/nodejs:20
   
   # Copy the function code to the LAMBDA_TASK_ROOT directory
   # This environment variable is provided by the lambda base image
   COPY hello.js ${LAMBDA_TASK_ROOT}
   
   # Set the CMD to the function handler
   CMD [ "hello.handler" ]
   ```

1. `lib/hello.js` 파일을 열고 다음 내용을 붙여 넣습니다.

   ```
   // define the handler
   exports.handler = async (event) => {
     // simply return a friendly success response
     const response = {
       statusCode: 200,
       body: JSON.stringify('Hello, World!'),
     };
     return response;
   };
   ```

1.  AWS CDK CLI를 사용하여 프로젝트를 합성하고 리소스를 배포합니다. 계정을 부트스트래핑해야 합니다.

   ```
   npx cdk synth
   npx cdk deploy --require-approval never
   ```  
![\[AWS CDK CLI를 사용하여 프로젝트를 합성하고 리소스를 배포하는 명령의 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/cloudshell/latest/userguide/images/docker-cdk-tutorial%20-%203-cdk-deploy-build.png)

1. Lambda 함수를 호출하여 확인합니다.

   ```
   aws lambda invoke --function-name DockerTutorialFunction out.json
   jq . out.json
   ```  
![\[Lambda 함수를 호출하는 데 사용되는 명령의 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/cloudshell/latest/userguide/images/docker-cdk-tutorial%20-%205-lambda-invoke.png)

   이제 AWS CDK를 사용하여 Docker 컨테이너 기반 Lambda 함수를 성공적으로 배포했습니다. 에 대한 자세한 내용은 [AWS CDK v2 개발자 안내서](https://docs.aws.amazon.com/cdk/v2/guide/hello_world.html)를 AWS CDK참조하세요. 이 자습서를 완료하려고 할 때 오류가 발생하거나 문제가 발생하면 이 가이드의 [문제 해결](https://docs.aws.amazon.com/cloudshell/latest/userguide/troubleshooting.html) 섹션을 참조하세요.

## 정리
<a name="clean-up-docker-cdk-deploy"></a>

이제 AWS CDK를 사용하여 Docker 컨테이너 기반 Lambda 함수를 성공적으로 배포했습니다. AWS CDK 프로젝트 내에서 다음 명령을 실행하여 연결된 리소스를 삭제합니다. 삭제를 확인하는 메시지가 표시됩니다.
+ 

  ```
  npx cdk destroy DockerTutorialStack
  ```
+ 이 자습서에서 생성한 파일과 리소스를 AWS CloudShell 환경에서 제거하려면 다음 명령을 실행합니다.

  ```
  cd ~
  rm -rf ~/docker-cli-tutorial
  ```