

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

# AWS App2Container を使用したオンプレミスの Java プリケーションの AWS への移行
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container"></a>

*Amazon Web Services、Dhananjay Karanjkar*

## 概要
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-summary"></a>

AWS App2Container (A2C) は、コードを変更することなく、仮想マシンで実行されている既存のアプリケーションをコンテナに変換するのに役立つコマンドラインツールです。A2Cは、サーバーで実行されているアプリケーションを発見し、依存関係を特定し、Amazon Elastic Container Service (Amazon ECS) および Amazon Elastic Kubernetes Service (Amazon EKS) にシームレスにデプロイするための関連アーティファクトを生成する。

このパターンは、アプリケーションサーバーにデプロイされたオンプレミスの Java アプリケーションを、ワーカーマシンから App2Container を使用して AWS Fargate または Amazon EKS にリモート移行する手順を示しています。 

ワーカーマシンは、以下のユースケースにご使用いただけます。
+ Java アプリケーションが実行されているアプリケーションサーバーでは Docker のインストールは許可されていないか、使用できません。
+ 異なる物理サーバーまたは仮想サーバーにデプロイされた複数のアプリケーションの移行を管理する必要があります。

このパターンでは、AWS CodeCommit、 AWS CodePipeline、 を使用します AWS CodeBuild。

## 前提条件と制限事項
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-prereqs"></a>

**前提条件**
+ Linux サーバー上で Java アプリケーションを実行しているアプリケーションサーバー
+ Linux オペレーティングシステムを搭載したワーカーマシン
+ 20 GB 以上の空きディスク容量があるワーカーマシン

**制限事項**
+ すべてのアプリケーションに対応しているわけではありません。詳細については、「[Linux でサポートされるアプリケーション](https://docs.aws.amazon.com/app2container/latest/UserGuide/supported-applications.html)」を参照してください。

## アーキテクチャ
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-architecture"></a>

**ソーステクノロジースタック**
+ Linux サーバー上で実行されている Java アプリケーション

**ターゲットテクノロジースタック**
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodeDeploy
+ AWS CodePipeline
+ Amazon Elastic Container Registry
+ AWS Fargate

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

![AWS でのオンプレミス Java アプリケーションのアーキテクチャ。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/61ed65a0-fab2-4fc8-8531-18bfd56a25b3/images/602cde7b-ab0c-46a5-8c37-afe304adf061.png)


 

## ツール
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-tools"></a>

**ツール**
+ 「[AWS App2Container](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html)」— AWS App2Container (A2C) は、オンプレミスのデータセンターや仮想マシン上で動作するアプリケーションを、Amazon ECS や Amazon EKS で管理されるコンテナ内で動作するようにリフトとシフトするためのコマンドラインツールです。
+ 「[AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)」— AWS CodeBuild はクラウドの完全マネージド型のビルドサービスです。CodeBuild はソースコードをコンパイルし、ユニットテストを実行して、すぐにデプロイできるアーティファクトを作成します。
+ 「[AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)」— AWS CodeCommit は、Amazon Web Services がホスティングするバージョン管理サービスで、アセット（ドキュメント、ソースコード、バイナリファイルなど）をクラウド上に非公開で保存と管理するために使用できます。
+ 「[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)」— AWS CodePipeline は、ソフトウェアのリリースに必要な手順のモデル化、可視化、および自動化に使用できる継続的な配信サービスです。
+ 「[Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)」— Amazon Elastic Container Service (Amazon ECS) は、クラスターでコンテナの実行、停止、管理に使用される、高度にスケーラブルで高速のコンテナ管理サービスです。
+ 「[Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)」— Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えた AWS マネージドコンテナイメージレジストリサービスです。
+ 「[Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)」— Amazon Elastic Kubernetes Service (Amazon EKS) は、独自の Kubernetes コントロールプレーンやノードをインストール、運用、保守することなく、AWS 上で Kubernetes を実行するために使用できるマネージドサービスです。
+ 「[AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)」— AWS Fargate は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのサーバーやクラスタを管理することなくコンテナを実行するために、Amazon ECS で使用できる技術です。Fargateを使用すると、コンテナを実行するために仮想マシンのクラスターをプロビジョニング、設定、スケールする必要がありません。

## エピック
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-epics"></a>

### 認証情報の設定
<a name="set-up-credentials"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アプリケーションサーバーにアクセスするためのシークレットを作成します。 | ワーカーマシンからリモートでアプリケーションサーバーにアクセスするには、AWS Secrets Manager でシークレットを作成します。シークレットには、SSH プライベートキー、または証明書と SSH プライベートキーを使用できます。詳しくは「[Manage secrets for AWS App2Container](https://docs.aws.amazon.com/app2container/latest/UserGuide/manage-secrets.html)」をご確認ください。 | DevOps、開発者 | 

### ワーカーマシンのセットアップ
<a name="set-up-the-worker-machine"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| tar ファイルをインストールします。 | `sudo yum install -y tar` を実行します。 | DevOps、開発者 | 
| AWS CLI をインストールします。 | Amazon コマンドラインインターフェイス (CLI) をインストールするには、`curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"` を実行します。 <br />`awscliv2.zip` を解凍します。<br />`sudo ./aws/install` を実行します。 | DevOps、開発者 | 
| App2 コンテナをインストールします。 | 以下の コマンドを実行します。<br />`curl -o AWSApp2Container-installer-linux.tar.gz https://app2container-release-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/AWSApp2Container-installer-linux.tar.gz`<br />`sudo tar xvf AWSApp2Container-installer-linux.tar.gz`<br />`sudo ./install.sh` | DevOps、開発者 | 
| プロファイルを設定します。 | AWS のデフォルトプロファイルを設定するには、`sudo aws configure` を実行します。<br />名前付きの AWS デフォルトプロファイルを設定するには、`sudo aws configure --profile <profile name>` を実行します。 | DevOps、開発者 | 
| Docker をインストールします。 | 以下のコマンドを実行します。<br />`sudo yum install -y docker`<br />`sudo systemctl enable docker & sudo systemctl restart docker` |  | 
| App2 コンテナを初期化します。 | App2Container を初期化するには、次の情報が必要です。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)<br />`sudo app2container init` を実行します。 | DevOps、開発者 | 

### ワーカーマシンの設定
<a name="configure-the-worker-machine"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アプリケーションサーバーに App2Container コマンドをリモート接続して実行するようにワーカーマシンを設定します。 | ワーカーマシンを設定するには、以下の情報が必要です。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)<br />`sudo app2container remote configure` を実行します。 | DevOps、開発者 | 

