Amazon Web Services ブログ

閉域網での利用を前提としたCDKのサンプルテンプレートを公開しました

こんにちは、公共部門でプロトタイプSAをしている鈴木です。
デジタル庁が整備するガバメントクラウドではAWSが採択されており、中央省庁や地方自治体等でAWSをご利用いただくお客さまが増えてきました。
このブログではこれからAWSを利用し始めるお客さまやアプリケーションのモダナイズをご検討されているお客さま向けに開発した、閉域網での利用を前提としたサンプルテンプレートについてご紹介します。

サンプルテンプレート開発背景

公共部門に限った特性ではありませんが、「閉域網の中にシステムを構築する」や「オンプレとの通信が発生する」という特性は、公共部門のお客さまからもよくお聞きします。
しかし、AWSのサンプルには、閉域網を前提としたサンプルが多くなく、インターネット接続を前提にしたものが多いです。

そのため、これからAWSをご利用したい、といった場合に、閉域網ではどういった構成、サービスを利用すればいいんだろう?と悩むことが多いのではないでしょうか。

特に、クラウドのメリットを最大限得るために、Amazon Elastic Compute Cloud (Amazon EC2)の利用ではなく、「マネージドサービスの活用」、「アプリケーションのコンテナ/サーバーレス化」、「Infrastructure as Code(IaC)やCI/CDパイプラインによる開発効率化」などの要素を、どのように自分たちのシステムに適用していこうかと、検討されているのではないでしょうか。

サンプルテンプレートのご紹介

さて、こうした悩みを持つ、AWS上でのWebアプリの開発・移行を検討をされている公共部門や開発企業のお客さまに、クラウドのメリットを活かせる構成で、素早く、より良いシステム・アプリケーション開発に注力していただくべく、AWS Cloud Development Kit (AWS CDK)でサンプルテンプレートを開発しました。

Template for Closed Network System Workloads on AWS

このサンプルテンプレートに含まれる要素は、大きく分けて以下の4つになります。

  1. コンテナ化されたアプリケーションを実行するための環境+Spring Boot製のサンプルアプリケーション
  2. 1のアプリケーションでCI/CDを行うためのパイプライン
  3. スケジュール実行可能なバッチ環境+Python製のサンプルスクリプト
  4. DBやWebアプリの一時的な管理を行うためのBastion(踏み台サーバー)

サンプルテンプレートのアーキテクチャ

簡単にそれぞれの要素についてご紹介します。利用しているサービスについて参考になるURLも併せて表記しています。
サービスについて気になる方は、そちらをご確認ください。

1. コンテナ化されたアプリケーションを実行するための環境+Spring Boot製のサンプルアプリケーション

既存Webアプリケーションをモダナイズする方法として、今回はコンテナ化を取り上げました。
サーバーレス化に比べ、改修量も抑えられるため、オンプレミスのサーバーやVM上で稼働しているアプリケーションが移行しやすいのではと考えました。
また、環境にデプロイされるサンプルアプリケーションとしてSpring Bootを利用したWebアプリも含まれています。
こちらも併せてご確認いただき、コンテナ化にお役立てください。

コンテナを実行する環境には、Amazon Elastic Container Service(Amazon ECS)とAWS Fargateの構成を選択しています。
コンテナの運用経験が少ないのであれば、Amazon ECSとAWS Fargateの構成は管理コストが抑えられるため、より開発に注力できると考えたためです。

参考:[AWS Black Belt Online Seminar]ECSでのFargate入門

2. 1のアプリケーションでCI/CDを行うためのパイプライン

開発を安全に、効率的に行うためにはCI/CDの導入は不可欠です。
ここでは、AWSのパイプラインを構築するためのサービスである、Codeシリーズを活用し、Javaのソースコードからコンテナイメージをビルドし、実行環境へデプロイするところまでを一通り実装しています。

DockerfileとJavaのソースコードが既にお手元にあれば、サンプルテンプレートの環境が構築された後、環境情報をソースに反映いただき、AWS CodeCommitへプッシュいただくことで、アプリケーションをAmazon ECS+ AWS Fargateの環境へデプロイすることが可能です。

