この記事は IBM Cloud Advent Calendar 2021 の 12日目の記事です。
やってみたこと
今年はAWS Educateを大学に導入し、クラウドコンピューティングを主とした科目の授業をスタートさせることができました。IBM Cloudは以前から使っていますので、今回はAWSとIBM Cloudのマルチクラウドにチャレンジしてみます。
2021年6月に正式リリースされました「AWS ECS Anywhere」を使い、IBM Cloud上の仮想サーバーを「Externalインスタンス」として認識させ、「Metabase」のコンテナを実行します。「Metabase」は、オープンソースのローコードのBIツールで、直感的なデータ分析を行うことができます。
AWSとIBM Cloudの両方を使っていて、コンテナを使ったアプリケーション運用を行っていれば、Amazon ECS AnywhereをIBM Cloudで使う組み合わせは意外と悪くない選択肢かもしれません。
構成イメージ
使用環境の準備
IBM Cloud
IBM Cloud 上で仮想サーバーを用意します。「Virtual Server for VPC」もしくは「Virtual Server for Classic」のどちらでも構いません。金銭的に安い方は、「Virtual Server for Classic」で「一時」利用のサーバーです。今回は、2 vCPU、メモリ8GBのUbuntu Serverを使っています。
![]() |
---|
AWS
いつものAWSです。教育機関以外の場合は、AWS Management Console にアクセスします。
教育機関の場合は、AWS Educateを使った方が良いでしょう。AWS Educate であれば、クレジットカードなしで利用できます。
AWS Educateの場合は、「AWS Account」のタブをクリックし、「AWS Educate Starter Account」をクリックします。
その後、「AWS Console」をクリックすることで、通常のAWS Management Consoleにアクセスすることができます。
![]() |
---|
IBM Cloud をAmazon ECSの「External インスタンス」にする方法
実施することは、次のとおりです。
- 使用環境の準備の準備の段階で、IBM Cloud上で仮想サーバーを用意しておきます。
- Amazon ECSで、クラスター作成。
- Externalインスタンスの登録コードを作成。Amazon ECS Anywhereの利用。
- 生成されたコードを、IBM Cloud上の仮想サーバーに貼りつけて実行。
- Amazon ECSで、Meatabaseのコンテナを導入するタスクを作成。
- Amazon ECSで、タスクを実行。
- IBM Cloud上の仮想サーバーで、docker ps コマンドでコンテナ起動を確認。
- Webブラウザで、IBM Cloudの仮想サーバー上で起動したMetabaseコンテナに接続。
Amazon ECSで、クラスター作成
Amazon ECSにアクセスし、「クラスターの」作成をクリックします。
![]() |
---|
「ネットワーキングのみ」を選び、「次のステップ」をクリックします。
![]() |
---|
「クラスターの設定」で、「クラスター名」を英数字で入力します。今回は、ecs-externalとしました。入力後、「作成」をクリックします。
![]() |
---|
下図のように表示されます。「クラスターの表示」をクリックします。
![]() |
---|
Externalインスタンスの登録コードを作成。Amazon ECS Anywhereの利用
「ECSインスタンス」のタブをクリックします。次に「Externalインスタンス」をクリックします。
![]() |
---|
「Externalインスタンスの登録」では、デフォルトのままで良いので、「次のステップ」をクリックします。
![]() |
---|
生成されたコードを、IBM Cloud上の仮想サーバーに貼りつけて実行
表示されたコマンドをコピーし、IBM Cloud上で稼働する仮想サーバーに貼り付けで実行します。
![]() |
---|
IBM Cloud上で稼働する仮想サーバーに、Amazon ECSから生成されたコマンドを貼り付けて実行した様子。
![]() |
---|
下図のように処理が完了するまで待ちます。
![]() |
---|
暫く待つと、Amazon ECSのクラスター表示画面に、IBM Cloud上で稼働中の仮想サーバーが紐づきます。
![]() |
---|
Amazon ECSで、Meatabaseのコンテナを導入するタスクを作成
Amazon ECSの画面で、「タスク定義」>>「新しいタスク定義の作成」の順にクリックします。「タスク定義」には、動かしたいコンテナを定義、「タスク」を実行することで、Amazon ECSにとってのExternal、今回の構成では、IBM Cloud上の仮想サーバーでコンテナのデプロイをAmazon ECSから行います。
![]() |
---|
「起動タイプの互換性の選択」画面で、「External」を選び、「次のステップ」をクリックします。IBM Cloudだけでなく、Raspberry Piのようなエッジ環境、あるいはオンプレミス環境など、AWS以外の場合は「External」扱いです。
![]() |
---|
「タスクとコンテナの定義の設定」で、「タスク定義名」を入力します。ここでは、metabase としました。コンテナで動かしたいアプリケーション名にすると良いでしょう。
![]() |
---|
また同画面の下に移動し、「タスクメモリ」と「タスクCPU」を定義します。「タスクメモリ」はこの後に設定するコンテナの「メモリ制限」を超えないように、かつ今回の場合はIBM Cloud上の仮想サーバーのメモリを超えない値をセットします。「タスクCPU」も、今回の場合はIBM Cloud上の仮想サーバーを超えない範囲とします。
![]() |
---|
同画面の下にある「コンテナの定義」で「コンテナの追加」をクリックします。
![]() |
---|
「コンテナの追加」画面で、下図のように「コンテナ名」を入力します。「イメージ」には、コンテナの取得先を入力します。今回使用するmetabaseは、Docker Hubにイメージがありますが、プライベートレジストリを利用したい場合は、「プライベートレジストリの認証」にチェックを入れます。
また、「メモリ制限」には、「タスク定義」を超えない範囲でメモリを指定するとともに、ポートマッピングでは、metabaseの公式ドキュメントに従い、ホストポート番号とコンテナポート番号にそれぞれ3000を入力しています。各項目を入力後、「追加」をクリックします。
![]() |
---|
画面下の「作成」をクリックします。
![]() |
---|
Amazon ECSで、タスクを実行
作成した「タスク定義」が表示されます。表示されない場合は、画面左側の「タスク定義」をクリックし、作成したタスク定義画面にアクセスします。
![]() |
---|
「アクション」>>「タスクの実行」の順にクリックします。
![]() |
---|
「タスクの実行」画面で、下図のように「起動タイプ」を「External」とします。「タスク定義」には先程作成した「metabase」が選ばれているはずです。「クラスター」には、作成済みのクラスターが選ばれています。
![]() |
---|
画面下の「タスクの実行」をクリックします。
![]() |
---|
IBM Cloud上の仮想サーバーで、docker ps コマンドでコンテナ起動を確認
暫く待つと、IBM Cloud上の仮想サーバーで、コンテナが起動していることがわかります。docker ps コマンドで確認します。
![]() |
---|
Webブラウザで、IBM Cloudの仮想サーバー上で起動したMetabaseコンテナに接続
IBM Cloud上の仮想サーバーで、外部からのインバウンドで、TCPで3000番にアクセスできるようにポートを開放します。
Webブラウザで、IBM Cloud上の仮想サーバーのパブリックIP(VPCの場合は、浮動IP)を使いアクセスします。http://IPアドレス:3000
これで、Amazon ECS Anywhereを用いて、IBM Cloud上でコンテナを実行した結果を確認することができます。
![]() |
---|
「開始しましょう」をクリックし、Metabaseの初期設定を行い、サンプルデータによるダッシュボードも確認できました。
![]() |
---|
まとめ
IBM Cloudだけを使う開発者や企業よりも、AWSやMicrosoft Azureを使いつつIBM Cloudも使っているようなマルチクラウド、ハイブリッドな個人や企業が多いわけで、AWSとIBM Cloudについて、AWSとIBM Watsonの定番構成ではなく、Amazon ECS AnywhereとIBM Cloudの連携に手を出してみたところ、割と簡単に実現することができました。案外、悪くありません。