てくすた

ピクスタ株式会社のエンジニア・デザイナーがつづるよもやまテクニカルブログです

PIXTAにおけるAWS Lambdaの活用事例

新年明けましておめでとうございます。
開発部のもりと申します。
本年も”てくすた”をよろしくお願いします。

今回のテーマはPIXTAにおけるAWS Lambdaの活用事例として、CloudWatch EventsをトリガーにしたEBSボリュームのスナップショットの取得と、CodeCommitをトリガーにしたOpsWorksへのデプロイの方法についてご紹介させていただきます。

AWS Lambdaとは

ご存知の方も多いかと思いますが、「AWS Lambda」はクラウド上でアプリケーションを実行するプラットフォームです。AWS Lambdaを使えば何らかのイベントをトリガーにして処理を実行することが可能です。例えば、以前紹介させていただいた記事では、APIGatewayをトリガーにしてAWS Lambdaで何らかの処理してS3にデータを格納するといったことがサーバーレスで実現できます。
なお、トリガーに指定できるイベントのソースは、これだけあり、今回はCloudWatch EventsとCodeCommitをトリガーにした例を紹介します。

CloudWatch EventsからのEBSスナップショット取得

なぜやるか?

AWS Lambdaの特徴のひとつに「インフラの運用管理が不要」が挙げられると思います。
今までEC2インスタンスのEBSのバックアップ方法としてスナップショットの取得を毎日cronでシェルスクリプトを実行することで実現しておりました。
そのスクリプトを実行するためのEC2インスタンスを用意しておりましたが、それ以外での利用用途がなく管理の手間とコストの削減を目的に、AWS Lambdaに置き換えました。

どうやるか?

AWS Lambdaに移行するに当たって置き換えたのは、

  • シェルスクリプトをPythonに
  • cronをClowdWatch Eventsに
  • 当たり前ですが実行環境をEC2からAWS Lambdaに

としました。
AWS LambdaへのデプロイはServerlessFrameworkを使用しています。
(私はPythonを学ぶいい機会となりました。)

やってどうなったのか?

効果は小さいながら前述のEC2インスタンスを削減することができました。
また、実行コードをServerlessFrameworkに乗せたことで、コードレビューもできるようになり、デプロイも容易になりました。

CodeCommitからのOpsWorksでのアプリケーションデプロイ

なぜやるか?

もうひとつ特徴として「イベントドリブン」が挙げられると思います。
PIXTAのサービスは複数の機能から構成されており、その機能毎にステージングとプロダクションの環境をOpsWorksのstackに構築しており、デプロイの際は、各stackにおいてリリース担当者がリリースのオペレーションを実施しておりました。
リリース作業に1日の大部分を費やしていることや、単調なオペレーションが担当者の負担になっていることが課題としてあったため、リリース作業時間の短縮とオペレーションの自動化を目的に、AWS Lambdaに置き換えました。

どうやるか?

着想はHerokuでのアプリケーションデプロイでした。つまりgit pushのコマンドで対象のコードをデプロイすることができれば大幅にオペレーションコストは削減できるだろうと考えました。そこでgit pushの「イベント」に対応して、AWS Lambdaに登録したOpsWorksへのデプロイコードを実行させステージングとプロダクション両方の環境へデプロイするようにしました。

f:id:philip_moris:20180117130708p:plain

置き換えたのは、

  • git push時のミラーにCodeCommitを追加
  • 手動でのオペレーションをPythonに

としました。
リリースの対象となるブランチをリリース担当者の開発環境からgit pushすることで、CodeCommitに反映され、それをイベントとしてAWS Lambda関数が実行されOpsWorksへデプロイされます。

やってどうなったか?

手順が簡略化したこと、手動でのオペレーションがなくなったことで省力化とデプロイの時間の短縮が実現できました。また、コーポレートサイトのようなほぼ静的なページで構成されるアプリケーションについてもデザイナー等の非エンジニアでもリリースが可能となり属人化を避けれるようになりました。

まとめ

CloudWatch EventsとCodeCommitをトリガーとしたAWS Lambdaの利用事例を紹介させていただきました。
紹介した事例では、Lambda関数の実装にPythonを採用しておりますが、最近ではC#やGo言語もサポートしてきており、開発できる幅も広がってきていると思います。先に挙げたようなインフラの運用管理の手間を少しでも減らしたい、何かをイベントとして何らかの処理を実行させたいといった課題がもしあれば、一度AWS Lambdaを試してみてはいかがでしょうか。

* * * * *

ピクスタでは、能動的に改善に取り組んでサービスを良くしたいエンジニアを募集しています。

recruit.pixta.co.jp

recruit.pixta.co.jp