bash-lambda-layerのAmazon Linux 2対応をすることを決意した話

こんにちは。技術部の池田です。

この記事では、gkrizek/bash-lambda-layer (以下、本家)を forkしたkayac/bash-lambda-layerに関して話します。

bash-lambda-layerに関しては、こちらを参照いただければわかりやすいと思います。

sfujiwara.hatenablog.com

github.com

経緯

kayac/bash-lambda-layerは本家のawscliのversionでは使用できない機能を使用するために、一時避難的にforkしてawscliのversion upを行ったことから始まりました。

そして、今まで以下のような変更を加えてきました。

  • 継続的にawscliをupdateするためにフローの整備
  • Step Functionsで利用するときにstack traceなどに改行が含まれるとエラーハンドリングできない対策 => JSONエスケープ問題
  • Kayac社内で共通利用できる公開レイヤーの作成

社内でもそこそこ使っているため、本家がなくなっても困らないように最低限のメンテナンスができる状態は維持していこう!というモチベーションのもとにひっそりと存在していました。

本家が NO LONGER SUPPORTED になりました。

先日(2020年8月20日)、本家のREADMEに新たなコミットが追加されました。
https://github.com/gkrizek/bash-lambda-layer/commit/703b0ade8174022d44779d823172ab7ac33a5505

This repository and layer is no longer receiving updates or support. I've been too busy to keep up with changes in the Lambda environment and this has fallen behind. Use at your own risk.

恐れていた事態がやってきたようです。
コミットのコメントを確認すると、先日発表された『AWS Lambda が Amazon Linux 2 のカスタムランタイムのサポートを開始』がきっかけのようです。
このアップデートによって、既存のprovidedとは別にprovided.al2が使えるようになりました。 これは、近々やってくるであろうAmazon Linux 1 EOL関連の話で、既存のprovidedはいつか使えなくなる日が来ることが予想されます。 社内でもbash-lambda-layaerは便利に使っているため、我々でAmazon Linux 2に対応する必要が出てきました。

Amazon Linux 2対応するぞ!!!!

実際に対応を開始してみた

2020年9月2日時点で、やる気とモチベーションが湧いたのでおもむろにPRを作りました。
https://github.com/kayac/bash-lambda-layer/pull/14

このPRの1番最初のコミットにおいて既存のコマンドをすべてアンインストールしています。
その理由としては、lib関係がAmazon Linux 1とAmazon Linux 2 で異なる可能性があるためです。
そして、1つずつ再インストールを始めたところ、思ったより動作確認が ~めんどくさい~ 大変だということに気が付きました。
そこで、社内でよく使う awscliとjq、zip、unzipだけ動作確認してAmazon Linux 2対応ということにしようと今は思っています。
Amazon Linux 2 ではAmazon Linux 1と比べて大幅なダイエットがされています。 bash-lambda-layerも同じくダイエットしたと言い張ろうかなと言う心境です。

追加のコマンドが欲しい場合

本家のIssueを見に行くと、数多くのコマンド追加Issueがあります。
これと同じことになると、せっかくダイエットしたのにリバウンドして困ってしまいます。 そこで、exampleに追加でLayerを重ねる例を作りました。

実は、AWS Lambda Layerは5つまで重ねることができます。(解凍後のサイズが250MBまでの制限もあります)

docs.aws.amazon.com

具体的な例として、以下のスクリプトがあります。

http:// https://github.com/kayac/bash-lambda-layer/blob/feature/v2.0.0-amazon-linux-2/examples/publish-addtional-git-layer.sh

このスクリプトでは、ambci/yumda という便利なリポジトリ/Docker Imageを使用しています。 このDocker Imageを使うと、yumを使ってインストールできるものは簡単にLayer化できます。

bash-lambda-layerにインストールされてないコマンドをawscliなどと一緒に使いたい場合は、このようにしていただければ幸いです。

今後の展望

本家は NO LONGER SUPPORTED になりましたが、kayac/bash-lambda-layer はメンテナンスを続けていこうと思います。
直近ではAmazon Linux 2対応を優先しようと思いますが、その他にも対応したいことはあります。

  • testの追加
  • awscliのupdate自動化 (現在は手動なのでサボりがち)
  • exampleの追加

などメンテナンスをしやすくなるような仕組みの導入が直近の主な課題です。

おわりに

今回はkayac/bash-lambda-layerでAmazon Linux 2に対応するぞ!と思った話をしました。
もし、気軽にawscliをlambdaで使いたいと言うようなケースが有りましたら、ご利用いただければ幸いです。
カヤックでは、保守・運用が好きなエンジニアも多分募集しています