デザインパターンを踏襲した決済機能の開発
Docker環境を取り扱うためのAWS環境のセットアップ手順と、AWS環境へのデプロイを実施し、その構成の学習を目的とします。
最終目標としてDocker環境をサーバにデプロイし、本運用を見越したDocker環境でのリリースを実施します。
■環境
・Windows 10
・VSC version 1.83.1
・Docker Desktop
・AWS
1. Amazon ECS
今回はAmazon ECSを使用してDocker環境をEC2にデプロイを実施してみます。
ECSに関しては今回初めて使用するため、改めてECSについて調べてみました。
1-1. そもそもAmazon ECSとは
そもそもAmazon ECSとは、Amazon Elastic Container Serviceの略で、コンテナ化されたアプリケーションを簡単にデプロイ、管理、スケーリングできる、完全マネージド型のコンテナオーケストレーションサービスのこと。
引用:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html
このコンテナを管理するサービスのことを、オーケストレーターといいます。
オーケストレーターでコンテナ管理すること、そのものはオーケストレーションといいます。
要するにAmazon ECSを使うことにより、アプリケーションのデプロイの管理が簡易化できるということ。
1-2. デプロイタイプ
ECSのデプロイタイプについて、ECSのデプロイ方法は3つあります。
・ローリングアップデート
・Blue/Greenデプロイ
・外部デプロイ
の3つが存在します。
今回はローリングアップデートを実施してみます。
ローリングアップデートはデプロイ中に進行度に応じて環境が混線してしまうため、デプロイ中は意図せぬ動作をする恐れがあるため、メンテナンス画面が必須になり、要件によってはベストプラクティスに足りえないのですが、今回はデプロイの試験運用のため、コストが低いこちらを使用していきます。
1-3. Amazon ECSの設定①AWS CLI をインストール
$ sudo apt install awscli
$ aws --version
1-4. Amazon ECSの設定②IAMユーザーを作成
次にデプロイ用のIAMユーザーを作成します。
AWS のコンソールから IAM サービスにアクセスし、名前はdeploy-userとして、ユーザーを作成します。
今回はアクセスキーを使用してAWS CLIを利用するため、Identity Centerでユーザーを作成するのではなく、IAMユーザーを作成します。
つぎにポリシーをアタッチします。
このポリシーはAmazonECRへのアクセスを許可するものです。
既存のポリシーをアタッチから以下のポリシーの項目を付与します。
・AmazonEC2ContainerServiceRole
・AmazonEC2ContainerRegistryFullAccess
ユーザーの作成が完了すると、ユーザーのアクセスキーやパスワードなどの情報が記載されたcsvをダウンロードできるので、そちらをダウンロードしておきます。
1-5. Amazon ECSの設定③アクセスキー設定
以前はユーザーを作成した際に自動でアクセスキーが割り当てられていたのですが、仕様が新しくなり、手動でアクセスキーを発行しないとcsvにアクセスキーが記載されないようです。
IAMユーザーからアクセスキーの発行を選択し、ユースケースをコマンドラインインターフェイス (CLI)(このアクセスキーを使用して、AWS CLI から AWS アカウントへのアクセスを有効化しようとしています。)を選択してアクセスキーを発行します。
アクセスキーを発行するとcsvがダウンロードできますので、そちらを元に先ほどのIAMユーザーのcsvと照らし合わせてAWS CLIからユーザーの設定を行います。
$ aws configure
$ sAWS Access Key ID [None]: {取得したアクセスキーID を入力}
$ AWS Secret Access Key [None]: {取得したシークレットアクセスキーIDを入力}
$ Default region name [None]: ap-northeast-1
$ Default output format [None]: json
この状態でIAMユーザーの確認を実施します。
$ aws configure list
こちらで先ほど登録した結果が表示されているようであればOKです。
1-6. Amazon ECSの設定④Dockerを起動
Docker Desktop for Windowsを起動し、下記コマンドでコンテナを立ち上げます。
docker-compose up -d
立ち上がったらdocker psを実行し、各イメージコンテナが正しく立ち上がっているか確認します。
問題ないようであればブラウザを開き、http://localhost:8080を入力してLaravelのスタート画面が表示されていることを確認します。
「localhost:80」をブラウザで開き、”Hello World” が表示されているか確認。
1-7. Amazon ECSの設定⑤ECSリポジトリに Push
まずリポジトリの作成を実施します。
今回はIAMによるアクセスなので、公開範囲はプライベートとし、リポジトリ名は docker-deploy-test としました。
次にリポジトリにローカル環境をpushできるように設定します。
プッシュコマンドの表示から、今回はWSLを使用しているのでmacOS/LinuxでOKです。
1-8. Amazon ECSの設定⑥タスク定義の設定
リポジトリを作成するとECR用のコンソールに遷移させられているので、ECSのコンソールに戻ってからサイドバーのタスク定義を選択します。
タスク定義名をdocker-deploy-testとし、コンテナ名も同様とします。
イメージのURIは先ほど作成したECRのURIをコピーして貼り付けます。
ポート名、 コンテナポートは自動で入力されるので、そのほかの項目は任意に設定し、タスクを作成します。
1-9. Amazon ECSの設定⑦クラスターの設定
最後にクラスターの設定をします。
設定としては名前はすべてdocker-deploy-testとして、AutoScalingGroupは新規で作成し、VPCやセキュリティグループ、サブネットやキーペアなどは前回作成したものを使用します。
2. 最後に
ここまででデプロイの設定はできましたので、次回はソースを更新し、デプロイを実行してみるところまで実施しようと思います。