サーバーレスとは、サーバーの構築や保守などの面倒な管理をすることなく、サーバー上でプログラムを実行できる仕組みです。サーバーレスコンピューティングやサーバーレスアーキテクチャとも呼ばれています。
当たり前の話ですが、これまではちょっとしたプログラムでも、サーバーで動かすにはサーバーを構築しなければなりませんでした。しかし、このサーバーレスの仕組みを使うと、プログラムさえ作成してしまえばすぐにサーバーで実行することができます。そこで今回は、サーバーレスについて簡単な事例をまじえてわかりやすく解説してみましょう。
サーバー“レス”とは言っても、冒頭の絵のようにサーバーがない(レス)ということではなく、実際にサーバーは存在します。ただ、そのサーバーの構築や保守はサーバーレスの提供会社がすべてやってくれるうえに、負荷対策まで面倒を見てくれるのです。そのため利用者はサーバーの管理が一切不要(サーバー管理レス)になるので、「サーバーレス」と呼ばれているわけです。
たとえばプログラム開発者がサーバーレスを利用する場合、サーバーのことを一切考えなくてよくなるため、いいプログラムを書くことにのみ集中できます。これがサーバーレスの一番の利点です。
サーバーレスにはいくつかの種類があるのですが、今回はそのなかでも代表的な Function as a Service(ファンクション・アズ・ア・サービス)を使った事例をご紹介します。
なにやら見なれない長い横文字が出てきましたが、安心してください。プログラムの関数(例えばエクセルの関数のことです)を英語で Function(ファンクション)と言うのですが、この Function を実行できるサービスのことを、「Function as a Service」と呼んでいるだけのことです。(長いのでよく「FaaS」と略されます)
開発者は、便利なプログラム関数(Function)を作ったら、この Function as a Service にアップロードするだけで、プログラム関数を実行することができます。
サーバーレス(Function as a Service)は、大手クラウド各社から以下のサービスが提供されています。
提供会社 | サービス名 |
---|---|
AWS(アマゾンウェブサービス) | AWS Lambda(ラムダ) |
マイクロソフト | Azure Functions |
グーグル | Google Cloud Functions |
IBM | IBM Cloud Functions |
各社のサービス名に、関数「Functions」がついているのが特徴ですね。AWS の Lambda(ラムダ)のサービス名の確かな由来はわかりませんが、ラムダ計算(関数を使った計算方法)から、なんとなく関数「Functions」が思い浮かびます。
それでは、今回はこの AWS Lambda(ラムダ) 使って、簡単なプログラムを作ってみましょう。
簡単な事例として、当社キュービストのコーポレートサイトのHTMLファイルを、毎日決まった時間に保存するためのプラグラムを、AWS Lambda(ラムダ)で作成してみます。
Lambda 以外にも CloudWatch Events(スケジューリングなど)、Amazon S3(ストレージ)という AWS のサービスも使います。サーバーレスは、プログラム関数の実行だけでなく、色々なサービスと連携できるので、実現したい機能をすばやく作ることができるのも魅力のひとつです。
下準備として、HTMLファイルの保存先の S3 バケットを作成しておきます。
AWSのマネジメントコンソールにログインして「サービス」→「S3」をクリックします。
「+バケットを作成する」をクリックします。
適当なバケット名を入力して、左下の「作成」をクリックします。(リージョンはそのままで構いません)
以上で S3 バケットが作成されました。アクセスが「バケットとオブジェクトは非公開」になっていることを確認しておきましょう。
続いて本題の Lambda関数を作成します。「サービス」→「Lambda」をクリックします。
「関数の作成」をクリックします。
適当な関数名を入力し、お好みのランタイム(プログラム言語)を選択したら「関数の作成」をクリックします。(アクセス権限の実行ロールは自動で作成してくれます)
以上で Lambda関数が作成されました。下のような画面が表示されていると思います。
下にスクロールして、メモリとタイムアウト(関数を実行できる時間)設定し、「保存」をクリックします。(メモリとタイムアウトは、実行するプログラム処理の大きさにあわせて調整してください)
Lambda関数から先ほど作成した S3 バケットにアクセスできるように設定します。
実行ロールの「(関数名)〜ロールを表示」をクリックします。(これが自動で作成された実行ロールです)
ロールの設定画面が表示されたら「ポリシーをアタッチします」をクリックします。
「AmazonS3FullAccess」にチェックをいれて「ポリシーのアタッチ」をクリックします。
ポリシーがアタッチされたらロールの設定画面を閉じて、Lambda関数の設定画面に戻ってください。
Lambda関数のメイン部分となる、関数コードを作成します。今回の関数コードは次のようになります。
import urllib.request import boto3 from datetime import datetime s3 = boto3.resource('s3') def main(event, context): # コーポレートサイトのHTMLファイルをダウンロード url = 'https://www.qbist.co.jp/' html = urllib.request.urlopen(url).read() # 保存先のS3のバケット名とファイル名の指定 bucket = 'sample-qbist' key = 'www-qbist-co-jp-' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.html' # S3への保存実行 obj = s3.Object(bucket, key) obj.put(Body=html) return
関数コードの「File」メニューから「New File」を選択します。
新ファイルが作成されますので、関数コードを入力し、「File」→「Save」を選択します。
適当なファイル名を入力して「Save」をクリックします。
「ハンドラ」に「<拡張子なしのファイル名>.<関数名>」(今回の例では「sample.main」になります)を入力して「保存」をクリックすれば、関数コードの作成完了です。
以上で Lambda関数が完成しました。動作チェックのためテストしてみましょう。
画面上部にあるメニューから「テストイベントの設定」を選択します。
イベント名に適当な名前を入力して、画面下にある「作成」をクリックします。
作成したテストイベントを選択したら「テスト」クリックして Lambda関数を実行します。
Lambda関数が実行され、実行結果が表示されます。
S3のバケットに、HTMLファイルが保存されていることも確認しておきましょう。
最後に、トリガーを追加して、Lambda関数が定時に実行されるように設定します。
トリガーの追加に表示されている「CloudWatch Events」をクリックします。
「CloudWatch Events」を選択した状態で、トリガーの設定から「新規ルールの作成」を選択します。
「ルール名」と「スケジュール式」を入力して「追加」をクリックします。スケジュールの時間は、UTC(協定世界時)で設定する必要がありますので、例えば日本時間の23時に実行したい場合は、時差の9時間を引いて14時を設定します。
スケジュール式の書式は次の通りです。詳しくは以下の公式ドキュメントをご参照ください。
cron(分 時間 日 月 曜日 年)
ルールのスケジュール式 – Amazon CloudWatch Events
画面右上の「保存」をクリックすれば、トリガーが追加され Lambda関数が定時実行されるようになります。
AWS Lambda などの Function as a Service のサーバーレスは、ウェブサイトのように常にアクセスされるようなサーバーには向きませんが、サーバーレスは、使った時間とメモリに応じて課金されるため、今回の事例のように1日1回だけ実行されるような関数コードであれば、ほとんど料金はかかりません。
適材適所でサーバーレスをうまく使えば、サーバー管理から解放されるだけでなく、費用も節約することができますね。
早いもので今年も残すところあと一ヶ月あまり。年末に向け、データの整理や処理で大忙し……という方も多いのではないでしょうか? 当ブログでは以前に「時短してますか? 〜業務効率化に役立つパソコン小技集〜」と題し、時短に役 … “時短してますか?~業務効率化に役立つExcel小技集~” の続きを読む
現代ではすっかり仕事に欠かせないツールとなったパソコンですが、メールや会議用の資料を作成するのって意外と時間がかかりますよね。ちょっとした小技で圧倒的に作業時間の削減ができるとしたら……? 便利な機能を活用して、さく … “時短してますか? 〜業務効率化に役立つパソコン小技集〜” の続きを読む
普段から仕事でパソコンをお使いの方も多いと思いますが、パソコンを正式に基本から学んだという方はどのぐらいらっしゃるでしょうか。パソコン黎明期ならいざ知らず、いまどきは会社や学校、自宅で触っているうちに自然と覚えていった … “今さら聞けないキーボードの効率よい使い方” の続きを読む