目的
AWSのデータ処理の便利サービスを使って、Open Street Mapの全地球のデータを処理したい。そのためには、まず全球データをダウンロードしなきゃいけない。
でも、いったん自分のローカルPCに落としてそこからS3にあげると、ネットワーク帯域を余計に使うよね。
なるべくダイレクトにS3に持っていけない?
Planet OSM
Planet OSM
Open Street Mapのすべてのデータをひとまとめにしたもの。要は、全球データ。PBFというバイナリフォーマットで、48GB(2019年12月3日現在)ある。現代ではビッグデータというほど大きくないかもしれないが、やはり扱うのが大変なレベルのデータ量。
(むしろ、地球全体のデータを ”たった” 50GBに収められるの?という感想もある)
地球全体のデータを作り、世界のどこでもサービスを提供するためには、避けては通れないデータ。
方法
AWSアカウントがあるのは前提。まず、Amazon LinuxのEC2インスタンスを立ち上げる。ここで、EC2のディスクにいったんダウンロードして、そこからさらにS3にアップロードするのはしたくないので、EC2は適当な小規模なインスタンスで、ディスクも極小にしておく。
インスタンスにログインして、aptなどでcurlとaws-cliが使えるようにして、おもむろに以下のコマンドをたたき、OSM全球データを落としてきたのを、そのままパイプでS3のバケットに投入する。
ダウンロード元のURLは適宜確認すること。自分に近いミラーを使うと早いが、オリジンは可能な限り避けた方がいいと思う。アップする先のバケット名やファイル名も、適宜自分の用途に従い変更する。また、バケットの権限やセキュリティの設定も適宜行うこと。
curl https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf | aws s3 cp - s3://osm-planet-data/planet-latest.osm.pbf
しばらく(自分でやったときは、数時間のオーダー待った)待てば終わるはず。
これでEC2のディスクを汚さずに直接S3に放り込むことができる。
終わったらインスタンスは消してしまおう。
更新されるごとにこれやるのもきついので、差分データをうまく使うことを考えたい。
それだけ?
今日はこれだけ。