下林明正のブログ

個人的かつ雑多なブログです。

以前つくったRSSフィードにguidを追加する簡単なサービスをAWSに移植した

これのことです。意外と2年前につくったものなんですね(もっと昔につくった気がしていた)。

shimobayashi.hatenablog.com

当初はherokuで動かしていたんですが無料枠をめちゃくちゃ圧迫するのでVPSに移して、今度はAWSの勉強がてらVPS撤退を進めようということにしたのでこのアプリケーションについてもAWSへ移植しました。

構成としては、以前はXPathFeedのようにストレージなどは持たずにリクエストがきたらパラメーターから動的にフィードを生成してレスポンスするというものだったところから、AWSでLambdaを定期実行してDynamoDBから設定を読み込んでフィードを生成してS3へ外部からアクセス可能な形でアップロードするというものに変更しました。

こういう構成にした理由としては基本的にはコスト削減以上の理由は無いですね。常時リクエスト可能なインスタンスを建てるとそれだけでVPS契約できるくらいのコストがかかりそうだったのでそれは避けたという形です。DynamoDBを使っているのはAWSコンソールからテーブルを操作できるので設定が楽だからというだけです。

多分そのまま sam build --use-container; sam deploy --guided しても皆さんのお手元では動かないけど(めんどくさがってDynamoDBがCFnの管理下になっていないため)、ソースコードは一応公開しています。

github.com

それにしても大したアプリケーションじゃないんですがAWSに不慣れということで変なところでいちいちつまづきました。 sam local invoke しながら動作確認して開発していたんですが、最後にエイヤッとLambdaにデプロイしてから不思議と動かない要素が多くて苦労したので、あんまりlocalで動作確認しても意味ないなと思いました。

以下、苦しみです。

shimobayashi.hatenablog.com

www.noobs.tokyo

特に require 'aws-sdk' はアンチパターンということが分かりました。なぜか動作がスタックするという以外にも、依存が大量に含まれているせいかビルド時間もデプロイ時間も急増するので、個別に指定したほうが良いです。

ともあれ、これでVPSで動いていたものは全部AWSへ移植できた気がするので先程VPSをシャットダウンしてみました。これで実生活に問題が無ければVPSを晴れて解約できそうです。

次は何を勉強しようかなあというところで、今んとこのネタとしては

  • CFn
    • template.yamlを勘で書いていて何もわからないので
  • CDK
    • SAM使ってるうちは使わなさそうだけど自分でCFnを使ってなんかやろうと思ったらYAML書きたくないので
  • TypeScript
    • CDKでも使えるっぽいしフロントエンドでもサーバーサイドでも使えて良さそうという雰囲気があるので
  • AWS SAA取得を目指してみる
    • そもそも体系的な知識がまったくないので

あたりかなあ。なんか良い勉強法などあれば教えて下さい。