### ワーカーマシン上のアプリケーションの検出、分析、抽出
<a name="discover-analyze-and-extract-applications-on-the-worker-machine"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| オンプレミスの Java アプリケーションをご覧ください。 | アプリケーションサーバーで実行されているすべてのアプリケーションをリモートで検出するには、次のコマンドを実行します。<br />`sudo app2container remote inventory --target <FQDN/IP of App server>`<br />このコマンドは、`inventory.json` にデプロイされたアプリケーションのリストを生成します。 | 開発者、DevOps | 
| 検出されたアプリケーションを分析します。 | インベントリ段階で取得した application-id を使用して各アプリケーションをリモート分析するには、以下のコマンドを実行します。<br />`sudo app2container remote analyze --application-id <java-app-id> --target <FQDN/IP of App Server>`<br />これにより、ワークスペースの場所に `analysis.json` ファイルが生成されます。このファイルが生成されたら、必要に応じてコンテナ化パラメータを変更できます。 | 開発者、DevOps | 
| 分析したアプリケーションを抽出します。 | 分析したアプリケーションのアプリケーションアーカイブを生成するには、次のコマンドをリモートで実行します。これにより、ワークスペースの場所に tar バンドルを生成します。<br />`sudo app2container remote extract --application-id <application id> --target <FQDN/IP of App Server>`<br />抽出されたアーティファクトはローカルワーカーマシン上で生成できます。 | 開発者、DevOps | 

### 抽出したアーティファクトをワーカーマシンにコンテナ化します。
<a name="containerize-the-extracted-artifacts-on-the-worker-machine"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 抽出したアーティファクトをコンテナ化する。 | 次のコマンドを実行して、前のステップで抽出したアーティファクトをコンテナ化します。<br />`sudo app2container containerize --input-archive <tar bundle location on worker machine>` | 開発者、DevOps | 
| ターゲットを確定する。 | ターゲットを確定するには、`containerize` コマンドの実行時に作成される `deployment.json` を開きます。AWS Fargate をターゲットとして指定するには、`createEcsArtifacts` を `true` に設定します。Amazon EKS をターゲットとして設定するには、`createEksArtifacts` を true に設定します。 | 開発者、DevOps | 

### AWS Artifact の生成とプロビジョニング
<a name="generate-and-provision-aws-artifacts"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ワーカーマシンに AWS デプロイアーティファクトを生成します。 | デプロイメントアーティファクトを生成するには、以下のコマンドを実行します。<br />`sudo app2container generate app-deployment --application-id <application id>`<br />これにより、ワークスペースに `ecs-master.yml` AWS CloudFormation テンプレートが生成されます。 | DevOps | 
| アーティファクトをプロビジョニングします。 | 生成されたアーティファクトをさらにプロビジョニングするには、次のコマンドを実行して AWS CloudFormation テンプレートをデプロイします。<br />`aws cloudformation deploy --template-file <path to ecs-master.yml> --capabilities CAPABILITY_NAMED_IAM --stack-name <application id>–ECS` | DevOps | 
| パイプラインを生成する。 | 前のストーリーで作成した `pipeline.json` を、必要に応じて変更します。次に、`generate pipeline` コマンドを実行してパイプラインデプロイアーティファクトを生成します。 | DevOps | 

## 関連リソース
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-resources"></a>
+ 「[App2Container とは?](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html)」
+ 「[AWS App2Container に関するブログ投稿](https://aws.amazon.com/blogs/aws/aws-app2container-a-new-containerizing-tool-for-java-and-asp-net-applications/)」
+ 「[AWS CLI 設定の基本](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)」
+ 「[Amazon ECS 用 Docker の基本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)」
+ 「[Docker コマンド](https://docs.docker.com/engine/reference/commandline/cli/)」