デザインパターンを踏襲した決済機能の開発

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 をインストール

まずはECSに対してローカル環境をpushできるようにするため、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を起動します。

Docker Desktop for Windowsを起動し、下記コマンドでコンテナを立ち上げます。


docker-compose up -d

立ち上がったらdocker psを実行し、各イメージコンテナが正しく立ち上がっているか確認します。

問題ないようであればブラウザを開き、http://localhost:8080を入力してLaravelのスタート画面が表示されていることを確認します。

「localhost:80」をブラウザで開き、”Hello World” が表示されているか確認。

1-7. Amazon ECSの設定⑤ECSリポジトリに Push

いよいよECSの設定をしていきます。

まずリポジトリの作成を実施します。

今回は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. 最後に

ここまででデプロイの設定はできましたので、次回はソースを更新し、デプロイを実行してみるところまで実施しようと思います。