1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Db2:REST APIをAzureで使いたい

Posted at

背景

データベースをREST APIを使ってアクセスしたいというニーズがあります。Db2ではDb2 REST Serviceをコンテナとして稼働させることによりRESTでアクセス可能になります。IBM CloudとAWSにはDb2の情報が多いですがAzureは少ないので投稿します。

Db2 REST Service自体の構築手順は以下のQiitaをご覧ください。
REST API による Db2アクセス

やりたいこと

Azure上に構築したDb2サーバーへRESTでアクセスしたい。具体的には以下になります。

  1. Db2 REST ServiceのコンテナをAzure Container Registory(以下、ACR)にプッシュしたい
  2. Web App for ContainersにDb2 REST Serviceをデプロイしたい
  3. Db2 REST ServiceとAzure上に構築したDb2サーバーとを接続したい(VNet統合)

環境

  1. Azure Container RegistryにDb2 REST Serviceのリポジトリーをプッシュ
  2. Web App for ContainersにDb2 REST Serviceをデプロイ
  3. Azure仮想マシンにDb2サーバーをインストール
  4. ローカルPCからDb2 REST Serviceを経由してデータベースにアクセス
区分 製品サービス
ローカルPC Windows V11
コンテナレジストリー Azure Container Registry
ミドルウェア IBM Db2 V12.1 REST Service
コンテナ実行環境 Azure App Service Web App for Containers
仮想マシンOS Ubuntu 22.04 LTS
データベース IBM Db2 V11.5 Server for LUW

注意

ネットワークのセキュリティーには言及しません。必要に応じて、プライベートエンドポイントなどを設定してください。

事前準備(説明しないこと)

  1. ローカルPC
    1. Docker Desktop or Podmanのインストール、稼働
    2. Azure CLIのインストール
  2. コンテナレジストリー
    1. リポジトリーを登録するプライベートレジストリーを作成
  3. 仮想マシン
    1. Db2サーバーのインストール、構成、稼働
    2. Db2データベースの作成

ローカルPCにPull

Db2 REST Serviceを以下のウェブサイトを参考にIBM Cloud Container RegistryからローカルPCにPullしてください。

REST API による Db2アクセスのための事前準備

ACRへPush

Pullしたコンテナイメージにタグ付け後、ACRへPushします。作業はローカルPCのPowerShellから行います。

Azureにログイン

  1. ログイン
  2. サブスクリプションを選択
  3. サブスクリプションを確認
PowerShell
az login
az account set --subscription "Your Subscription"
az account list

ACRにログイン

  1. コンテナレジストリーを指定してログイン
  2. リポジトリーを確認
  3. ACRログインサーバー名を確認
  4. タグ付けするコンテナイメージを確認
PowerShell
az acr login --name yourenv1acr
az acr repository list -n yourenv1acr --output table
az acr list --resource-group your-env1-rg --query "[].{acrLoginServer:loginServer}" --output table
docker images

タグ付け

  1. コンテナイメージにタグ付け
    1. イメージID:前節で確認したイメージID(aaaabbbbccc)
    2. ACRログインサーバー名:前節で確認したサーバー名(yourenv1acr.azurecr.io)
    3. リポジトリー名:ACRで表示したい名前(db2rest)
    4. タグ:ACRで表示したいタグ(12.1.0.0.315)
  2. タグ付けしたコンテナイメージを確認
PowerShell
docker tag aaaabbbbcccc yourenv1acr.azurecr.io/db2rest:12.1.0.0.315
docker images

ACRにPush

  1. タグ付けしたコンテナイメージをPush
  2. ACRに登録された内容を確認
PowerShell
docker push yourenv1acr.azurecr.io/db2rest:12.1.0.0.315
az acr repository show-tags -n yourenv1acr --repository db2rest

Azure Serviceプランを作成

Web App for Containersが稼働するプラン(環境)を作成します。

  1. AzureポータルからApp Serviceプランを表示
    1. 作成をクリック
  2. パラメーターを指定して作成
    1. オペレーティングシステム:Linux
    2. プランの名前:任意(db2rest)
    3. リージョン:東日本はリソース不足で時々失敗します
    4. 価格プラン:VNet統合をする場合、Basic以上

image.png

Web App for Containersを作成

Db2 REST ServiceコンテナをAzureにデプロイします。

ACRのユーザー、パスワードを確認

  1. Azureポータルから、コンテナーレジストリ→対象レジストリ→設定→アクセスキー
    1. ユーザー名
    2. パスワード

Web Appを作成

  1. デプロイ
    1. リソースグループ(-g):任意の名前(sre-1515-rg)
    2. App Serviceプラン(-p):前節で作成したプラン(db2rest)
    3. Web App名(-n):任意の名前(db2rest-env01-your-app)
    4. コンテナ(-c):登録したリポジトリー(yourenv1acr.azurecr.io/db2rest:12.1.0.0.315)
    5. ユーザー(-s):前節で確認したACRのユーザー名(yourenv1acr)
    6. パスワード(-w):前節で確認したACRのパスワード(xxxxxxyyyyyyzzzzzz)
  2. 作成したコンテナイメージを確認
PowerShell
az webapp create -g sre-1515-rg -p db2rest -n db2rest-env01-your-app -c yourenv1acr.azurecr.io/db2rest:12.1.0.0.315 -s yourenv1acr -w xxxxxxyyyyyyzzzzzz
az webapp list -g sre-1515-rg

