Skip to main content

からい雑記

hugo-amazon-apiからRedisを使えるようにしました

tl;dr

hugo-amazon-apiからRedisを使えるようにしました。

README

https://github.com/poppen/hugo-amazon-api

Usage:

% go get github.com/poppen/hugo-amazon-api
% cd $GOPATH/src/github.com/poppen/hugo-amazon-api
% go build
% ./hugo-amazon-api -access YOUR_ACCESS_KEY -secret YOUR_SECRET_KEY -tag YOUR_TAG -redis-url REDIS_URL(ex. redis://localhost:6379)

読まなくてOKな経緯

このブログはNetlifyにホストしてあります。1

Netlifyはとても高機能な上に無料で使えるという涙が出るほど素晴しいサービスなのですが、当然ながらAmazon Product Amazon APIへの問い合わせとJSONへ変換してくれるサーバはNetlifyからアクセスできる場所に置かなければいけません。色々考えた末、こちらはHeroku Container RegistryでDockerコンテナとして動かしてみることにしました。2

今までのエントリではAmazonへのリンクを張っていなかったこともあり、amazon-product-jsonをローカルで使っていましたが、すべてTOMLファイルを経由して設定する仕様のため、Twelve-Factor App的に使いにくいのが難点です。

amazon-product-jsonに環境変数に読み込めるように手を入れようかとも考えましたが、ググって見つけたhugo-amazon-apiの方がDockerで動かすには楽そうなので、こちらに乗り換えてみることにしました。

ただ、HerokuでDockerコンテナを走らせるにあたって問題なのが、アクセスがしばらくないとスリープすることです。この時、コンテナもkillされてしまうようで、hugo-amazon-apiが使っているAPIからの問い合わせ結果をローカル・ファイルとしてキャッシュしておくという方法はあまり有効ではありません。

ということで、Herokuでもaddon経由で使えるRedisをhugo-amazon-apiから使えるようにしてみました。

まとめ

今回はやりたいことを正味1時間ほどのコーディングで実現できて、やっぱり、Goはいい言語だなーと再認識しました。

仕事でちょろっとGoを書いたことはありますが、今年はもうちょっとGoと触れたいなと思います。

あと、他の人が書いたコードを読むのはやはり勉強になります。

今回書いたコードは、正直需要がものすごく低そうなので、fork元のupamuneさんにpullreq送るかしばらく考えたいと思います。


  1. ブログの環境まわりについては、記録としてまた別エントリに起こしたいと思います。 ↩︎

  2. 純粋に動かしてみたかったという理由です。ちなみに自前サーバで動かすという案は「運用をできるだけ楽する」というのがコンセプトなので脳内で即却下しました。 ↩︎

comments powered by Disqus