下林明正のブログ

思いついたことを適当に書いています。

AWSで動く画像アップローダーへGithub Actionsから投稿できた

気づいたら2ヶ月くらいちまちまこれらをやっていた。

AWSで動く画像アップローダー

github.com

例のごとくSAMってやつでつくった。 画像をアップロードするエンドポイントを提供しつつ、指定したタグに紐づく画像のRSSをフィードをつくってくれるというもの。

  • テストも書いた。SAMは標準だとchai/mochaみたいな感じだけど仕事ではjestを使っているので頑張ってjestで書いた
  • jestだとAWS関連をうまくモックしてくれるライブラリが見つけられなかったので自分でちまちま書いていった。現実の挙動を予想しながらテストを書いているので実際に本番で動かさないと動くかどうかよくわからないという悲惨な状況。次はテスト用のスタックを作っても良いかも知れない
  • 何も考えずにDynamoDBを採用してしまったけど画像にタグをつけて管理するみたいなユースケースに全然向いてないと思った。そもそもDynamoDBはDynamoDBの制約を受け入れることによって強力なスケーラビリティを手に入れるという感じだなーと思ったのだけど、別に個人用途のプロダクトなのでスケーラビリティとかさほど関心がないしその点でも全然向いてなくて、ただただ大変なだけだった
  • Aurora Serverlessへ移行することも考えたけど、CFnでAurora Serverlessを扱うのがとてもめんどくさそうだったので目を背けてしまった。CDKを使えば楽できるのかも知れないけど、SAMの世界観から外れそうなので調べなかった
  • とはいえ、必要十分なものができあがったと思う。S3とかLambdaとかに乗っかることで今の所費用は発生していないはず
  • これくらいの規模になってくるとなんかもうtemplate.ymlとかがつらすぎるのでSAMじゃないほうが良いかも知れない(うまくスタックを分割すればいいんだろうか、不明)

Github Actionsから投稿できた

画像アップローダーだけだと意味がないので画像を投稿してみている。 Puppeteerでブラウズしてスクリーンショットを撮ってアップロードしている。

github.com

Puppeteerってやつにも興味があったのでPuppeteerを使ってみることにした。近年のSPAが当たり前という世界では以前のようにMechanizeとかではやりづらい気がするので。

PuppeteerをLambdaで動かすのは大変そうだったのでFargateで動かそうかと思っていたのだけど、Github Actionsってやつを使うと楽にできるらしいと聞いたので試してみたところ、本当に最高だった。最高というよりは、もはや信じられないという感想に近い。 Puppeteerはまあまあ使うのに癖がある気がするけど、慣れてくるとまあこんなもんかという印象だった。headlessとかもあって偉い。実ははるか昔にWatirを触ってからさほどこの手のやつには触ってこなかったので、改めて便利だなーとなった(SeleniumとかPhantomJSもあんまり触る機会がなかった)。

PuppeteerもGithub Actionsも覚えたことでやれることの幅がかなり広がった気がするのでやってみてよかった。

次にやること

去年の10月くらいから勉強がてらずっと何かつくっていたけど、これで一通り作りたかったものは作れた気がする。

scrapbox.io

に書いているように勉強したい項目はまだ色々とあるけど、なんか実際に手を動かそうというネタがぱっと思いつかない状態。 最近は仕事の方でもこれまであんまりやってこなかったパフォーマンスチューニング周りだったりインフラ周りのタスクをつかめているので、ひとまずはそれを継続して勉強していくで良いかなあ。