5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS】初めてサーバーレスWebAPIを作った話

Posted at

始まり

以前、4年ほど勤めていた会社では、Windows向けのスタンドアローンアプリケーションしか開発したことがありませんでした。
退職後、Pythonを使った機械学習の勉強を始め、作成したプログラムをどう生かすか考えた時に、行きついた先がWebAPIでした。
とは言え、WebAPIを作ることに関してほとんど知識がなく(WebAPIという言葉すら知らなかったくらいです)、下のようなサービスを作りたいなぁ...くらいの構想からスタートしました。
Untitled Diagram Base.png
図を見たらわかりますが、技術も言葉もほぼ知らない、右も左もわからない状態でした。(これが一番つらかったです)

完成図

いろいろ四苦八苦して、最終的に以下のようなアーキテクチャとなって、初めてのWebAPIが完成しました。
方針として、サーバーを自分で用意しないで、AWSを利用しました。

Untitled Diagram.png
draw.ioの使い方

調べて実現して、まとめたこと

実現するまでの技術的な裏付けを調べるのに、一番時間をとりました。
次に時間をとったのが、AWSの使い方でした。こちらは備忘録としてまとめました。

AWSを利用したサーバーレスWebAPI開発環境の構築(zappaでAWSLambdaにデプロイする)
AWSのアカウントのつくり方から、スクリプトをAWSへアップロードする手順までまとめています。

zappa経由でデプロイしたAWSLambda関数(WebAPI)にCloudWatch Eventsを設定する
EventBridgeを使って、タイムスケジュールに従ったイベントの登録の仕方をまとめています。

【Python】AWS S3バケットにCSVファイルをアップロードしたり、データを読み込んだりする
S3バケットへのファイル保存と、そのファイルの読み込み方法をまとめています。

アプリケーション

リクエストはHTTP通信を使ったURI、レスポンスはJSONデータとなっているため、どんなプラットフォームでの開発もできます。ここがWebAPIの強みです。

今回作成したWebAPIは、データの更新頻度が高くないため(S3バケット内のデータの更新が1日1回)、取得したデータをローカルファイルに保存する想定にしています。アプリケーションではそちらのファイルを参照します。そして、アプリケーション内でユーザーの任意のタイミングでWebAPIにアクセスして、データを取得してローカルファイルを更新するようにします。

総括

作りたいものを作るために、どういう技術を使えばいいのかどう調べればいいのか(専門用語を知っているか)知識をつけることが、エンジニアにとって一番重要だと身をもって経験しました。

私の好きな漫画のひとつに、宇宙兄弟があります。その中のキャラクターのブライアン・Jがこんな言葉を残しています。

人の人生には、いくつもの”夢のドア”がある。人は例えば「宇宙へ行く」みたいな大きな夢を持った時、目の前に現れたバカでかいドアに萎縮して向こう側へ行くことを諦めちまう。「開けられるわけがない」ってな。

だがビビることはないんだよ。本当ははじめから、そんな”バカでかいドア”なんてものはない。

小さなドアがいっぱいあるだけだ。

“成長のドア”、”発見のドア”、”勝利のドア”、”賞賛のドア”、他にもいろいろ見つかるだろう。そしてその小さなドアを開けるたび、君らの夢が1つずつ叶っていくのがわかるはずだ。

(中略)

手探りでも何でもいい 意地でも次のドアに手をのばし続けることだ。

WebAPIを作る試みは、まさにこんな感じでした。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?