IBMクラウドをご存知でしょうか。AWS、GCP、Azureの三大クラウドが席巻する中で4番手として登場してくるクラウドサービスです。4番手の位置付けではありますが、無料プランのライトアカウントは3大クラウドでは有償契約せずに使えないサポートまであり、お試しにとどまらず、私個人の長期利用にも適しています。この記事ではIBMクラウドの魅力についてご紹介できればとおもいます。
目次
IBMクラウドの特徴
まずIBMクラウドの特徴についてご紹介したいと思います。
無料ライトアカウントが強力
まず一番の特徴は無料のライトアカウントの存在です。クレジットカード不要で利用できます。3大クラウドの場合、全てのアカウントでクレジットカード登録が必須です。GCP、Azureについては一応有料アカウントに切り替えるまでクレジットカードは本人確認目的以外で利用しないと言っていますが利用に有効期限があり、有効期限をすぎると有償契約にしない限り何もできなくなってしまいます。
一方でIBMのライトアカウントは期間制限がありません。もとよりクレジットカード登録をしていませんが、各種サービスの無料利用枠を超えたときに自動停止されたり、うっかり無料枠の限度オーバーの設定をしようとしたときに有料アカウントアップグレードしてくださいの警告が事前に出てくれます。安心して利用できるようになっています。
無料枠で使える主なサービスをみてみましょう。
Cloud Foundry
Cloud Foundryとは、Platform as a Serviceです。WEBアプリなどを作るためのコンピュートサービスです。似たようなサービスではHerokuやGCPのGoogleAppEngineがあります。ちなみに、CloudFoundryはPivotal社が開発しているPaaSでIBMでは自社製ではなく、Pivotal社のPaaSをサービスとして提供しています。
残念ながらライトアカウントでは仮想サーバなどをまるまる一台自由に利用することはできません。しかしながら、PaaSがあれば、WEBアプリ立ち上げなどのWEBエンジニアがやりたいことはほとんどこと足ります。むしろ、サーバ一台借りてしまうと、脆弱性対応などの余計なメンテナンスコストがうまれるため、PaaSのほうが便利であったりします。
ライトプランでは256MB分のアプリまで作ることができます。JAVA系のWEBアプリやインメモリデータベースのようなメモリを食うアプリケーションサーバの立ち上げはできませんが、GoやNode.js、Pythonといった軽量な言語であれば1~3個のアプリを立ち上げることができます。
ライトプランではアメリカリージョンしか使えず、継続的な開発をしていないアプリは10日で閉じられてしまいます。しかしながら10日ごとにメンテナンスや新機能開発を必ず発生するもので、アクセス速度を問わないものであれば、十分個人の趣味レベルのアプリの本運用には問題ないと思います。
Cloud Functions
こちらはFunction as a Serviceというコンピュートサービスです。似たようなものにAWSのLamda、AzureのAzure Functionsなどがあります。PaaSと同様サーバ不要でWEBアプリなどが立ち上げられます。
PaaSにはない特徴として2つあります。
1つ目は本当に小規模なものなら、WEB上の入力欄にコードを書くだけでWEBアプリが作れてしまうという点です。複雑なものだとPaaSと同様ローカルで設定ファイルなどを定義してCLI上からデプロイする必要がありますが、ちょっとしたアプリを作る際の手軽さはPaaSを凌駕します。
2つ目の特徴はユーザーアクセス・定期実行などの時に起動して、処理が終わると停止する点です。この性質がもたらす恩恵は圧倒的な低利用料金になるという点です。
一般的なIaaS、PaaSはユーザーアクセスがない時もサーバーアプリケーションは起動されているため費用がその分かかってしまいます。しかしながら、FaaSを使えば処理を行った時間しか利用料金が発生しないためIaaS、PaaS以上のコスト節約につながります。
ひと月あたり500万回&400,000 GB毎秒の利用は無料となっております。1日に数回程度、一回あたりの実行時間が数秒しか動かないバッチ処理では使い切る可能性はほぼないので、個人利用においては無料枠で十分といえます。
IBM Cloudant
ApacheCoachDBというNoSQL系のDBです。こちらもAzure CosmosDBなど3大クラウドで類似サービスが用意されているものです。1インスタンス1GBが無料で使えます。秒間アクセス数制限などがありますが、やはり個人利用としてはこれで十分ではないかと思います。
AIとしてのWatson
IBMといえば、WatsonというAIではないでしょうか。自然言語処理に定評があり、ChatBot系で現在多くの企業で利用されています。IBMCloudのライトアカウントでもIBM Watson Assistantの1万回/月の呼び出し、IBM Watson Discoveryによる1,000件/月の文書検索ができたりします。機械学習やAIに興味のある方に取っても魅力的なクラウドではないかと思います。
IBMクラウドを使う上で注意したいこと
そんなライトアカウントが強力なIBMクラウドですが、正直のところ私としては上級者向けのクラウドかなという印象があります。
一番の理由は3大クラウドの利用実績が大きすぎて、Watoson利用を除くと、他社のコンサルティングサービスや個人や企業の実践ブログといったIBM本家以外のサポート、ドキュメントが少ないという点です。プライベート利用という点では、全くクラウドを触ったことがない人にとっては、勘所がわからず苦労するかもしれません。逆にビジネス利用を考えている人の場合、セキュリティやコストのマネジメント面でノウハウの情報が集められず、利用に躊躇してしまう側面があると思います。
クラウドを全く触ったことがない人に関してはまずAWSやGCP,Azureの無料枠で各種PaaSやIaaS、データベースサービスなどを触ってみてから、IBMCloudを試してみるのがいいかもしれません。他社のクラウドサービスについては設定ファイル・GUIなどについて多少は違いがあれど、扱う感覚は大体一緒になっています。まずは実績やドキュメントも豊富な3大クラウドを使ってみて、慣れてきてからIBMCloudの利用を視野にいれてみるといいかもしれません。
もちろん、すでにさまざまなクラウドサービスを触ったことがある人であれば、だいたい扱い方は一緒なので公式のドキュメントだけを参考にすれば困ることはありません。その点で慣れている人にとっては安心して利用できるかと思います。
実践例:Python製SlackBot開発
最後にちょっとだけシステム開発の実践をご紹介したいと思います。以前以下の記事でAzureにおけるPythonのSlackBot開発を紹介しました。今回は、ここで作ったものをIBMCloudで動くようにカスタマイズしてみようと思います。
システム構成の変更
まず、システム構成を変更します。AzureではAzure Functions、Azure Cosmos DBを使ってきました。IBMCloudでも代替サービスが用意されています。それぞれAzure FunctionsをIBM Cloud Functions、Azure Cosmos DBをIBM Cloudantに変更します。
変更したシステム構成はこんな感じです。一応Azureのシステム構成も掲載しましたが、Azureと基本構成は変わらないことが確認できるかと思います。
コードの修正
続いてPythonのソースコードをIBMの各種サービスのSDKに切り替えます。以下のように修正します。
#
#
# main() このアクションを呼び出すときに実行されます
#
# @param Cloud Functions アクションは 1 つのパラメーターを受け入れます。このパラメーターは JSON オブジェクトでなければなりません。
#
# @return このアクションの出力。この出力は、JSON オブジェクトでなければなりません。
#
#
import sys
import requests
import json
from bs4 import BeautifulSoup
from cloudant.client import Cloudant
DB_ACCOUNT_NAME = None
DB_API_KEY = "XXXXXXXXXXXXXXXXXXX"
DB_URL = "https://XXXXXXXXXXXXXXXXXX-bluemix.cloudantnosqldb.appdomain.cloud"
SLACK_API = "https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXX"
# IBM Cloud Function のエントリポイントはmain(dict)になります
def main(dict):
# CloudantのDB接続
client = Cloudant.iam(DB_ACCOUNT_NAME, DB_API_KEY, url=DB_URL, connect=True)
# スクレイピング開始
blogResponse = requests.get('https://miyau5555.info/')
beautifulSoup = BeautifulSoup(blogResponse.text, 'html.parser')
latestEntry = beautifulSoup.find_all("a", class_="blog-entry")[0].find("h2").get_text()
articleUrl = "https://miyau5555.info" + beautifulSoup.find_all("a", class_="blog-entry")[0].get("href")
# DBから前回確認時の最新記事取得
database = client["myblog"]
document = database["latest-article"]
# 最新期の更新確認
if document["title"] != latestEntry:
#Slack通知
data = {"text": "最新記事 " + latestEntry + " が投稿されました。\n" + articleUrl}
headers = {"Content-Type": "application/json"}
requests.post(SLACK_API, headers=headers, data=json.dumps(data))
#DB更新
document["title"] = latestEntry
document.save()
client.disconnect()
return { 'message': 'ok' }
Azureのソースコードと見比べてみるとSDKとメソッド、メインの実行関数の引数や返り値を帰るだけで問題ないとわかると思います。
ちなみに今回は詳細な使い方は解説しませんが、、IBM CloudantとAzure Cosmos DBはほとんど同じ感覚で利用できます。一方でAzure FunctionsはVisual Studio Codeを利用した開発・デプロイをしていましたが、IBM Cloud FunctionsはローカルPCのデプロイツールは不要でWEBのGUIにコードを貼るだけで動きます。この点はAzureよりもIBM Cloud Functionsの方が便利と言えるかもしれません。
終わりに
以上がIBM Cloudの魅力と簡単な実践例のご紹介でした。今回は各種サービスの解説まではできなかったので今後各サービスの実践例もご紹介できればと思います。最後まで読んでいただきありがとうございました。少しでもIBM Cloudについて興味を持っていただければ幸いです。
Photo by Matthew Henry on burst