

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 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，請參閱《 *AWS CDK v2 開發人員指南*》中的[引導](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)。如果您尚未啟動帳戶，您可以在 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/zh_tw/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/zh_tw/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/zh_tw/cloudshell/latest/userguide/images/docker-cdk-tutorial%20-%205-lambda-invoke.png)

   您現在已成功使用 部署 Docker 容器型 Lambda 函數 AWS CDK。如需詳細資訊 AWS CDK，請參閱 [AWS CDK v2 開發人員指南](https://docs.aws.amazon.com/cdk/v2/guide/hello_world.html)。如果您在嘗試完成本教學課程時遇到錯誤或遇到問題，請參閱本指南的[故障診斷](https://docs.aws.amazon.com/cloudshell/latest/userguide/troubleshooting.html)一節以取得協助。

## 清除
<a name="clean-up-docker-cdk-deploy"></a>

您現在已成功使用 部署 Docker 容器型 Lambda 函數 AWS CDK。在 AWS CDK 專案中，執行下列命令來刪除相關聯的資源。系統會提示您確認刪除。
+ 

  ```
  npx cdk destroy DockerTutorialStack
  ```
+ 若要從 AWS CloudShell 環境中移除您在本教學課程中建立的檔案和資源，請執行下列命令。

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