調べることにしたきっかけ
東京郊外に引っ越したくて、おすすめの物件情報を教えてくれるアプリを作ろうと思ったが、金は絶対かけたくない。
IBM Cloudを使ってどこまで無料で実現できるか知りたかったので、軽いアプリを作ったりして確かめてみました。
今回使うコードはこちらを参照ください。
rikkyrice/tryic
またこの記事は、かなり細かい部分を割愛しているので、わかりにくい部分や聞きたいことがあればご連絡ください。
無料枠について
IBM Cloudでは一定の制約のもとであれば自由にお金を掛けずに触ることができるようです。
以下のサイトを参考にし、無料枠でどの程度触れるかを調べてみました。(2023/6月現在)
IBM Cloud無料利用枠 - 日本 | IBM
主なサービスは以下にまとめています。
| サービス | 無料利用枠 | 説明 | 対応するAWSサービス |
|---|---|---|---|
| IBM Db2® on Cloud | 200MB分のデータ・ストレージ | 強力なIBM Db2エンジンで動作するフルマネージドのクラウドSQLデータベース | RDS or Aurora |
| IBM Cloud CodeEngine | 10万vCPU秒/月 | マネージド・サーバーレス・プラットフォーム上でアプリケーション、バッチ・ジョブ、コンテナを実行できる。IBMの現従業員は対象外 | Fargate |
| IBM Cloud Kubernetes Service | 1クラスター/30日間 | ネイティブなKubernetes環境で、高いセキュリティーと可用性を保ちながらアプリケーションを実行できる。性能は低いが一連のKubernetesを用いたアプリケーションのライフサイクルを試せる | EKS |
| IBM Cloud® Container Registry | 5GBのプル・データ転送/月 | フルマネージドの専用レジストリーでDockerコンテナ・イメージを管理できる | ECR |
| IBM Cloud® Continuous Delivery | 500件のデリバリー・パイプライン・ジョブ | クラウドでGit、課題管理、CI/CDパイプライン、Eclipse Orion Web IDEを活用してDevOpsのベスト・プラクティスを実践できる | Code Pipeline |
| IBM Cloud® Object Storage | 25GB/月 | 非構造化データ向けに柔軟かつコスト効率の高いストレージが提供される。非アクティブの場合サービスが削除される | S3 |
| IBM Cloud® Functions | 500万件の実行/月 | 受け取ったイベントに応答して、定義された機能をスケーラブルに実行できる | Lambda |
| IBM Cloudant | 1GB分のデータ・ストレージ | Web、モバイル、IoT、およびサーバーレス・アプリケーション向けにスケーラブルなJSONドキュメント・データベースを提供が提供される | DynamoDB |
| IBM Cloud MQ | 1万件/月 | マルチクラウド環境において、インフラストラクチャー全体を管理しながら、卓越したスピードと信頼性、セキュリティーによるメッセージングを実現できる | SQS |
| IBM Cloud® Schematics | 無料 | Terraformをサービスとして活用し、環境全体でIBM Cloudのリソースのプロビジョニングと管理を自動化できる | Cloud Formation |
| IBM Watson® Assistant | 1万API呼び出し/月 | アプリケーションに自然言語インターフェースを追加し、ユーザーとの対話を自動化できる | Lex |
| IBM Watson® Text to Speech | 1万文字/月 | テキストから自然な話し方の音声を合成できる | Polly |
他にもAI系のサービスなど多くのサービスで無料枠がありますので、ぜひご確認ください。
プロモーションについて
IBM Cloudでは料金がかかるサービスについてプロモーションコードを入力することでクレジットを獲得し、疑似的に無料で使えるようにできる仕組みがあるようです。
しかし、クレジットがなくなると課金が発生するため、注意が必要となります。
また、IBMの現従業員は対象外となります。
プロモーションが適用できるサービスは以下があリます。(2023/6月現在)
| サービス | 無料利用枠 | 説明 | 対応するAWSサービス |
|---|---|---|---|
| IBM Cloud VPC | 1000米ドル | IBM Cloud Virtual Server for VPC, IBM Cloud Block Storage for VPCなど、IaaSサービスに適用できるプロモーション | VPC, EC2, EBS, AMI |
| IBM Cloud Object Storage | 1500米ドル | 25GB/月無料に加えて、90日間有効な1500米ドルが利用できるプロモーション | S3 |
| IBM Cloud Databases | 600米ドル | IBM Cloud Databases for MongoDB, Redis, PostgreSQL, Elasticsearchで90日間利用できるプロモーション | RDS, ElastiCache |
| IBM Cloudant | 600米ドル | 1GB分のデータ・ストレージに加えて、90日間有効なプロモーション | DynamoDB |
準備
IBM Cloudのアカウントを作るだけです。
メールアドレスはなんでも大丈夫で、作った瞬間から無料枠を利用可能となります。
ただし、クレジットカードの登録が必要であり、これがなかなか承認されず悲しい。。。(住所とかが海外の入力方式でそこが承認されにくいのかも)
利用方法
Db2
遊び目的で使うようなテーブルデータだったら料金は気にせず利用できると思います。
- ibm cloudにログインする
- 普通にマネジメントコンソールにログイン
- db2サービスを作る
- カタログから
Db2を探して作成する(ダラスとかじゃないと無料で作成できないです)
- カタログから
- Go to UIでEditorを開く
- SQLを流す
- サービス資格情報を作成する
create table meibo (
id varchar(10) not null,
name varchar(30) not null,
intro varchar(300) not null,
primary key (id)
);
insert into meibo values
('r457kb68yw', 'マイケル', '趣味はランニングです。25歳の男です。'),
('hg97xzp060', 'ケビン', '36歳2児のパパです。金融関係の仕事をしています。'),
('6vi36q0xp5', 'ジェシカ', '19歳の女子大生です。情報工学部に所属しています。');
IBM Cloud CodeEngine + Db2
これも呼び出したCPUの利用時間によって課金されますが、学習目的ぐらいでは課金されるまでの利用は気にしなくて良いと思います。
簡単な名簿アプリを作ってDb2と繋げて確認できるAPIを作ったので、それをデプロイして疎通確認してみます。
- アプリケーションをコンテナ化してパブリックレジストリに格納する(IBM Container RegistryでももちろんOK)
- CodeEngineのプロジェクトを作る
- カタログからCodeEngineを探す
- プロジェクトを新規作成する(東京でも良いです)
- アプリケーションの作成を行い、イメージ参照に格納したイメージ名を入力する(パブリックならこれでOK、ICRなどプライベートならプルシークレットが必要)
- 作成したプロジェクト名をクリックし、アプリケーションの作成を押す
- イメージ参照にDockerHubにプッシュしたイメージ名をセットする(ICRに格納した人は
イメージの構成を押し、作ったリージョンの名前空間とコンテナイメージを入力して完了を押す) - リスニングポートは8080
- 作成する
これで、https://ドメイン名/meiboでアクセスできます。
ドメイン名はドメイン・マッピングのパブリックで確認できます。
別途ロギングサービスを作成して紐づけることで、コンテナ内のログを出力することができます。(無料枠ではかなり使いにくい)
またCI/CD環境の構築も可能です。
コンテナイメージに更新があった場合は自動デプロイを制御することができます。
IBM Cloud Kubernetes Service + Db2 + Continuous Delivery
30日間の完全なフリーのクラスターを作ってkubernetesの操作を行うことが可能です。
secretを作ったりtemplateを作ったり永続ボリュームを作ったりすることもできるので、かなり汎用的なkubernetesの操作を実践的に学ぶことができます。
またCD/CIも無料で使えるので便利です。
しかしドメインマッピングができないのでIPアドレス+ポートでアクセスする必要がある点は注意が必要です。
- GitHubにリポジトリを作成する
- サンプルアプリを自分のGitHubリポジトリにプッシュする
- フリークラスターを作成する
- IBM Cloudのカタログから
Kubernetesを探す - フリークラスターを作成する(適当なリージョンに作成されます)
- IBM Cloudのカタログから
- KubernetesクラスターはIBM Cloud Container Registryからコンテナイメージをプルしてくるので、ICRで名前空間を作成しておく
- カタログからContainer Registryを探す
- 東京リージョンに名前空間を作る(これによりICRに格納するためのコンテナイメージは、prefixに
jp.icr.io/名前空間をつける必要があります)
- DevOpsからツールチェーンを作成する
- クラスタビューからDevOpsをタップし、
ツールチェーンの作成を押す -
Kubernetesアプリの開発をタップ - リージョンは
東京、ソース・プロバイダーはGitHubで、自分のGitHubアカウントを認証する - リポジトリー・タイプは
既存として、自分のGitHubリポジトリーを選択する - Delivery PipelineのIBM Cloud APIキーを新規作成する
- Container Registryリージョンは
東京を選択し、クラスター名前空間はdefaultとする - 最後にツールチェーン名を
tryic-tcなどに変更する
- クラスタビューからDevOpsをタップし、
- パイプラインの各ステージの構成を変更する
-
ci-pipelineをタップする -
CONTAINERIZEステージのステージの構成を押し、Build container imageジョブのビルド・スクリプトの以下を修正する-
source <(curl -sSL "${COMMONS_HOSTED_REGION}/scripts/build_image_buildkit.sh")->source ./scripts/build_image_buildkit.sh
-
-
DEPLOYステージのステージの構成をおし、Deploy to Kubernetesジョブのデプロイ・スクリプトの以下を修正する-
source <(curl -sSL "${COMMONS_HOSTED_REGION}/scripts/check_and_deploy_kubectl.sh")->source ./scripts/check_and_deploy_kubectl.sh
-
- デプロイをし直すため、
BUILDステージの再生ボタンをタップする
-
- デプロイが完了したらDeploy to KubernetesのログにアクセスURLが載っている
-
DEPLOYステージのログ及び履歴の表示を押す - 一番下までスクロールすると
http://{パブリックIPアドレス}:{ポート}形式でアクセスURLが載っているのでタップ
-
これで疎通ができます。
ローカルにCLIをインストールするとKubernetesの操作がCLIでできるようになりますので、ぜひお試しください。
IBM Cloud Shellを使ってブラウザでの操作も可能です。
IBM Cloud Object Storage + IBM Cloud Functions + Cloudant
IBM CloudのオブジェクトストレージであるICOSに静的WEBサイトをアップロードし、IBM Cloud FunctionsをWEBアクションとして呼び出すことで簡単なアプリケーションを作成することができます。
html+jsのファイルをindex.htmlという名前でアップロードすることで閲覧できるようになります。
また、CloudantというNoSQLのデータベースと繋いでデータの閲覧を制御してみようと思います。
- Cloudantリソースを作成する
- カタログから
Cloudantを探す - Liteプランでリソースを作成する(Liteプランは一つしか作成できません)
- カタログから
- データベースを作成、ドキュメントを作る(json)
-
Launch Dashboardをタップ -
Create Databaseをタップし、meiboという名前をつける -
Create Documentをタップし、icos/data.jsonの各要素を一つずつ作成する(ブラウザでの操作ではBulkオペレーションができないので、jsonをそのまま貼り付けても全要素が作成されません)
-
- サービスの資格情報を作成して、API KeyとURLをメモしておく
-
サービス資格情報をタップし、新規資格情報を作成する - 資格情報のうち、
apikeyとurlをメモする
-
- IBM Cloud Functionsに名前空間の設定をし、アクションを作成する
- カタログから
Cloud Functionsを探す -
名前空間の設定から名前空間を作成する -
アクションから作成を押し、アクションを選択する -
ランタイムはnode16として作成 -
icos/cf.jsをコピーし貼り付ける -
CLOUDANT_URLに先ほどコピーしたurlを貼り付ける -
CLOUDANT_APIKEYに先ほどコピーしたapikeyを貼り付ける - 保存する
- カタログから
- Webアクションを有効にしてパブリックURLをメモしておく
-
エンドポイントタブからWebアクションとして有効化を押して保存する -
パブリックURLをコピーする
-
- index.htmlでAPIリクエストを送っているjavascriptのURLを書き換える
-
icos/index.htmlの62行目のURLをパブリックURLに書き換える
-
- ICOSリソースを作成し、バケット作成から静的Webサイトのホスティングを選択し、index.htmlをアップロードする
- カタログから
Cloud Object Storageを探す -
Liteプランを選択して作成する -
バケットの作成をタップし、静的Webサイトのホスティングをタップする -
パブリックアクセスの有効化をオンにして、次へを押す -
icos/index.htmlをアップロードする - バケットを作成すると、
静的Webサイト・ホスティングにエンドポイントが切られているのでアクセスする
- カタログから
これで疎通できます。
そのほか色んな関数をデプロイして、html+jsで呼び出すことで簡単にアプリを構築できます。
LINE Messaging API + IBM Cloud Functions + Cloudant
HTMLを書かなくても、LINE Messaging APIと繋ぐことで、リッチなデータ管理アプリケーションを瞬時に構築することができます。
作り方は簡単で、LINE Messaging APIのアクションにCloud FunctionsのパブリックURLを指定するだけです。
ユーザーからのチャットをルーティングし、必要なデータをCloudantからクエリしてきて、返すだけでデータの管理ができます。
私は、suumoから物件情報をスクレイピングしてCloudantに条件に合致したデータを保存する関数を、バッチとしてデプロイし、
LINE Botにおすすめ物件を見せてと送ることで楽々確認できるアプリを作ったりしています。
全て無料でできるので、ぜひ試してみてください!