2019雑にワンライナーのシェルスクリプトをHTTPサーバーとしてデプロイする[追記]執筆後にGAE-FEがGCEと同様の値段がかかる&&最小インスタンス数が1以上であることから無茶苦茶お金がかかることに気づいたため、この記事はなかったことになりました。自分はシェルスクリプトが好きなので、いろいろなことをシェルスクリプトでやるのですが、たまにシェルスクリプトがHTTPサーバーであってほしいときがあります。Contest)などの参加する予定のないものは表示しておきたくないのでどうにかフィルタしたいところです。ところでGoogleカレンダーのカレンダーはiCal形式でインポート/エクスポートできます。自分はiCal形式を前に少し触ったことがあったので、シェルスクリプトでフィルタをしてみようと思いやってみたのが以下です。/\(Beginner\|ABC\)/!d;}'1行目のcurlで取ってきているURLが先の画像でお見せしたAtCoder公式のカレンダーのiCalです。これをsedでいい感じに”Beginner”や”ABC”を含むものだけにフィルタします。雑いですが個人用なのでこれで十分です。これで現時点でのABCのみのカレンダーを作ることができましたが、今後も自動的にアップデートしてほしいものです。ここまでが前置きです。やりたいことHTTPサーバーを立っているリクエストが来るとシェルスクリプトが実行され、標準出力がレスポンスで返されるこれをできるだけ楽に作りたい。検討したサービス一番に思いつく方法はEC2やGCEなどのインスタンスをまるごと借りるタイプのものですが、お金のない学生なので選択肢に挙がりません。すみません(AWSに慣れている方は一番の選択肢になるかもしれないです)。Functionsでシェルスクリプトが動いてほしいという希望を持ちましたが、残念ながら対応していないようでした。Environment(FE)です。FEは使ったことがなかったのでどれだけ楽にできるのか不安なところがありましたが、慣れればまあそこそこ頭を使わずにできそうな感じだったので紹介します。GAE-FEでシェルスクリプトを実行するHTTPサーバーを立てるシェルスクリプトの公式のランタイムはありませんので、カスタムランタイムとしてDockerイメージをデプロイすることにします。いうわけでまずHTTPサーバーとシェルスクリプトを含むDockerfileを書きます。httpdを使用しました。別途入れる必要があります)のと、そこそこ楽そうだったからです。あとsedやcoreutilsを入れているのはGNUのコマンドが使いたかったからです。シェルスクリプトに必要なコマンド類はこれらに加えてfindとか入れておけばだいたいのスクリプトで足りるイメージがあります。これに伴いシェルスクリプトをCGI化する必要があります。index.cgiとして以下のように記述しました。/\(Beginner\|ABC\)/!d;}'まあContent-Typeの記述が増えただけです。すればなんとかなります。テストしておきましょう。Ctrl-Cで死んでくれないことです。flexデプロイしましょう。URL”を叩けば動きます。acomagu/gadgets感想このDockerfileとapp.yamlは使い回せるので、次回以降雑にシェルスクリプトをデプロイする機会があれば爆速デプロイが可能なんじゃないかと思っています。ワンライナーくらいどこかにペッと貼り付けたら動いてほしいなあ...まあDockerだと使えるコマンドも選べるしローカルでテストできるしそこは間違いなく良いところですね。カレンダーがうまくいってよかったです。