

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

# Amazon EC2 Linux インスタンスで ASP.NET Core ウェブ API Docker コンテナを実行する
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Amazon Web Services、Vijai Anand Ramalingam、Sreelaxmi Pai*

## 概要
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

このパターンは、Amazon Web Services (AWS) クラウドでアプリケーションのコンテナ化を始めるユーザーを対象としています。クラウド上でアプリケーションのコンテナ化を始める場合、通常、コンテナオーケストレーションプラットフォームは設定されていません。このパターンは、複雑なコンテナオーケストレーションインフラストラクチャを必要とせずに、コンテナ化されたアプリケーションをテストするためのインフラストラクチャを AWS にすばやくセットアップするのに役立ちます。

モダナイゼーションの最初のステップでは、アプリケーションを変換します。レガシー .NET Framework アプリケーションの場合は、まず、ランタイムを ASP.NET Core に変更する必要があります。次に、以下の操作を実行します。
+ Docker コンテナイメージを作成する
+ ビルドされたイメージを使用して Docker コンテナを実行する
+ Amazon Elastic Container Service (Amazon ECS) またはAmazon Elastic Kubernetes Service (Amazon EKS) のような コンテナオーケストレーションプラットフォームにアプリケーションをデプロイする前に、アプリケーションを検証します。 

このパターンでは、Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスでの最新のアプリケーション開発の構築、実行、検証の各側面を扱います。

## 前提条件と制限事項
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**前提条件**
+ アクティブな [Amazon Web Services (AWS) アカウント](https://aws.amazon.com/account/)
+ このパターンの AWS リソースを作成するのに十分なアクセス権を持つ [AWS Identity and Access Management (IAM) ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 
+ [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) 以降をダウンロードしてインストール済み
+ ASP.NET Core にモダナイズされた .NET Framework プロジェクト
+ GitHub リポジトリ

**製品バージョン**
+ Visual Studio Community 2022 以降

## アーキテクチャ
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**ターゲット アーキテクチャ**

このパターンでは、[AWS CloudFormation テンプレート](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml)を使用して、次の図に示す高可用性アーキテクチャを作成します。Amazon EC2 Linux インスタンスはプライベートサブネットで起動されます。AWS Systems Manager Session Manager は、プライベート Amazon EC2 Linux インスタンスにアクセスし、Docker コンテナで実行されている API をテストするために使用されます。

![\[Amazon EC2 Linux インスタンスにアクセスし、Docker コンテナで実行されている API をテストするユーザー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. セッションマネージャーから Linux インスタンスにアクセスする

## ツール
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**AWS サービス**
+ [AWS コマンドラインインターフェイス](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS コマンドラインインターフェイス (AWS CLI) はオープンソースのツールで、コマンドラインシェルのコマンドで AWS サービスとやり取りします。最小限の設定で、ブラウザベースの AWS マネジメントコンソールで提供される機能と同等の機能を実装する AWS CLI コマンドを実行できます。
+ [AWS マネジメントコンソール](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html) – AWS マネジメントコンソールは、AWS リソースを管理するためのサービスコンソールの広範なコレクションで構成され、そのコレクションを参照するウェブアプリケーションです。最初にサインインすると、コンソールのホームページが表示されます。各サービスコンソールにアクセスできるホームページは、AWS に関連するタスクを実行するために必要な情報に 1 か所からアクセスできます。
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) — Session Manager はフルマネージド型の AWS Systems Manager 機能です。Session Manager を使用すれば、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス を管理できます。Session Manager は、受信ポートを開いたり、踏み台ホストを維持したり、SSH キーを管理したりすることなく、セキュアで監査可能なノード管理を提供します。

**その他のツール**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) — Visual Studio 2022 は統合開発環境 (IDE) です。
+ [Docker](https://www.docker.com/) は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしてのPlatform as a Service (PaaS) 製品のセットです。

**コード**

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## エピック
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### ASP.NET Core ウェブ API を開発する
<a name="develop-the-asp-net-core-web-api"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Visual Studio を使用して ASP.NET Core ウェブ API のサンプルを作成します。 | ASP.NET Core ウェブ API のサンプルを作成するには、次の手順に従います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | アプリ開発者 | 
| Dockerfile を作成します。 | Dockerfile を作成するには、以下のいずれかの操作を行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)変更を GitHub リポジトリにプッシュするには、次のコマンドを実行します。<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | アプリ開発者 | 

### Amazon EC2 Linux インスタンスをセットアップする。
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| インフラストラクチャを設定します。 | [AWS CloudFormation テンプレート](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml)を起動して、以下を含むインフラストラクチャを作成します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)踏み台ホストを必要とせずに Session Manager を使用してプライベート Amazon EC2 インスタンスにアクセスする方法の詳細については、「[踏み台のない世界へ](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)」というブログ投稿を参照してください。 | アプリ開発者、AWS 管理者、AWS DevOps | 
| Amazon EC2 Linux インスタンスにログインします。 | プライベートサブネットの Amazon EC2 Linux インスタンスに接続するには、以下の手順に従います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | アプリ開発者 | 
| Docker をインストールして実行します。 | Amazon EC2 Linux インスタンスに Docker をインストールして起動するには、以下の手順に従います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | アプリ開発者、AWS 管理者、AWS DevOps | 
| GitHub をインストールして、リポジトリのクローンを作成します。 | Amazon EC2 Linux インスタンスに Git をインストールし、GitHub からリポジトリをクローンするには、以下の手順に従います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | アプリ開発者、AWS 管理者、AWS DevOps | 
| Docker コンテナをローカルで構築して実行します。 | Docker イメージを構築し、Amazon EC2 Linux インスタンス内でコンテナを実行するには、次の手順に従います。　[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | アプリ開発者、AWS 管理者、AWS DevOps | 

### ウェブ API をテストする
<a name="test-the-web-api"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| curl コマンドを使用して、ウェブ API をテストします。 | ウェブ API をテストするには、次のコマンドを使用します。<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>API レスポンスを確認してください。Swagger をローカルで実行している場合、各エンドポイントの curl コマンドは Swagger から取得できます。 | アプリ開発者 | 

### リソースをクリーンアップする
<a name="clean-up-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リソースを削除します。 | スタックを削除してすべてのリソースを削除します。これにより、利用していないサービスに料金を支払うことはありません。 | AWS 管理者、AWS DevOps | 

## 関連リソース
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ 「[PuTTY を使用した Windows から Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)」
+ 「[ASP.NET コアを使用してウェブ API を作成する](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)」
+ 「[踏み台のない世界へ](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)」