AWSのマネジメントコンソール…
AWSでは、実際に手を動かして学ぶワークショップのコンテンツも多数公開されています。
本記事は、それらのうち「アプリケーション移行ワークショップ」を実施した記録です。
このワークショップを通じて、AWSクラウドに移行する方法のうち、以下のものを学ぶことができます。
前回はAWS Application Migration Service(AWS MGN)を用いて移行元(ソース)のウェブサーバを移行先(ターゲット)の EC2インスタンスへリホストしました。
今回は全5回のうちの第4回として、Amazon EC2上で動作するアプリケーション(WordPress)をAmazon Elastic Container Service(Amazon ECS)で稼働するコンテナへ移行し、まとめを述べます。
マニュアル:https://application-migration-with-aws.workshop.aws/en/container-migration.html
この章ではAmazon Elastic Container Service(ECS)を使用してウェブサーバをリプラットフォームします。
登場するものは次のとおりです。
要素名 | 設定する名前 | 説明 |
---|---|---|
ECSクラスター | unicorn-cluster | 「タスク」または「サービス」の論理的なグループ |
ECSタスク定義 | unicorn-task-def | 「タスク」を構成するコンテナ群を定義。 コンテナが使用するイメージ、CPU・メモリの量、IAMロールやネットワークモードなど |
ECSサービス | unicorn-svc | 「タスク定義」に基づいて、指定した個数の「タスク」を起動し、個数を維持 |
ECSタスク | – | 「タスク定義」に基づいて起動されるコンテナ群 |
それでは作成していきます。
アプリケーションロードバランサーで使用するセキュリティグループを作成します。
下の図の赤い部分です。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
セキュリティグループ名 | LB-SG | |
説明 | Load balancer security group | |
VPC | TargetVPC | 「環境の準備」で作成したもの |
インバウンドルールにHTTPとHTTPSのルールを追加します。
パラメータ | 値 |
---|---|
タイプ | HTTP |
ソース | Anywhere-IPv4 |
パラメータ | 値 |
---|---|
タイプ | HTTP |
ソース | Anywhere-IPv6 |
パラメータ | 値 |
---|---|
タイプ | HTTPS |
ソース | Anywhere-IPv4 |
パラメータ | 値 |
---|---|
タイプ | HTTPS |
ソース | Anywhere-IPv6 |
Amazon Elastic Container ServiceのTaskで使用するセキュリティグループを作成します。
下の図の赤い部分です。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
セキュリティグループ名 | ECS-Tasks-SG | |
説明 | Allow communication between the LB and the ECS Tasks | |
VPC | TargetVPC | 「環境の準備」で作成したもの |
インバウンドルールに以下のルールを追加します。
パラメータ | 値 | 備考 |
---|---|---|
タイプ | すべてのTCP | |
ソース | LB-SG | 「ロードバランサー用セキュリティグループ作成」で作成したもの |
Amazon Elastic File Systemで使用するセキュリティグループを作成します。
下の図の赤い部分です。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
セキュリティグループ名 | EFS-SG | |
説明 | Allow communication between ECS Tasks and EFS | |
VPC | TargetVPC | 「環境の準備」で作成したもの |
インバウンドルールに以下のルールを追加します。
パラメータ | 値 | 備考 |
---|---|---|
タイプ | NFS | |
ソース | ECS-Tasks-SG | 「Elastic Container Service Task用セキュリティグループ作成」で作成したもの |
パラメータ | 値 | 備考 |
---|---|---|
タイプ | NFS | |
ソース | WEB-SG | 「ターゲットウェブサーバ用セキュリティグループ作成」で作成したもの |
Amazon Elastic Container ServiceのTaskがターゲットデータベースを参照できるようにセキュリティグループを変更します。
下の図の赤い部分です。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
タイプ | MYSQL/Aurora | |
ソース | ECS-Tasks-SG | 「Elastic Container Service Task用セキュリティグループ作成」で作成したもの |
Amazon EFSファイルシステムを作成します。
このEFSファイルシステムは、ソースサーバからコンテンツをコピーし、リプラットフォーム後のコンテナ環境で永続ストレージとして用います。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
名前 | webserver-filesystem | |
Virtual Private Cloud(VPC) | TargetVPC | 「環境の準備」で作成したもの |
可用性と耐久性 | リージョン |
作成後、webserver-filesystemの詳細画面で「ネットワーク」タブに移動し、「マウントターゲットを作成」から以下の設定値でマウントターゲットを作成します。
パラメータ | 値 | 備考 |
---|---|---|
アベイラビリティゾーン | us-west-2a | |
サブネットID | TargetVPC-private-a-web | 「環境の準備」で作成したもの |
セキュリティグループ | EFS-SG | 「Elastic File System用セキュリティグループ作成」で作成したもの |
パラメータ | 値 | 備考 |
---|---|---|
アベイラビリティゾーン | us-west-2b | |
サブネットID | TargetVPC-private-b-web | 「環境の準備」で作成したもの |
セキュリティグループ | EFS-SG | 「Elastic File System用セキュリティグループ作成」で作成したもの |
Webserverからコンテンツをコピーするため、EFSファイルシステムをマウントします。
SSH接続に用いるユーザやpemファイルは移行元(ソース)のウェブサーバと同じもの、つまり「AWS CloudFormationの出力確認」で確認した「WebServerUsername」「SSHKeyURL」の値を用います。
AWSマネジメントコンソールの「EC2 > インスタンス」へ移動し、Webserverの「パブリックIPv4 DNS」の値を確認します。
クライアントPCでSSHKeyをダウンロードし、Webserverに接続するコマンドは以下のようなイメージです。
接続コマンドのイメージ
> Invoke-WebRequest -OutFile migration_workshop.pem {{SSHKeyURLの値}} > ssh -i migration_workshop.pem -l {{WebServerUsernameの値}} {{Webserver「パブリックIPv4 DNS」の値}}
ウェブサーバで、手順の通りNFSクライアントのインストールし、マウントポイントとなるディレクトリを作成します。
$ sudo apt-get update $ sudo apt-get install nfs-common $ sudo mkdir efs
WebブラウザでAWSマネジメントコンソールにアクセスします。
ウェブサーバで、手順の通りEFSをマウントします。
$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport {{webserver-filesystemの「ファイルシステムID」}}.efs.us-west-2.amazonaws.com:/ efs
ウェブサーバで、手順の通りコンテンツをEFSへコピーします。
$ sudo cp -r /var/www/html/wp-content/* efs/
Amazon Elastic Container ServiceのTaskへデータベースの接続情報を渡すため、AWS Systems Managerパラメータストアを設定します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。パラメータを4つ作成します。
パラメータ | 値 |
---|---|
名前 | DB_HOST |
利用枠 | 標準 |
タイプ | 文字列 |
データ型 | text |
値 | (database-1のエンドポイント) |
パラメータ | 値 |
---|---|
名前 | DB_NAME |
利用枠 | 標準 |
タイプ | 文字列 |
データ型 | text |
値 | wordpress-db |
パラメータ | 値 |
---|---|
名前 | DB_USERNAME |
利用枠 | 標準 |
タイプ | 文字列 |
データ型 | text |
値 | admin |
パラメータ | 値 | 備考 |
---|---|---|
名前 | DB_PASSWORD | |
利用枠 | 標準 | |
タイプ | 安全な文字列 | |
値 | ******** | 「ターゲットデータベース作成」で設定したマスターパスワード |
コンテナがインターネット側で使用するアプリケーションロードバランサーを作成します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
ロードバランサータイプ | Application Load Balancer | 「作成」ボタンをクリック |
ロードバランサー名 | unicorn-lb | |
スキーム | インターネット向け | |
VPC | TargetVPC | 「環境の準備」で作成したもの |
マッピング | us-west-2a | サブネットは「TargetVPC-public-a」を選択 |
us-west-2b | サブネットは「TargetVPC-public-b」を選択 | |
セキュリティグループ | LB-SG | 「ロードバランサー用セキュリティグループ作成」で作成したもの |
更に、「リスナーとルーティング」セクションで「ターゲットグループの作成」を行います。
パラメータ | 値 |
---|---|
ターゲットタイプの選択 | IPアドレス |
ターゲットグループ名 | unicorn-tg |
Amazon Elastic Container Service(ECS)のクラスターを作成します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 |
---|---|
クラスターテンプレートの選択 | ネットワーキングのみ |
クラスター名 | unicorn-cluster |
CloudWatch Container Insights | Container Insightsを有効にする |
Amazon Elastic Container Service(ECS)のタスク定義を作成します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
起動タイプの互換性の選択 | Fargate | |
タスク定義名 | unicorn-task-def | |
タスクロール | ecsTaskExecutionRole | 「環境の準備」で作成したもの |
タスク実行ロール | ||
タスクメモリ(GB) | 1GB | |
タスクCPU(vCPU) | 0.5vCPU |
「ボリュームの追加」ボタンをクリックし、ボリュームを追加します。
パラメータ | 値 | 備考 |
---|---|---|
名前 | wp-content | |
ボリュームタイプ | EFS | |
ファイルシステムID | webserver-filesystem | |
転送時の暗号化 | 転送暗号化を有効化 | チェックを入れる |
「コンテナの追加」ボタンをクリックし、コンテナを追加します。
パラメータ | 値 | 備考 |
---|---|---|
コンテナ名 | unicorn-web-container | |
イメージ | wordpress:latest | WordPressのDocker Official Imageです |
メモリ制限 | ソフト制限 | |
400 | ||
ポートマッピング | 80 | |
ソースボリューム | wp-content | 先ほど「ボリュームの追加」をしたもの |
コンテナパス | /var/www/html/wp-content |
「コンテナの追加」の中で環境変数を4つ定義します。
パラメータ | 値 | 備考 |
---|---|---|
Key | WORDPRESS_DB_HOST | |
(種類) | ValueFrom | |
(Value) | DB_HOST | 「パラメータストアの設定」で設定したもの |
パラメータ | 値 | 備考 |
---|---|---|
Key | WORDPRESS_DB_NAME | |
(種類) | ValueFrom | |
(Value) | DB_NAME | 「パラメータストアの設定」で設定したもの |
パラメータ | 値 | 備考 |
---|---|---|
Key | WORDPRESS_DB_PASSWORD | |
(種類) | ValueFrom | |
(Value) | DB_PASSWORD | 「パラメータストアの設定」で設定したもの |
パラメータ | 値 | 備考 |
---|---|---|
Key | WORDPRESS_DB_USER | |
(種類) | ValueFrom | |
(Value) | DB_USERNAME | 「パラメータストアの設定」で設定したもの |
ECSクラスターにサービスを作成します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
起動タイプ | FARGATE | |
タスク定義 | unicorn-task-def | 「Amazon Elastic Container Service(ECS)タスク定義を作成」で作成したもの |
プラットフォームのバージョン | 1.4.0 | |
クラスター | unicorn-cluster | 「Amazon Elastic Container Service(ECS)クラスターを作成」で作成したもの |
サービス名 | unicorn-svc | |
タスクの数 | 2 | |
クラスターVPC | TargetVPC | 「環境の準備」で作成したもの |
サブネット | TargetVPC-private-a-web TargetVPC-private-b-web |
|
セキュリティグループ | ECS-Tasks-SG | 「Elastic Container Service Task用セキュリティグループ作成」で作成したもの。 「既存のセキュリティグループの選択」から選択 |
パブリックIPの自動割り当て | DISABLED | |
ロードバランサーの種類 | Application Load Balancer | |
ロードバランサー名 | unicorn-lb | 「ロードバランサーの作成」で作成したもの |
コンテナ名:ポート | unicorn-web-container:80:80 | 「Amazon Elastic Container Service(ECS)タスク定義を作成」で作成したもの。 選択し、「ロードバランサーに追加」ボタンをクリックする |
ターゲットグループ名 | unicorn-tg | 「ロードバランサーの作成」で作成したもの |
サービスの検出の統合の有効化 | (チェックを外す) | |
Service Auto Scaling | Service Auto Scalingの設定を変更することで、サービスの必要数を調整する | |
タスクの最小数 | 2 | |
タスクの必要数 | 2 | |
タスクの最大数 | 20 | |
Service Auto Scaling用のIAMロール | ecsAutoscaleRole | 「環境の準備」で作成したもの |
ポリシー名 | Requests-policy | |
ECSサービスメトリクス | ALBRequestCountPerTarget | |
ターゲット値 | 300 |
「ロードバランサーの作成」で作成した「unicorn-lb」の 「DNS名」 を確認します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
確認した「DNS名」 にWebブラウザでアクセスすると、ロードバランサー配下のコンテナでECサイトが動作していることを確認することができます。
AWSでは、実際に手を動かして学ぶワークショップのコンテンツが多数公開されています。
今回は、それらワークショップのコンテンツのうち、「アプリケーション移行ワークショップ」を実施しました。
手順を通じて、AWSへの移行を助けるサービスであるAWS MGN、AWS DMSや、コンテナオーケストレーションサービスであるAmazon ECSの基本的な使い方を学ぶことができました。
今回は触れませんでしたが、ワークショップには「Optimization」という章があり、ターゲット環境をAWS Well-Architectedの考え方に沿って最適化していくためのヒントが書かれています。
一通りの環境を作ってあとに読んでみると、AWS Well-Architectedの理解が深まると思います。
実際のシステム移行では、AWSの移行用サービスの操作や移行後の最適化もそうですが、AWSアカウントやランディングゾーン、移行元とAWS環境との閉域接続など、準備すべきものが数多くあります。
AWSへの移行をご検討の際には、ぜひお声かけください。
以上、「アプリケーション移行ワークショップやってみた」でした。
ここまでお読みいただきありがとうございます。
次回は、最後に片付けとしてワークショップで作成した環境の削除を行います。