LambdaとBBOX Serverを使って手軽に地物用のAPIを構築してみた件 #AWS - Qiita

はじめに

image.png

BBOX Serverオープンソースのコンポーザブルな空間情報サービスであり、OGC API規格に準拠したFeature、Map、Tile、Asset、Processes、Routingなど、複数のコンポーネントを提供します。高性能なHTTPサーバーを内蔵しているため、静的および動的な位置情報データを効率的に処理できます。また、従来構築に手間がかかっていたQGIS Serverが、簡単に利用できる形で実装されています。データソースはさまざまなフォーマットに対応し、PostgreSQL(PostGIS)の利用も可能です。

https://zenn.dev/mierune/articles/try-116-bbox-server より引用)

BBOX Serverを使用することで、PostGISをデータソースにしたAPIを構築したり、MBTilesのような静的タイルファイルを提供するAPIを簡単に作成できます。特に、Docker環境で簡単に実行できるため、クラウド環境でのデプロイメントが非常に容易です。

本記事では、BBOX Serverを使用して、AWS Lambdaのサーバーレス環境でPostGISから地物データを配信するAPIを構築する方法を紹介します。

BBOX Serverの特徴

BBOX Serverの特徴的な機能をいくつか紹介します。

コンポーザブルなサービス
BBOX Serverは、OGC APIの規格に準拠し、Feature、Map、Tile、Asset、Processes、Routingなどの異なるコンポーネントを提供します。

静的・動的データ処理
高性能なHTTPサーバーを内蔵しており、静的なMBTilesや動的なPostGISなど、異なる形式の地理データを効率的に処理できます。

簡単なデプロイ
Docker環境で動作するため、コンテナ化されたBBOX ServerをAWSや他のクラウド環境に簡単にデプロイできます。

PostGISサポート
PostGISをデータソースにした地物データの検索やタイル配信が簡単に行えます。

API構築の流れ

1. BBOX Serverの設定

APIを構築するには、まずbbox.tomlという設定ファイルを準備します。このファイルでPostGISなどのデータソースを設定し、APIの動作をカスタマイズします。

例えば、以下の設定ではsaunadbというPostGISのテーブルをデータソースとして使用するAPIを作成します。

[webserver]
server_addr="0.0.0.0:8080"
loglevel="Debug"

[[datasource]]
name="saunadb"
[datasource.postgis]
url="postgresql://username:password@database-endpoint.ap-northeast-1.rds.amazonaws.com:5432/database"

[[collection]]
name="sauna"
title="saunaapi"
description="Sauna API For MIERUNE CTO"
[collection.postgis]
datasource="saunadb"
table_name="sauna_location"
geometry_field="geom"
fid_field="id"
queryable_fields=["name","address"]

この設定では、sauna_locationというテーブルからgeomフィールド(座標情報)を使って地物を取得できるAPIを提供します。

2. Lambdaでのデプロイ

BBOX ServerはDockerで実行できるため、AWS Lambdaでもコンテナとして実行できます。LambdaでAPIを動作させるためには、AWS Lambda Adapterをコンテナ内に組み込む必要があります。以下のようなDockerfileを作成し、ECRにプッシュしてLambdaで実行します。

FROM sourcepole/bbox-server-qgis:latest

COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 /lambda-adapter /opt/extensions/lambda-adapter
ENV READINESS_CHECK_PATH=/

COPY ./bbox.toml /var/www/bbox.toml

これにより、AWS Lambdaがコンテナを実行するために必要な設定が整います。

APIの利用方法

LambdaにデプロイしたAPIは、指定されたURLを使って利用することができます。例えば、地物情報を取得するために以下のようなURLにリクエストを送ります。

/collections/sauna/items: saunaコレクション内の全ての地物を取得

/collections/sauna/items?bbox=…&limit=2: 指定した範囲(bbox)内で2件の地物を取得

リクエスト例:

GET https://your-lambda-url.lambda-url.ap-northeast-1.on.aws/collections/sauna/items?bbox=139.75657574846093,35.676942841919384,139.76762426699804,35.6859571545813&limit=2

ここで、bboxは検索範囲、limitは取得する地物の数を指定するパラメータです。

結論

BBOX Serverは、そのコンテナ化された設計により、非常に簡単にサーバーレスでの空間情報APIの構築を可能にします。PostGISなどのデータソースを活用し、AWS Lambda環境でのデプロイが容易で、エンジニアが効率的にAPIを提供できる点が大きな魅力です。今後、さらに開発が進むことで、複雑なクエリの対応や他の機能が強化されることが期待されると思われます



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link