awspecをAWS Lambdaで動かす
概要
先日、AWS Lambdaでrubyがサポートされた とのことで、awspecを動かしてみました。
awspecはAWSのリソースのテストを行うRSpecベースのツールです。
実業務でも開発・運用に利用させて頂いており、品質担保には重要なソフトウェアです。
[toc]
構築
今回はサンプルとしてS3のバケットがあるパターン・ないパターンの存在チェックをそれぞれ行いました。
https://github.com/mickey390/aws-lambda-awspec
成果物はこちらのリポジトリにまとめました。手順はリポジトリ時に記載していますが、大体の流れは以下のようです。
- ローカルで`bundle install`しLambdaに上げるライブラリを用意
-
- Lambda用のIAMの作成は、Terraform(apex infra)を利用
- ケースに合わせて、S3のReadとPutできるよう
- Lambda用のIAMの作成は、Terraform(apex infra)を利用
- Lambdaのデプロイ管理は、apex を利用
- 処理自体は、、
- 処理実行は、class Rake::Applicationを使った
- 実行結果は、failedの場合はSystemExitをrescueし継続させた
- 結果レポートは、html形式にして 出力し、S3に保存
実行すると↓RSpecのレポートが見られる
詰まった処
Lambda上で以下のようなエラーが出ました。環境変数$HOMEが設定されていないとだめなようで、このように 追加しました。
WARNING: Unable to find ~/.rspec because the HOME environment variable is not set. Called from /var/task/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.8.0/exe/rspec:4:in `<main>'
実行環境としてのLambda
awspecの実行環境としては、EC2(バッチサーバみたい)やCI環境(CircleCI/Jenkins)などが多いようですが、EC2との比較を挙げてみます
- コストに関して
- Lambdaは安い
- 構築に関して
- 簡単
- 既存のケースを移行するのも容易
- EC2などの基盤を用意しなくてよいので、開発の初期から導入できる
- ワークフローに関して
このようにメリットや可能になることも多そうなので、業務に導入する選択肢にも入ってきそう
気をつける点は、、
- 当然ながらLambdaの実行時間やライブラリのサイズの上限を気をつける
- awspecとrakeのサイズは75Mだった
- 他の方が検証されているが、初回の実行はやはり時間がかかる
$ du -hs vendor 75M vendor
さいごに
- awspecをLambdaで実行してみた
- 構築は簡単
- 構成管理ツールとも合わせて良いワークフローに変えて行きたい
- Infratesterといった外形監視もLambda上で動かしてみたい
以上です。