(初心者向け)3scale 再入門

こんにちは、ソリューションアーキテクトの蒸野(ムシノ)です。

今回は 「Red Hat 3scale API Management」について取り上げてみたいと思います。 今更APIの重要性を説明する必要はないかと思いますので、こちらの「API管理と3scaleの基礎知識」をご覧いただけたらと思います。 thinkit.co.jp

API Managementの特徴と言えばAPIの管理が容易になるということですが、このAPIの管理が容易になるというのは具体的にはどういうことかまずは整理したいと思います。 一般的にAPIを公開した後、API管理者が行わなければならない課題は多岐に渡ります。APIを作成した時点では始まりに過ぎず、例えば下記の図のような課題があります。 f:id:nmushino:20220328103719p:plain

3scale の特徴はAPI利用者からAPI提供者までこのようなAPI管理に関わる課題を包括的に解決してくれる点にあります。 API提供者は、API登録やセキュリティの設定、API利用状況管理を行い、API利用者はデベロッパーポータルなどからAPI仕様を確認し、アプリケーションの開発を行って行きます。

また、 3scale は大きく「API Manager」と「API Gateway」という2つのコンポーネントに分かれています。「API Gateway」はnginxをベースとした非常に軽量なゲートウェイとして動作するというのが特徴になっています。「API Gateway」と「API Manager」は非同期で通信をすることで高い可用性を実現しており、API呼び出し時に遅延が少なく、パフォーマンスとスケーラビリティに優れているという点も 3scale の差別化要素になっています。

f:id:nmushino:20220328101924p:plain

3scaleの機能としては次のようなものが挙げられます。 f:id:nmushino:20220328102358p:plain

Red HatではAPI管理を簡単に始めることができる SaaS版 3scale を提供しています。 本記事ではこのSaaS版環境を使って 3scaleの機能を具体的に紹介していきたいと思います。 まずは、下記にアクセスして下さい。

https://www.3scale.net

この環境ではトライアル環境として3scaleをご利用いただけます。「Sign up」していただくことで90日間のトライアルアカウントの申請することができ、無償でお試し頂くことができます。 もちろんいつでもアップグレード可能です。

SaaS版 3scale への Sign up

まずは必要事項を記載していただきます。「お名前」「メールアドレス」や「ご利用目的」にあわせてご質問事項にお答えいただければと思います。また、赤枠で示した部分はSaaS版 3scale内でユニークである必要があります。プロジェクト名や会社名などを組み合わせ、分かりやすい名称を付けることをお勧めいたします。

f:id:nmushino:20220328112419p:plain

確認メールからアクティベーションする

「Sign up」 すると次のようなメールが届きますので、URLをクリックして「Activation」します。

f:id:nmushino:20220330105421p:plain:w800

アクティベーション後のアクセス

アクティベーション後は次にような画面になります。
ここからは初期設定を進めていきます。基本的にデフォルト設定のまま、ボタンをクリックしていきます。

f:id:nmushino:20220328125812p:plain:w600

1.How does 3scale work?

f:id:nmushino:20220330111021p:plain:w600

2.Add your API

f:id:nmushino:20220328141929p:plain:w600

3.Design a Product

f:id:nmushino:20220328142019p:plain:w600

4.Use your Backend in your Product

f:id:nmushino:20220328142108p:plain:w600

5.make a test GET request

f:id:nmushino:20220330111818p:plain:w600

6.you are running in 3scale

f:id:nmushino:20220330111553p:plain:w600

7.What's next?

f:id:nmushino:20220328142327p:plain:w600

3scale 管理ポータル画面

ここからは一通り管理ポータル画面の紹介を行います。 f:id:nmushino:20220328142417p:plain

管理ポータル画面:ダッシュボード

上部にあるメニューから「Dashboard」を選択します。「APIs」>「Products」 からAPI設定を確認します。
「Products」のメニューから「Overview」を選択します。 f:id:nmushino:20220328144705p:plain

管理ポータル画面:API設定(Integration)

上部メニューが「Products」になっていることを確認します。左のメニューから「Integration」>「Configuration」をクリックします。 ここではAPIゲートウェイの設定やエンドポイントの設定を行います。 f:id:nmushino:20220328150321p:plain

管理ポータル画面:API設定(Application plans)

上部メニューが「Products」になっていることを確認します。左のメニューから「Application」>「Application plans」をクリックします。 ここではアプリケーションプランの設定を行います。 アプリケーションプランは、APIを使用するためのルール(ベーシック、プレミアムのような、制限事項、価格など)を設定します。 f:id:nmushino:20220330112852p:plain

管理ポータル画面:分析

上部メニューが「Products」になっていることを確認します。左のメニューから「Analytics」>「Traffic」をクリックします。 APIの利用状況に関する利用状況を表示します。一通り、いろんな観点からの利用状況を確認することができます。 f:id:nmushino:20220330113150p:plain

標準では時間表示が「UTC」になっていると思いますので、
上部メニューから「Account Settings」>「Account Details」からEdit>から「Time Zone」を変更することができます。 f:id:nmushino:20220330113652p:plain

管理ポータル画面:デベロッパー管理

