AWS ECS上に構築するSpringアプリケーション(5)

【連載】

AWSで作るクラウドネイティブアプリケーションの基本

【第8回】AWS ECS上に構築するSpringアプリケーション(5)

[2019/05/01 08:00]川畑 光平 ブックマーク ブックマーク

開発ソフトウェア

前回までに、VPC環境とALB(アプリケーションロードバランサ)を構築し、ECSコンテナ上で動くパブリック・プライベートサブネット用の2種類のアプリケーションを作成した上で、Dockerコンテナイメージを作成してDockerHubレジストリにプッシュするところまで解説しました。構成イメージは以下の通りです。

開発するアプリケーションの構成イメージ

続く今回は、ECSクラスタを作成します。

ECSクラスタの作成

ECSクラスタは、パブリックサブネット/プライベートサブネット双方に作成します。EC2起動型のECSクラスタ自体は、ECSコンテナ(Dockerコンテナ)を実行するEC2インスタンスそのもので、EC2と同様、実行するマシンのスペックなどを選択して、各アベイラビリティゾーンごとにプロビジョニングします。

今回はサンプルのため、パブリック/プライベートサブネット共にクラスタは1つのアベイラビリティゾーンにのみしか配置しませんが、ALBからはターゲットグループでコンテナを指定するかたちになるので、ロードバランス上問題はありません。

まず、「Amazon ECS」サービスから、「クラスター」メニューを選択し、「クラスターの作成」ボタンを押下します。表示された「クラスターテンプレートの選択」画面で、「EC2 Linux + ネットワーキング」を選択し、「次のステップ」ボタンをクリックしてください。

「クラスターテンプレートの選択」画面

その後は、以下の要領に従って、ECSクラスタの設定を行います。

入力項目 説明
クラスター名 クラスタ名として任意の名称を入力します
プロビジョニングモデル クラスタとして実行するEC2インスタンスの種別を設定します。ここでは、オンデマンドインスタンスを設定します
EC2インスタンスタイプ クラスタとして実行するEC2インスタンスのスペックを設定します。Springアプリケーションを実行するECSコンテナあたり最低1GB程度メモリ消費するので、1クラスタに配置したいコンテナ数に合わせてインスタンスタイプを選択してください
インスタンス数 実行するクラスタのインスタンス数を指定します
EBSストレージ ECSクラスタのストレージサイズを設定します。Dockerイメージ自体で相当のデータサイズを消費することに加え、実行アプリケーションで使用するストレージサイズを踏まえ、大きめの値を設定してください
キーペア ECSクラスタへSSH接続するためのキーペアを指定します
VPC クラスタを作成するVPCを指定します
サブネット クラスタを作成するサブネットを指定します。ここでは、パブリック/プライベートのいずれかを指定してサブネット作成してください
セキュリティグループ ECSクラスタに設定するセキュリティグループを指定します。後述しますが、ロードバランサからの動的ポーティングを設定するため、ここでは新しいセキュリティグループを選択してください
コンテナインスタンスIAMロール 「ecsInstanceRole」を指定します(囲み記事「注意事項」を参照)

※ プロビジョニングモデルで、オンデマンドインスタンスを選択しても、EC2リザーブドインスタンスは有効になります。リザーブドインスタンスを適用するのであれば、対応するEC2インスタンスタイプを指定しましょう。

ECSクラスタの設定

注意事項

ecsInstanceRoleとは、AmazonEC2ContainerServiceforEC2Roleポリシーが付与されたIAMロールです。

{
  "Version": "2012-10-17",
  "Statement": [
  {
      "Effect": "Allow",
      "Action": [
          "ecs:CreateCluster",
          "ecs:DeregisterContainerInstance",
          "ecs:DiscoverPollEndpoint",
          "ecs:Poll",
          "ecs:RegisterContainerInstance",
          "ecs:StartTelemetrySession",
          "ecs:UpdateContainerInstancesState",
          "ecs:Submit*",
          "ecr:GetAuthorizationToken",
          "ecr:BatchCheckLayerAvailability",
          "ecr:GetDownloadUrlForLayer",
          "ecr:BatchGetImage",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
      ],
      "Resource": "*"
  }
  ]
}

当ポリシーをECSクラスタのIAMロールへアタッチしなければ、Dockerコンテナをサービスとして起動できなくなるため注意しましょう。

アクセス許可を追加する

次に、作成したECSクラスタのセキュリティグループ設定で、ロードバランサからの接続およびトラブルシューティング時のSSH接続のアクセス許可を追加します。特に動的ポーティングでコンテナを運用する場合、ALBからの通信でポート32768-61000を許可する必要があります。

「EC2」サービスから、「セキュリティグループ」を選択し、上記で作成したECSクラスタのセキュリティグループを選択して、インバウンドルールを変更してください。なお、ALBからの通信のソースには、ALBに設定しているセキュリティグループを指定します。

セキュリティグループ設定でアクセス許可を追加

後は、パブリック/プライベートサブネットのECSクラスタをそれぞれ作成すれば設定は完了です。

次回は、実際にECSクラスタへ配置するコンテナを定義するために、ECSタスク定義を行います。

著者紹介


川畑 光平(KAWABATA Kohei)

某システムインテグレータにて、金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professionalなどの資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。

本連載の内容に対するご意見・ご質問は Facebook まで。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
ソフトウェア開発自動化入門
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る