

これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CDK アプリでコンテナイメージアセットを構築してデプロイする
<a name="build-containers"></a>

AWS Cloud Development Kit (AWS CDK) を使用してコンテナイメージアセットを構築する場合、Docker はデフォルトでこれらのアクションを実行するために利用されます。別のコンテナ管理ツールを使用する場合は、`CDK_DOCKER` 環境変数を使用して Docker を置き換えることができます。

## 例: AWS CDK を使用してコンテナイメージアセットを構築して公開する
<a name="build-containers-intro-example"></a>

以下は、デフォルトで 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) コマンドラインインターフェイス (CLI) は以下を行います。

1.  **Docker イメージを構築する** – 指定されたディレクトリ (`lib/docker`) の `Dockerfile` に基づいてローカルで `docker build` を実行します。

1.  **イメージにタグを付ける** – `docker tag` を実行して、イメージの内容に基づいて構築されたイメージに一意のハッシュをタグ付けします。

1.  **Amazon ECR に発行する** – `docker push` を実行して、コンテナイメージを Amazon ECR リポジトリに発行します。このリポジトリは既に存在している必要があります。これは、デフォルトのブートストラッププロセス中に作成されます。

1.  **イメージ URI を出力する** – デプロイが成功すると、発行されたコンテナイメージの Amazon ECR URI がコマンドプロンプトに出力されます。これは Amazon ECR にある Docker イメージの URI です。

## Docker を別のコンテナ管理ツールに置き換える方法
<a name="build-container-replace"></a>

`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 ドロップイン置き換えエンジン
<a name="build-container-supported"></a>

 Finch はサポートされていますが、使用できない Docker 機能がある場合や、ツールの進化に応じて動作が異なる場合があります。Finch の詳細については、「*AWS オープンソースブログ*」の「[飛行の準備ができました: Finch 1.0 GA のアナウンス\$1](https://aws.amazon.com/blogs/opensource/ready-for-flight-announcing-finch-1-0-ga/)」を参照してください。

他のコンテナ管理ツールは、機能する場合があります。CDK は、どの Docker 置き換えが、それがサポートされているかどうかを判断するために使用されているかを確認しません。ツールが同等の Docker コマンドを持ち、同様に動作する場合は、そのツールは機能するはずです。