システム間連携(AWS編)
2023/03/06 公開
本書は1つのPJMOの管理範囲内にあるシステム間および複数のPJMOが管理するシステム間のモダン化された連携の方法について説明した文書である。
システム間連携のモダン化
クラウド・ネイティブ化が進む中で、複数のシステムを連携し、迅速に業務処理を遂行することが求められるケースが少なくない。そこで、データ/処理/アプリケーションの連携を考慮しつつシステムの統合や連携を図る必要性がある。システム間連携を行うことで業務スピードの向上、業務正確性の向上、データ統合による全容の可視化、データ管理のコストの削減といったメリットを期待できる。従来の基本的なシステム連携のパターンとしては、ファイル転送、ディスク共有、データベース共有、PRCやWebサービスなどのアプリケーション連携、メッセージングなどであるが、これらの連携方法のアーキテクチャは互いのシステムの依存関係が強く密結合しているケースが多く、1つのシステムの障害や変更の影響が全体に及びやすい。そのため比較的規模の小さいシステム間の連携の際に活用することを推奨する。一方でガバメントクラウドにおいてはモダン化の観点からAPI連携の使用を推奨する。
APIとは
APIとはソフトウェア同士がシステムのプログラムを共有するためのインターフェイスのことである。1つのシステムで構築したプログラムを他のシステムの機能として活用したい場合、通常1から他のシステム上でプログラムの開発を行う必要がある。しかしAPI化をすることでプログラムを1から構築しなくとも、データベースを同じ状態で利用することができる。仕組みとしては、APIの提供側がシステムの公開範囲を決めて公開したAPIに利用側がアクセスすることで、利用側はプログラムの開発を行わずとも提供側のシステムを活用できるようになる、というものである。
API化を行うとそれぞれのシステムがAPIを介してデータのやり取りを行う疎結合なアーキテクチャとなるため、互いのシステムに影響を与えずに各システムが独立して機能拡張や機能入れ替えを行える。APIを用いたシステム間連携はHTTP/HTTPS通信によってやり取りをするため、端末やプログラム言語を問わず、異なるアプリケーション間でも通信が可能である。
- APIの概要については以下を参照すること。
[政府CIOポータル:API導入実線ガイドブック]
https://cio.go.jp/sites/default/files/uploads/documents/1019_api_guidebook.pdfOpens in new tab
[AWS:API とは]
https://aws.amazon.com/jp/what-is/api/Opens in new tab
API連携の方法
ガバメントクラウドおけるAPI連携の方法として、ガバメントクラウドのシステムにAPIを構築することで、GSSとAWSのネットワークに接続された1つのPJMOまたはガバメントクラウドを利用するシステムの開発・運用事業者の管理範囲内にあるシステムからのアクセスを許可する方法や、GSSとAWSのネットワーク内に接続されているが異なるPJMOまたはガバメントクラウドを利用するシステムの開発・運用事業者の管理範囲にあるシステムからのアクセスを許可する方法、およびWeb上でAPIを公開することでガバメントクラウドの外部からでもAPIにアクセスできるようにし、認証/認可をした不特定多数のシステムからのアクセスを許可する方法などがある。
以下で上記で述べたそれぞれのAPI連携時のアーキテクチャと、API連携の際に活用できるAWSサービスであるAmazon API Gatewayの概要、および認証/認可の方法について示す。
※API連携をする上で必要となるネットワーク接続の詳細については、GCASアカウントを取得の上、GCASガイド(メンバー専用ページ)で公開されているドキュメントを参照すること。
1つのPJMOが管理するシステム間の連携
1つのPJMOが管理する範囲内でのシステム間連携における2パターンのAPI連携について示す。1つ目はガバメントクラウドで構築したシステムにプライベートなAPIを実装して、GSSとAWSのネットワークに接続された1つのPJMOまたはシステムの開発・運用事業者の管理範囲内にあるシステムからのアクセスのみを許可するパターンである。APIの存在は公にすることなく、閉鎖された環境内の特定のシステム間のみでAPI連携を許可したい場合にこの方法の使用を推奨する。
2つ目はガバメントクラウドで構築したシステムにWeb APIを実装して、同一のPJMO内のシステムであればインターネット上からのアクセスを許可することによってシステム間連携を可能にするパターンである。この方法は自ら構築したAPIを、アプリケーションやその他Webサービスなどの開発に活用したい場合での使用を推奨する。
図:01 1つのPJMOが管理するシステム間連携のアーキテクチャ
複数のPJMOが管理するシステム間の連携
複数の異なるPJMOが管理するシステム間の連携における2パターンのAPI連携について示す。1つ目はガバメントクラウドで構築したシステムにプライベートなAPIを実装して、同一のPJMOの管理範囲内のみからのアクセスだけではなく、複数の異なるPJMOまたはシステムの開発・運用事業者の管理範囲にあるシステムからのアクセスを許可するパターンである。APIの存在を公にすることはないが、PJMOを跨いだ府省間などのシステムの連携を行いたい場合にこの方法の使用を推奨する。
2つ目はガバメントクラウドで構築したシステムにWeb APIを実装して、不特定多数のシステムのインターネット上からのアクセスを許可することによってシステム間連携を可能にするパターンである。このようなWeb APIを活用してガバメントクラウドで構築したシステムや機能をネットワーク越しに公開することで、他の府省や自治体だけでなく民間企業のシステムなどにもAPIの提供が可能になる。
図:02 複数のPJMOが管理するシステム間連携のアーキテクチャ
API連携で活用できるAWSサービス
API化をする際の課題として、可用性やスケーラビリティなどを意識したインフラ管理の手間、APIの設定やデプロイの制御管理、アクセスの認証や認可の管理、スロットリング制御、情報保護のためのセキュリティ管理などがある。AWSのAPI管理ツールであるAmazon API Gatewayを使用すると、これらの管理や実行を容易にする。
- Amazon API Gateway
AWSのAPI管理ツールであるAmazon API Gatewayは、APIの作成、公開、保守、モニタリング、保護を行えるフルマネージドサービスである。Amazon API Gatewayを使用すると、最大数十万の同時APIの呼び出しを受け付け、AWSサービスで稼働中のアプリケーションやコード、および任意のウェブアプリケーションにアクセスすることができる。また、AWSのコンピューティングサービスであるAWS Lambdaと併せて活用することで、サーバーレスなシステムの構築ができる。Amazon API Gatewayを使用すると、AWSのローカルネットワーク内からのアクセスを許可または拒否できるプライベートAPIと、Web上に公開することで不特定多数の誰もがアクセスできるパブリックAPIの両方を構築できる。
主なユースケースとしては、インターネットからアクセス可能なWeb API基盤の提供、プライベートネットワーク内でのWeb APIの基盤の提供、AWSサービスを独自のWeb API化する手段、サーバーレスアーキテクチャを実現する際の手段などが挙げられる。- Amazon API Gatewayの概要については以下を参照すること。
[AWSドキュメント:Amazon API Gateway とは何ですか?]
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/welcome.htmlOpens in new tab
- Amazon API Gatewayの概要については以下を参照すること。
- AWSサービスを用いた認証/認可の方法
Amazon API Gatewayで構築したプライベートAPIを用いてアクセスの制限を行いたい場合には、IAMリソースポリシーを作成してインターフェイスVPCエンドポイントに付与することで、VPCを経由したプライベートなアクセスのみを許可することができる。このリソースポリシーをAPIに適用することでどのシステムにどのAPIを提供し、それをどう使うか、他のAWSアカウントからのアクセス等をAPIの提供側が制御することができる。
Amazon API Gatewayで構築したパブリックAPIはデフォルトではフルオープンで誰でもアクセスが可能である。Web上に公開されたパブリックAPIへの不特定多数のシステムからのアクセスの制限を行いたい場合には、IAMポリシー、リソースポリシー、AWS Signature Version 4、Lambdaオーソライザー、Amazon CognitoなどのAWSサービスやメカニズムを活用することでIPアドレスからのリクエストやCIDRブロックからのリクエストを制御したり、アクセスの認証/認可を要求するAPIメソッドを設定することができる。また、AWS WAFを使用して一般的なWebの脆弱性から保護することでセキュリティの強化ができる。- Amazon API GatewayでのREST APIへのアクセスの制御と管理の方法については以下を参照すること。
[AWSドキュメント:API GatewayでのREST APIへのアクセスの制御と管理]
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-control-access-to-api.htmlOpens in new tab - Amazon API GatewayでのHTTP APIへのアクセスの制御と管理の方法については以下を参照すること。
[AWSドキュメント:API GatewayでのHTTP APIへのアクセスの制御と管理]
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/http-api-access-control.htmlOpens in new tab - Amazon API GatewayでのWebSocket APIへのアクセスの制御と管理の方法については以下を参照すること。
[AWSドキュメント:API GatewayでのWebSocket APIへのアクセスの制御と管理]
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-websocket-api-control-access.htmlOpens in new tab
- Amazon API GatewayでのREST APIへのアクセスの制御と管理の方法については以下を参照すること。
改訂履歴
| 改訂年月日 | 改訂理由 |
|---|---|
| 2023年03月06日 | 新規作成 |
| 2023年11月27日 | API連携の方法について、ドキュメントの参照の記載を修正。その他、図中のhttpの記載を修正。 |