2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

この令和時代にサーバーレス知らないのはヤバみ

Last updated at Posted at 2021-02-23

Serverless とは

サーバー管理が不要なアーキテクチャです。

自前でサーバーを用意/管理するとなると様々な課題と向き合うかと思います。例えば、OS設定や容量管理、負荷管理、ランニングコスト、アイドル時のリソース管理、アクセス制御、セキュリティ管理などキリないですが、サーバーレスアーキテクチャを利用することで、そんなものは気にしなくて良くなり、プログラムロジック(本質)の開発に注力することができるかと思います。熱盛ですね。

現代では、モノリシックよりもマイクロサービスなどの疎結合な特性を持つアーキテクチャが注目されていると思いますが、その一部として、サーバーレスアーキテクチャを導入するという形も考えられると思います。

Serverless Framework とは

サーバーレスアーキテクチャを簡単に構築するためのオープンソースフレームワークです。AWSやGCP、他にも様々なクラウドプラットフォームに対応しています。似たものとして、SAM(いや EZ DO DANCE じゃないです)というAWS公式が提供しているフレームワークもあります。サーバーレス環境をどうやって管理するかという話になった時に使います。

フレームワークを使用せず、AWS上にサーバーレス環境を作るとなると、なかなか大変かと思います。今回であれば、AWS Lambda、CloudWatch Events、S3など手で用意したりすることになり、ある程度の知識も必要になると思いますが、フレームワークを使用することで、設定ファイル1つ、コマンド1発でサーバーレス環境を自動構築してくれちゃいます!!設定ファイルなどを見るだけで、現在の環境を簡単に把握することが出来るって良いですよね。いわゆる IaC です。美しい!

zero-friction serverless development

と公式にあります。このストレス社会の中で、ノンストレスなサーバーレス開発をしよう的な意味でしょうか。感無量。脱帽です。

やっちゃえ SERVERLESS :angel_tone2:

AWS Lambda とは

Faas であり、AWS上のサーバーレスサービスの代表格。フルマネージドで、インフラは管理する必要がなく、コードさえあれば実行可能。スケーラビリティが高く、リクエストに応じて、AWSがリソースを柔軟に確保(スケール)してくれます。S3SESCloudWatch Events 等のAWSリソースを活用しており、イベントが発生した時に何かを実行させたりすることができます。ユースケースとしては、定期的なタスクやインベント処理、例えば「S3にファイルが追加されたら〇〇する」、「メールが届いたら△△する」とか「定期的に☆☆通知をSNSにアップ」とかでしょうか。

事実的にはサーバーが存在するのですが、AWS Lambdaではプログラムが実行される際、lambdaコンテナ というものが一時作成され、プログラムの実行が終わると無くなるようでして、この部分がサーバーレスと言われる所以みたいです。

クラウド依存ですので、特定の書式で実装する必要があったり、使用可能な言語、メモリ、実行時間等に制限があったりと、制約はありますが、うまく付き合いながらツールを使いこなせれば、使える場面は多岐にわたると思います。

凄くザックリとした説明ですが、凄く便利そうですよね。簡単なAPIとかなら、わざわざEC2とか用意せずにLambdaでイケる! :)

実際に作ったやつ

ソースは以下。Docker環境用意してあるので、ぜひ試してみてください。欲を言えば「PR欲しい :flushed:」。

全体イメージ図

概要

Cronによりスケジュールされた CloudWatch Events をトリガーに Lambda Function が実行されます。Lambda FunctionCostExplorer からコストを取得し、Slackに通知するというプログラムになってます。

内容

以下のように通知されます(2020年12月3日の実行イメージ)。

「実行月の1日から昨日までの料金」と「サービス毎の料金(内訳)」をSlackに通知します。毎月1日には「前月の料金」が通知され、料金が0の場合(ほぼ無いけど)は、内訳が通知されないようにしてます。

ローカルのターミナル上で実行したり、ローカルからデプロイされた関数を呼び出すことが可能です。個人のWEBHOOK_URL 等を指定して実行を行い、通知確認したり、Slack上での表示を確認したり等が比較的簡単に行えるように工夫しているつもりです。

まだまだ改良の余地があるので、引き続き育てていこうと思います。

デプロイ

デプロイは以下コマンド1発。CloudFormation 経由で Stack および CloudWatch EventsLambda が作成され、ソースは S3 に格納されます。そう。コマンド1発で。

% sls deploy --aws-profile foo --url https://hooks.slack.com/services/T00/B00/XXX

Docker環境

lambci/lambda をイメージを使用しています。AWS Lambda の環境を実現しているよう(完全再現では無いようなので注意が必要)でして、良さそうだなと思って使用させてもらっています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?