.NET で IBM Cloud(旧 Bluemix)ライト・アカウントを使ってみた
本エントリーは IBM Cloud Advent Calendar 2017 の18日目になります.
若輩者ですが、どうぞよろしくお願いします.
なお、本エントリーの掲載内容は私自身の見解であり、必ずしも IBM の立場、戦略、意見を代表するものではありません.
2017年11月より IBM Cloud(旧 Bluemix:名前も変わったよ!)ライト・アカウントの提供が始まりました.
ライト・アカウントの詳細は上記リンクを参照していただくとして、個人的な推しポイントはやはり…
「クレジットカード登録不要なのでランタイムの稼働状況を心配しないでいい」
ですね!忘れていたランタイムの稼働で不本意な請求をされることはありません!笑
今回はこのライト・アカウントを .NET で使ってみようと思います.
例として .NET で使うパターンをご紹介させていただきますが、Java, Python, Node.js 等でも同様の使い方ができると思います.
(汎用性が高い使い方として .NET Core 2.0/.NET Standard 2.0 を例にしています)
*それぞれの実装例を載せて長くなってしまっているので、時間が無い方はまとめだけでもお読みいただければ嬉しいです.
目次
ライト・アカウントで使えるサービスは何があるの?
何はともあれ、まずはライト・アカウントで使えるサービスを確認しましょう.
カタログ一覧でフィルターに”label:ライト”と入力すると、ライト・アカウントで利用できるサービスを確認できます.今回はライト・アカウントで利用できるサービスの中で以下のサービスを取り上げたいと思います.
- Cloud Foundry App
- Object Storage
- cloudantNoSQLDB
- Watson
IBM Cloud CLI
IBM Cloud を利用するにあたって、必ずどこかで出てくるのが IBM Cloud CLI(旧 Bluemix CLI)です.
まずはこちらをインストールしていただけると今後の手順が進めやすいです.
Cloud Foundry App
まずは Cloud Foundry App です.いわゆる通常の Runtime になります.
Cloud Foundry アプリカテゴリーでは以下の10個の Runtime が利用できます.
利用できる Runtime の種類に通常プランとの差異はありません.もちろん .NET(Core) も含まれます.一番利用頻度が多そうな Cloud Foundry アプリ がすべて揃っているのはいいですね.
ライト・アカウントでは最大 256MB までメモリを使用することができます.
これは、256MB × 1インスタンスの構成はもちろん可能ですし、64MB × 4インスタンスのような構成も可能です.
ちょうど良いチュートリアルがあるのでこちらを試してみます.
GetStartedDotnet.csproj は .NET Core 2.0 仕様に書き換えました.
IBM Cloud CLI でログイン、デプロイターゲットを設定します.
組織、スペースに指定しているものはダッシュボード上のこちらの情報になります.
それではデプロイしましょう.
起動後、アプリの状態を見てみると、まだまだメモリに余裕はありそうです.
$ bx cf app get.started.dotnet-project.respite
'cf app get.started.dotnet-project.respite' を起動しています...
Showing health and status for app get.started.dotnet-project.respite in org Project Respite / space dev as project.respite.com@gmail.com...
name: get.started.dotnet-project.respite
requested state: started
instances: 1/1
usage: 256M x 1 instances
routes: getstarteddotnet-projectrespite.mybluemix.net
last uploaded: Sun 10 Dec 15:51:14 JST 2017
stack: cflinuxfs2
buildpack: dotnet-core
state since cpu memory disk details
#0 running 2017-12-10T06:54:50Z 0.2% 121.1M of 256M 334.7M of 1G
以上が Cloud Foundry App でした.
Object Storage
次は ストレージのサービスとして、Object Storage を取り上げます.
公式ドキュメントはこちらになります.
名前の通り、画像などの非構造化データを保存するのに向いたストレージになります.
ライト・アカウントでは以下の制限があります.
- 最大 25 GB/月
- 最大 20,000 GET リクエスト/月
- 最大 2,000 PUT リクエスト/月
実運用では流石に物足りないですね;
SDK は Java, Python, Node.js が用意されています.
残念ながら .NET 用の SDK は用意されていないので今回は自前で実装したいと思います.
サンプルとして .NET Standard 2.0 の Xamarin.Forms のプロジェクトを実装しました.
まずは “myimage” という画像を保存するためのバケットを作成しました.
バケットとはオブジェクトのカテゴリーのようなもので、”https://s3-api.us-geo.objectstorage.softlayer.net/[bucket name]/[object name]” のようにリクエスト URL の一部になります.
簡略化のため、今回は IBM Cloud Web ポータル上でバケットを作成しましたが、API 経由で作成することも可能です.
Object Storage は AOuth2.0 の認証方式を取ります.
そのため API リクエスト用のトークンを取得する必要があります.
下記 URL を参考にトークンを取得しましょう.
トークンを取得できたらいよいよ .NET の実装です.
Xamarin.Forms で写真を撮り、画像データを Object Storage にアップロードするサンプルを書いてみました.
C# のコードとしては非常に簡単です.
アップロード時には ByteArrayContent を生成し、HttpClient.PutAsync で投げる.
ダウンロード時には HttpClient.GetStreamAsync で取得する.
これで Object Storage 上へのアップロード/ダウンロードが行えます.
以上が Object Storage でした.
cloudantNoSQLDB
3つ目は cloudantNoSQLDB です.
データ & 分析カテゴリーのサービスの1つです.
公式ドキュメントはこちらになります.
ライト・アカウントでは以下の制限があります.
- a max of 1GB of encrypted data storage
- 20 Lookups/sec
- 10 Writes/sec
- 5 Queries/sec
cloudantNoSQLDB には Xamarin PCL 用の SDK が用意されています.
ただ、お分かりの通り Xamarin PCL 用で、しかも Xamarin Components のものなので .NET 一般で使いやすいとは言い難いものです…
(なぜ Components 先行で作られているのかは歴史的経緯なんでしょうね)
なので、今回はこの Component は使わずに、またしても自前で実装してみたいと思います.
先程の Object Storage とは違い、Cloudant はベーシック認証になります.
まずは資格情報を確認しましょう.
今回使うのは “username”, “password”, “host” の3つです.
.NET の実装です.
Object Storage と同様に、.NET Standard 2.0 の Xamarin.Forms プロジェクトで実装してみました.
基本的に JSON のやり取りなので特に難しい点はありませんが、[DB Name]/_all_docs?include_docs=true の返り JSON は注意が必要です.以下のような構造が返ってきます.
{"total_rows":5,"offset":0,"rows":[
{"id":"7a0d355a40ef8212724e29c99fe9d50a","key":"7a0d355a40ef8212724e29c99fe9d50a","value":{"rev":"1-07b1c0a52c13f9f8a4051235356e7451"},"doc":{"_id":"7a0d355a40ef8212724e29c99fe9d50a","_rev":"1-07b1c0a52c13f9f8a4051235356e7451","name":"Test5","age":56}},
{"id":"7c7c49405eb75d9f6999869f838f8b2b","key":"7c7c49405eb75d9f6999869f838f8b2b","value":{"rev":"1-670d7c4e33773de2188555bd3e3ea588"},"doc":{"_id":"7c7c49405eb75d9f6999869f838f8b2b","_rev":"1-670d7c4e33773de2188555bd3e3ea588","name":"Test","age":20}},
{"id":"7c7c49405eb75d9f6999869f8398047c","key":"7c7c49405eb75d9f6999869f8398047c","value":{"rev":"1-dccb77be1a4377b40a5063755ebf97ad"},"doc":{"_id":"7c7c49405eb75d9f6999869f8398047c","_rev":"1-dccb77be1a4377b40a5063755ebf97ad","name":"Test2","age":22}},
{"id":"7c7c49405eb75d9f6999869f83987e31","key":"7c7c49405eb75d9f6999869f83987e31","value":{"rev":"1-cf620477d120b151f9aca361ea87530e"},"doc":{"_id":"7c7c49405eb75d9f6999869f83987e31","_rev":"1-cf620477d120b151f9aca361ea87530e","name":"Test4","age":42}},
{"id":"a45641bd84ca36d692a0636edb1fb3f0","key":"a45641bd84ca36d692a0636edb1fb3f0","value":{"rev":"1-b543e2cc613a04313c27119a83e6e5c9"},"doc":{"_id":"a45641bd84ca36d692a0636edb1fb3f0","_rev":"1-b543e2cc613a04313c27119a83e6e5c9","name":"Test3","age":35}}
]}
以上が cloudantNoSQLDB でした.
Watson
さて、最後に皆様注目の Watson カテゴリーです!
Watson カテゴリーでは以下の8個のサービスが利用できます.
以下のサービスはライト・アカウントでは利用できません.
- Document Conversion【非推奨】
- Natural Language Classifier
- Retrieve and Rank【非推奨】
- Visual Recognition
非推奨のサービスを除けば、使えないものは NLC と VR だけです.
他のサービスはライト・アカウントでもお使い頂けます.
Watson サービスには .NET Standard 用の SDK が用意されています.
以前この SDK を使った記事を書いておりますので、詳しくはこちらをご参照ください.
以上が Watson サービスについてでした.
まとめ
IBM Cloud を .NET で使うという切り口で ランタイム, 非構造化データDB, NoSQL DB, Watson をご紹介させていただきました.アプリを作る上での最低限の機能は網羅できたのではないかと思います.
これらのサービス以外で利用頻度が多いものとしては RDB、そして最近では Functions などでしょうか.
残念ながらライト・アカウントで利用できる RDB はありません.従量課金 (PAYG) アカウントが必要になります.
IBM Cloud Functions はライト・アカウントでも利用できますが、.NET のランタイムはサポート外になります.
(Docker がサポートされているので自前の .NET ランタイム環境は構築できます)
このように制限があるライト・アカウントですが、クレジットカード登録不要という大きなアドバンテージを持っています.
個人の開発環境、検証環境、課金が心配な学生の方など、用途によっては課金を気にせず使える分、便利な場面があると思います.
興味を持っていただけた方はぜひライト・アカウントを登録してみてください.
以上です.
ディスカッション
コメント一覧
まだ、コメントがありません