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

【連載】

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

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

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

開発ソフトウェア

本連載では、以下のイメージ構成に沿ってアプリケーション開発を進めています。

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

前回は、コンテナを実行するためのECSクラスタを作成し、ECSコンテナの定義まで完了しました。今回はいよいよ、ECSサービスを実行します。

ECSサービスの実行

ECSタスクの定義と同様、ネットワークインタフェースをコンテナにアタッチするなどのサービス実行に必要な権限を持つロールが必要になります。前回、ECSタスクを定義する際に行ったIAMロール作成と同様の手順で、「AmazonECSServiceRolePolicy」をアタッチしたIAMロールを作成しておいてください。

なお、ECSを初めて起動する場合、ロールは以降の手順を実施していくなかで「AWSServiceRoleForECS」という名前で自動作成されます。

さて、ECSサービスの実行では、ECSクラスタ上にコンテナを起動します。「ECS」サービスのメニューから「クラスター」を選択し、コンテナを実行するクラスタを選択します。

「クラスター」画面でコンテナを実行するクラスタを選択する

続いて、「サービス」タブにある「作成」ボタンを押下します。

「サービス」タブにある「作成」ボタンを押下する

ここで以下の要領に従って、ECSサービス定義の設定を行います。

入力項目 説明
起動タイプ FargateかEC2起動型か選択します。ここでは、EC2起動型を選択します
タスク定義 サービスとして実行するタスク定義を設定します。ここでは、前回設定したタスク定義を選択します
クラスタ サービスをLaunchするクラスタを選択します。パブリック/プライベートに対応するクラスタを選択します
サービス名 サービスの名前として設定する任意の名称を入力します
サービスタイプ サービスタイプを選択します。REPLICAは、クラスタ全体でタスクの数として指定した数のコンテナを実行するオプションで、DAEMONはECSクラスタのインスタンスの増減に合わせて実行コンテナを増減させるオプションです。クラスタインスタンス1台ごとに1つの実行コンテナを維持します。詳細は、「サービススケジューラの概念」を参照してください
タスクの数 クラスタで実行するコンテナ数を設定します
最小ヘルス率 コンテナの最小実行数の割合を設定します
最大率 コンテナの最大実行数の割合を設定します
デプロイメントタイプ コンテナをアップデートする場合の戦略を選択します。ローリングアップデートするかAWS CodeDeployを使用したブルーグリーンデプロイメントを選択できます。詳細は「Amazon ECS デプロイタイプ」を参照してください
配置テンプレート コンテナを配置する戦略を選択します。詳細は「Amazon ECSタスク配置戦略」を参照してください
ヘルスチェックの猶予時間 ECSコンテナを起動してからのヘルスチェックの猶予時間を設定します。Springアプリケーションを起動するのに数秒~数十秒を要するので、その辺りを考慮した値を設定しましょう
ELBタイプ ECSコンテナに処理を分散させるロードバランサーを指定します。ここではALBを指定してください
サービス用IAMロールの選択 ECSサービス実行用のロールを設定してください。前述した通り、初回ECSを起動する場合は、「新しくロールを作成する」を選択すると、「AWSServiceRoleForECS」が作成されます。なお、詳細は「Amazon ECSのサービスにリンクされたロールの使用」を参考にしてください
ELB名 第5回で作成したALBを選択します。コンテナアプリケーションに合わせて、パブリック/プライベート各々サブネットと対応したALBを選択してください
リスナーポート ALB作成時に設定していたポートが選択されます
リスナープロトコル ALBを作成時に設定していたプロトコルが選択されます
ターゲットグループ名 ALBに設定されているターゲットグループを選択します。複数サービスがある場合はここでターゲットグループをコンテナに関連づけることになります
ターゲットグループのプロトコル ALBを作成時に設定していたプロトコルが選択されます
パスパターン 選択したターゲットグループにより自動指定されます
ヘルスチェックパス 選択したターゲットグループにより自動設定されます
サービス検出統合の有効化 2018年9月に東京リージョンで追加されたRoute53を使ったサービス検出/ディスカバリー機能を有効化するオプションです。詳細は「オプションサービス検出を使用するようにサービスを設定する」に記述がありますが、今回はALBのパスルーティングを使用して、コンテナを識別/負荷分散するので、設定をオフにしてください
ServiceAutoScaling AutoScaling機能を有効化する場合、オプションを設定します

サービスの設定(起動タイプ~ELB名)

サービスの設定(リスナーポート~ServiceAutoScaling)

入力項目を確認し、「サービスの作成」ボタンを押下します。

入力した項目を確認したら、「サービスの作成」ボタンを押下する

同様にプライベートサブネットのアプリケーションコンテナもサービスを実行します。パブリックサブネットのALBのDNSに以下のBFFアプリケーションのパスを加え、アプリケーションが正しく実行されるか確認します(URL中、「xxxxxx」の部分は自身の環境のALBのDNS名に合わせてアクセスしてください)。

●BFFアプリケーションのURL
http://xxxxxxxx.ap-northeast-1.elb.amazonaws.com/backend-for-frontend/index.html

アプリケーションが正しく実行されることを確認

なお、ECS起動タイプ型であれば、正しくコンテナが実行されない場合、ECSクラスタにSSHログインし、「docker ps -a」を実行することでコンテナの実行を確認できます。また、コンテナ実行時のログは/var/log/ecs/ecs-agent.log_XXXXで確認できます。トラブルシューティングはこうしたログを参照してください。

まとめ

第4回から7回にわたり、AWS ECS上でSpringアプリケーションを構築する方法を説明してきました。ネットワーク構成やロードバランサ、コンテナの定義など、さまざまなことを考慮する必要はありますが、AWS ECSを使うことで、クラウド環境でセキュリティを保ちつつ、可用性の高いアプリケーションを構築できることがおわかりいただけたのではないでしょうか。

また、第6回で説明したように、Springアプリケーションを実装して別のECSコンテナアプリケーションを直接呼び出すのではなく、ALBのパスベースのルーティング機能を使い、サービスを呼び出す構成にしておけば、以下のようなメリットを享受することができます。

  • 呼び出したいアプリケーションのコンテナのIPやポートを意識しなくて済む
  • ヘルスチェックによるコンテナアプリケーション監視が行える
  • コンテナのオートリカバリを実現できる(ヘルスチェックでNGだとコンテナが再起動する)
  • 複数のコンテナが実行されていた場合に処理を分散できる
  • CloudWatchによるリソース監視ができる

こうした構成は、エンタープライズアプリケーションをクラウドネイティブ化する場合に十分有用なアーキテクチャです。

著者紹介


川畑 光平(KAWABATA Kohei)

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

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

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

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

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

ZOZOTOWNを支える

ZOZOTOWNを支える"縁の下"のシステム開発

6月13日~15日に開催された「Interop Tokyo」。その基調講演には、アパレルECサイト「ZOZOTOWN」の開発/運用を担う、スタートトゥデイテクノロジーズの取締役 大蔵峰樹氏が登壇し、ZOZOTOWNの開発の歴史やシステム構成、組織づくりなど、これまで表に出なかったエンジニアリングの"舞台裏"を明かした。

関連リンク

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

会員登録(無料)

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

一覧はこちら

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

一覧はこちら

ページの先頭に戻る