上部メニューが「Audience」になっていることを確認します。左のメニューから「Accounts」>「Listing」をクリックします。 API利用者になるデベロッパーに関する情報を表示します。対象デベロッパーを選択すればデベロッパー詳細が表示されます。 f:id:nmushino:20220330113844p:plain

管理ポータル画面:アプリケーション管理

上部メニューが「Audience」になっていることを確認します。左のメニューから「Applications」>「Listing」をクリックします。 デベロッパーが作成したアプリケーションを確認することができます。 f:id:nmushino:20220330114026p:plain

管理ポータル画面:デベロッパーポータルの管理

上部メニューが「Audience」になっていることを確認します。左のメニューから「Developer Portal」>「Visit Portal」をクリックします。 別ブラウザでデベロッパーポータル画面を見ることができます。 f:id:nmushino:20220330114411p:plain

「デベロッパーポータル」ではこのような画面が表示されます。 f:id:nmushino:20220328170229p:plain:w600

サンプルデータからの変更

それではセットアップ時のサンプルデータから変更してみて、操作方法の理解を深めていきましょう。
今回は下記の内容を実施してみたいと思います。

1. APIの設定:API Backend変更とMethodの定義
2. APIの設定:Integrationの設定

1. APIの設定:Backend変更とMethodの定義

1.1. API Backend を更新します

「Dashboard」>「Backends」>「Edit」にアクセスします。

下記にようにサンプルデータを変えてみます。入力後「Update Backend」をクリックします。

・Description:Backend of API Test

ここではサンプルから「Description」のみを変更していますが、お試ししたいAPIがあれば「Private Base URL」や「Name」なども変更することができます。

f:id:nmushino:20220328172055p:plain

1.2. Method を作成します。

次に、左のメニューから「API Backends」>「Methods and Metrics」>「Add method」から Method を作成します。

1.Articles
下記にように入力し、「Create Method」をクリックします。

Friendly Name:Get Articles
System Name:get_articles

f:id:nmushino:20220328174549p:plain

2.Categories
下記にように入力し、「Create Method」をクリックします。

Friendly Name:Get Categories
System Name:get_categories

f:id:nmushino:20220328174611p:plain

3.Brand
下記にように入力し、「Create Method」をクリックします。

Friendly Name:Get Brand
System Name:get_brand

f:id:nmushino:20220328174626p:plain

1.3. Mapping Method を作成します。

次も左のメニューから「API Backends」>「Mapping Rules」>「Create Mapping Rules」から Rule を作成します。

1.Articles
下記にように入力し、「Create Mapping Rule」をクリックします。

Pattern:/articles
Method:Get Articles

f:id:nmushino:20220328175403p:plain

2.Categories
下記にように入力し、「Create Mapping Rule」をクリックします。

Pattern:/categories
Method:Get Categories

f:id:nmushino:20220328175418p:plain

3.Brand
下記にように入力し、「Create Mapping Rule」をクリックします。

Pattern:/brands/{id}
Method:Get Brand

f:id:nmushino:20220328175433p:plain

最終的にはこのようなリストになります。

f:id:nmushino:20220328175548p:plain

2. APIの設定:Integrationの設定

2.1. Integration を更新します

「Dashboard」>「Products」>「Integration」からBackendの変更内容を有効にすることができます。 その前に、URLパターンで “/”を残しておくとAPIのコール数が重複してカウントされるので左メニューの「Integration」>「Mapping Rules」から“/”を削除します。 同画面にアクセス後、ゴミ箱アイコンから“/”を削除しておきます。

次に左メニューの「Integration」>「Configuration」をクリックします。 三角の注意マークが表示され、「Staging APIcast」と「Production APIcast」共にプロモーションできる状態になっているかと思います。 マッピングルールも確認し、先程設定した「Articles 」「Categories」「Brand」が反映されていることも確認しておきましょう。

f:id:nmushino:20220328182016p:plain

ステージングとプロダクション環境にデプロイします。それぞれプロモーションをクリックしデプロイを実行します。
無事デプロイされ、それぞれバージョン番号が変更(もしくは付与)されたことが分かります。 f:id:nmushino:20220328182252p:plain

2.2. APIの疎通確認

それでは設定したIntegrationの「Staging APIcast」と「Production APIcast」のレスポンスを試してみます。
「Staging APIcast」にある「Example curl for testing」のcurlコマンドをそのまま実行してみることもできますし、下記のようにプロダクト環境に変更しリクエストすることもできます。下記の例ではマスクしていますがご自身の払い出された 3scale 環境に合わせて実行してみてください。ちなみに、「user_key」は「Staging APIcastにあるExample curl for testing」を参考にします。