参考:[AWS Black Belt Online Seminar]AWS CodeStar & AWS CodePipeline – 構成例: Amazon ECS での CI/CD パイプライン

3.スケジューリング可能なバッチ処理の実行環境+Python製のサンプルスクリプト

次にバッチ処理の実行環境についてです。

システムにはバッチ処理が付随することが多いため、こちらもAWS上で動かせるようにしています。
今回はAWS Step Functions (Step Functions)を利用し、バッチ実行に最低限必要な、「再実行機能」や「スケジュール実行機能」、「失敗時の通知機能」を実装しています(ワークフローはStep Functionsの標準機能で提供されています)。
サンプルWebアプリで操作した内容を踏まえ、バッチ処理の内容が変更されるようにサンプルスクリプトを組んでいますので、ぜひジョブフローをお試しください。

参考:[AWS Black Belt Online Seminar] AWS Step Functions

4.DBやWebアプリの一時的な管理を行うためのBastion(踏み台サーバー)

システムの運用には、DBの操作やWebアプリの動作確認を行う環境が必要です。閉域網でかつセキュアに接続するために、AWS Systems Manager (Systems Manager)の機能であるFleet ManagerやSession Managerを活用したRDP接続やターミナル接続を用意しました。
AWSのマネジメントコンソールへアクセスできることがBastionへアクセスするための前提条件になりますので、開発者・運用者の方々のアクセス許可の管理もしやすいかと思います。

参考:[AWS Black Belt Online Seminar] AWS Systems Manager – SSM セッションマネージャー

これら4つの要素でマネジメントサービスの活用や、コンテナ化・CI/CDの導入が実現できていることに加え、前述の通りCDKで実装されているため、IaCの導入にもチャレンジが可能です。
そのため、スマートなクラウド利用が進めやすいのではないでしょうか。

また、上記の要素ですが、デジタル庁が公開しているアーキテクチャのサンプルと比較すると、コンテナの利用やCI/CDの適用、マネージドサービスの活用といった部分に関して、カバーできていることがわかると思います。
(デジタル庁が公開しているサンプルはWebAPI向けであり、今回のサンプルテンプレートとは用途が異なるため、コンポーネントを一部変換して比較しています。)

アーキテクチャのサンプルのコンポーネントをサンプルテンプレートへマッピングした図

サンプルテンプレートでカバーしていない、ログ管理やアラート、セキュリティ系のコンポーネントについてどのように実装すべきか、興味をお持ちの方もいらっしゃるかと思います。
こちらは、Baseline Environment on AWS (BLEA)でサンプル実装を提供しておりますので、そちらも合わせてご確認いただくことをお勧めします。
BLEAはガバメントクラウドのテンプレートの元になっているため、ガバメントクラウド上で開発を考えているお客さまも、ぜひご覧ください。

※BLEAの利用開始方法の詳細は、GithubのREADME_ja.mdをご覧ください。

また、オンプレミス環境と接続するためのネットワーク設計については、サンプルテンプレートでは対象外となっております。
オンプレミス環境から接続する際には、AWS Direct ConnectやAWS Site-to-Site VPNといったサービスの利用が必要になりますので、ご注意ください。

おわりに

今回は閉域網でのAWSの利用を前提とした、Webアプリケーションのためのサンプルテンプレートをご紹介しました。
あくまでサンプルテンプレートであるため、利用される方自身で追加・変更していただく部分はあるものの、一からモダナイズに取り組むよりも効率的に進めていけるかと思います。
これからモダナイズにチャレンジしていきたい、という方はぜひこちらのサンプルテンプレートをご活用ください。

改めてのご案内となりますが、本サンプルテンプレートの利用開始方法の詳細は、GitHubのREADME_ja.mdをご覧ください。
また、このテンプレートへのフィードバックをお待ちしています。GitHub に Issuesを投稿する、あるいは AWS の担当 SA へご連絡ください。

ソリューションアーキテクト 鈴木