Web Appの環境変数を登録

  1. 環境変数をコマンドで登録
    1. Web App名(-n):前節で作成した名前(db2rest-env01-your-app)
    2. リソースグループ(-g):Web Appのあるリソースグループ(sre-1515-rg)
    3. WEBSITES_PORT:Db2 REST Serviceが使用するポート番号(50050)
    4. DB2REST_DBHOSTNAME:DBサーバーのIPアドレス(192.168.1.1)
    5. DB2REST_DBNAME:接続するデータベース(test01)
    6. DB2REST_DBPORT:Db2インスタンスのポート番号(50000)

※上記以外の環境変数はDb2 REST Serviceのマニュアルを参照して設定してください。

PowerShell
az webapp config appsettings set -n db2rest-env01-your-app -g sre-1515-rg --settings WEBSITES_PORT=50050 LICENSE=accept DB2REST_DBHOSTNAME=192.168.1.1 DB2REST_DBNAME=test01 DB2REST_DBPORT=50000 DB2REST_SSLCONNECTION=false DB2REST_EXECSQL_DISABLED=false DB2REST_USE_HTTP=true DB2REST_EXPIRY=30m

登録した環境変数はポータルから確認できます。
image.png

Web Appの稼働確認

  1. curlコマンドでDb2 REST Serviceのバージョンを確認
    1. FQDN:Web App名.azurewebsites.net(db2rest-env01-your-app.azurewebsites.net)
PowerShell
curl https://db2rest-env01-your-app.azurewebsites.net/v1/version
実行結果
StatusCode        : 200
StatusDescription : OK
Content           : {"apiVersion":"315","version":"12.1.0.0"}

RawContent        : HTTP/1.1 200 OK
                    Content-Length: 42
                    Content-Type: application/json
                    Date: Tue, 26 Nov 2024 07:49:00 GMT
                    Set-Cookie: ARRAffinity=08307498aa991c84523184617d17f074bad5139bd2c0710fdf2b1a0ad3d3a9b7;Path=...
Forms             : {}
Headers           : {[Content-Length, 42], [Content-Type, application/json], [Date, Tue, 26 Nov 2024 07:49:00 GMT], [Set-Cookie,
                    ARRAffinity=08307498aa991c84523184617d17f074bad5139bd2c0710fdf2b1a0ad3d3a9b7;Path=/;HttpOnly;Secure;Domain=db
                    2rest-env01-your-app.azurewebsites.net,ARRAffinitySameSite=08307498aa991c84523184617d17f074bad5139bd2c0710
                    fdf2b1a0ad3d3a9b7;Path=/;HttpOnly;SameSite=None;Secure;Domain=db2rest-env01-your-app.azurewebsites.net]...
                    }
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 42

VNet統合

DBサーバーがある仮想ネットワークに接続します。

サブネットを作成

  1. ポータルの仮想ネットワークより空のサブネットをVNet統合用に作成
    • DBサーバーと接続できる仮想ネットワークでサブネットを作成するか、ルーティングしてください
    • DBサーバーからは作成したサブネットから接続しているように見えます

仮想ネットワーク統合

  1. ポータルからWeb Appのネットワークより仮想ネットワーク統合の未構成をクリック
  2. 仮想ネットワーク統合の追加をクリック
  3. 前節で作成したサブネットを指定、接続をクリック

image.png

注意
docker-compose.ymlからデプロイするとVNet統合ができません。その場合、未構成がグレーアウトします。

image.png

データベースへの接続確認

  1. 稼働確認用のスクリプトを修正して実行
    1. FQDN:Web App名.azurewebsites.net(db2rest-env01-your-app.azurewebsites.net)
    2. username:接続するDBサーバーのユーザー(youruser_01)
    3. password:接続するDBサーバーのパスワード(your@password)
db2rest_execsql.ps1
$res = Invoke-WebRequest https://db2rest-env01-your-app.azurewebsites.net/v1/auth `
        -Method "POST" `
        -Headers @{"Content-type"="application/json"} `
        -Body '{"dbParms": {
                  "dbHost": "", 
                  "dbName": "", 
                  "dbPort": -1,
                  "isSSLConnection": true,
                  "username": "youruser_01",
                  "password": "your@password"
                  },
                "expiryTime": "" }' 
$json = ConvertFrom-Json $res.Content
$token = $json.token

$res = Invoke-WebRequest https://db2rest-env01-your-app.azurewebsites.net/v1/services/execsql `
        -Method "POST" `
        -Headers @{"Content-type"="application/json"; "authorization"=$token} `
        -Body '{"sqlStatement": "select current timestamp as timestamp from sysibm.dual", 
        "sync": true}' 

$json = [System.Text.Encoding]::UTF8.GetString($res.RawContentStream.ToArray()) | ConvertFrom-Json
$json.resultSet

スクリプトを実行するとタイムスタンプが返されます。

実行結果
./db2rest_execsql

TIMESTAMP
---------
2024-11-28T16:01:00.832117Z

おわりに

Azureには以下のようにコンテナ実行環境がたくさんありますが、今回説明したWeb App for Containersは比較的容易に環境を構築できます。Db2 REST ServiceのようなWebアプリを検証するには向いているのではないでしょうか。

  • Web App for Containers (App Service)
  • Azure Functions
  • Azure Container Instances (ACI)
  • Azure Container Apps (ACA)
  • Azure Kubernetes Services (AKS)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?