curl "https://api-xxxxxxxxxxxx.production.gw.apicast.io:443/articles?user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
{
  "method": "GET",
  "path": "/articles",
  "args": "user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "body": "",
  "headers": {
    "HTTP_VERSION": "HTTP/1.1",
    "HTTP_HOST": "echo-api.3scale.net",
    "HTTP_X_REAL_IP": "127.0.0.1",
    "HTTP_X_3SCALE_PROXY_SECRET_TOKEN": "Shared_secret_sent_from_proxy_to_API_backend_xxxxxxxxxxxxxxxxxxxxxx",
    "HTTP_USER_AGENT": "curl/7.79.1",
    "HTTP_ACCEPT": "*/*",
    "HTTP_X_FORWARDED_FOR": "省略します",
    "HTTP_X_FORWARDED_PROTO": "https",
    "HTTP_X_ENVOY_EXTERNAL_ADDRESS": "省略します",
    "HTTP_X_REQUEST_ID": "省略します",
    "HTTP_X_ENVOY_EXPECTED_RQ_TIMEOUT_MS": "15000"
  },
  "uuid": "287d9f81-ee13-4d77-a6a7-2d67a500de6c"
}

curl "https://api-xxxxxxxxxxxx.production.gw.apicast.io:443/categories?user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
{
  "method": "GET",
  "path": "/categories",
  "args": "user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "body": "",
  "headers": {
    "HTTP_VERSION": "HTTP/1.1",
    "HTTP_HOST": "echo-api.3scale.net",
    "HTTP_X_REAL_IP": "127.0.0.1",
    "HTTP_X_3SCALE_PROXY_SECRET_TOKEN": "Shared_secret_sent_from_proxy_to_API_backend_xxxxxxxxxxxxxxxxxxxxxx",
    "HTTP_USER_AGENT": "curl/7.79.1",
    "HTTP_ACCEPT": "*/*",
    "HTTP_X_FORWARDED_FOR": "省略します",
    "HTTP_X_FORWARDED_PROTO": "https",
    "HTTP_X_ENVOY_EXTERNAL_ADDRESS": "省略します",
    "HTTP_X_REQUEST_ID": "省略します",
    "HTTP_X_ENVOY_EXPECTED_RQ_TIMEOUT_MS": "15000"
  },
  "uuid": "5b4e0dab-48e5-4fe4-a1ec-556ccd2afa91"
}

curl "https://api-xxxxxxxxxxxx.production.gw.apicast.io:443/brands/1?user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
{
  "method": "GET",
  "path": "/brands/1",
  "args": "user_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "body": "",
  "headers": {
    "HTTP_VERSION": "HTTP/1.1",
    "HTTP_HOST": "echo-api.3scale.net",
    "HTTP_X_REAL_IP": "127.0.0.1",
    "HTTP_X_3SCALE_PROXY_SECRET_TOKEN": "Shared_secret_sent_from_proxy_to_API_backend_xxxxxxxxxxxxxxxxxxxxxx",
    "HTTP_USER_AGENT": "curl/7.79.1",
    "HTTP_ACCEPT": "*/*",
    "HTTP_X_FORWARDED_FOR": "省略します",
    "HTTP_X_FORWARDED_PROTO": "https",
    "HTTP_X_ENVOY_EXTERNAL_ADDRESS": "省略します",
    "HTTP_X_REQUEST_ID": "省略します",
    "HTTP_X_ENVOY_EXPECTED_RQ_TIMEOUT_MS": "15000"
  },
  "uuid": "adc0877e-0303-4023-a784-4fca5e2e9a2f"
}

最後に

いかがでしたでしょうか?
SaaS版 3scale を使った環境で、直ぐにでもAPI管理を始めることができることご理解頂けたのではないでしょうか? また、Red Hat では、本記事の内容を含んだAPI管理の基本的な操作を理解いただける無償ハンズオントレーニングを実施しています。 興味を持っていただけましたら、是非とも担当営業にお声がけいただけたらと思います。

参考情報として以下、掲載させていただきます。
* API管理と3scaleの基礎知識 | Think IT(シンクイット)
* Red Hat 3scale API Management
* Red Hat OpenShift API Management
* SaaS 版 Red Hat 3scale API Management リリースノート - Red Hat Customer Portal
* スタートガイド Red Hat 3Scale 2-saas | Red Hat Customer Portal

補足:
「2021 Gartner Magic Quadrant for Full Lifecycle API Management」について補足させていただきます。 最近お問い合わせが多い内容につき、少しご注意事項として記載させていただきます。「2021 Gartner Magic Quadrant for Full Lifecycle API Management」ではRed Hatが Niche Players として位置づけられています。しかし、Red Hat では「Red Hat 3scale API Management」や「Red Hat OpenShift API Management」にこれまでと変わらず積極的な投資を行っており、2021年も多くのお客様に支持をいただいております。またForresterは「API Management Solutions, 2020」において Red Hat「Contender」から「Strong Performer」に引き上げたことを発表しました。また、KuppingerColeは2021年8月にRed Hatをリーダーとして認定しました。Red HatとしてはアプリケーションのAPI連携はもちろんのこと、データストリーミング、メッセージングなどのクラウドネイティブアプリケーションプラットフォームの一部としてのAPI Managementを求めることが多くなっているため、クラウドネイティブアプリケーションのための優れたAPI基盤を提供しています。「2021 Gartner Magic Quadrant for Full Lifecycle API Management」においては Red Hat が提供するクラウドネイティブアプリケーションのためAPI基盤の全て表したものではないことにご注意頂けたらと思います。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。