検索

クリアフィルター
記事
Mihoko Iijima · 2020年12月20日

データベース以外のファイルをミラーリングで同期する方法があるのかどうか

これは InterSystems FAQ サイトの記事です ミラーリングが同期の対象とするのはデータベースファイルのみです。 アプリケーションに必要なその他のファイル(CSPファイル、画像ファイル、ドキュメントファイルなど)をミラーセットを構成する二台のサーバー間で同期させるには、 NASなどを導入して共有ディスク上にそれらのファイルを配置する方法 または同期ソフトを導入して二台のサーバー間のファイルを同期させる方法 などの方法が考えられます。 また、2の方法では Windows 上では RoboCopy、Linuxの場合には rsync という同期ソフトを使った実例があります。
記事
Hiroshi Sato · 2021年12月20日

エラーの原因と対処法

これは、InterSystems FAQサイトの記事です。 CSPアプリケーションでは、リクエスト処理時間がサーバー応答タイムアウト値(CSPゲートウェイ管理ページで設定、既定値60 sec)を経過すると、CSPゲートウェイからクライアントブラウザにタイムアウトを通知し、処理を続けているデータプラットフォームサーバプロセスにエラーを発生させます。 エラーが発生している処理を確認して頂き、処理遅延の改善、例えばタイムアウトが発生しないように処理内容を見直して応答時間を短くすることや必要に応じてサーバ応答タイムアウト値を大きくすることで対処可能です。
記事
Megumi Kakechi · 2021年3月25日

Base64文字列でクラスに画像を保存・復元する方法

これは InterSystems FAQ サイト の記事です。 以下のサンプルでは、画像ファイルをクラスプロパティにBase64文字列にエンコードして保存し、再びそれをBase64でデコードし、別のファイルに復元しています。 【使用クラス】 Class User.test Extends %Persistent { Property pics As %GlobalBinaryStream; } 【取込み時】 set x=##class(User.test).%New() // ここに保存 // 画像準備 set file=##class(%File).%New("c:\temp\Mii.png") do file.Open("RUK\BIN\") for { if file.AtEnd=1 quit // 画像を1024 byteずつ Base64形式に変換(エンコード) set cnt=file.Read(1024) set b64=$system.Encryption.Base64Encode(cnt) // b64: 1402byte do x.pics.Write(b64) } do x.%Save() do file.Close() 【上記クラスに保存したBase64から画像復元】 // 復元先ファイル set file2=##class(%FileBinaryStream).%New() do file2.LinkToFile("C:\temp\xx.png") // User.test クラス保存したデータをオープン set x=##class(User.test).%OpenId(1) for { if x.pics.AtEnd=1 quit set b64=x.pics.Read(1402) set cnt=$system.Encryption.Base64Decode(b64) do file2.Write(cnt) } do file2.SaveStream()
記事
Mihoko Iijima · 2021年3月26日

IRISTEMP / CACHETEMP 上のグローバルのみを参照する方法について

これは InterSystems FAQ サイトの記事です。 管理ポータルを使用して確認する場合は、以下の手順で参照できます。 管理ポータル > [システムエクスプローラ] > [グローバル] の画面で、ネームスペースではなく データベース を指定し、IRISTEMP / CACHETEMP データベースを選択すると参照できます。 ターミナル上で確認する場合は、znspace(省略形:zn)コマンドのパラメータとしてネームスペース名ではなく、データベースディレクトリ名を指定することで該当データベースのみに存在するグローバルを参照できます。 IRISTEMP データベース上のグローバルを参照する場合、以下例のように移動します。 USER>zn "^^../IRISTEMP" ..iris\mgr\iristemp\>
記事
Makiko Kokubun · 2021年6月1日

動画:Python エンジニアが IRIS を使う場合の2つの方法と今後の計画

*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。 IRIS の ObjectScript を使えば、ビジネスロジックの記述からキーバリュー形式のデータ操作まで様々な処理が記述できます。ですが、残念ながら Python のように豊富なライブラリを利用し、機械学習をはじめとする Python が得意とすることまでは単独では行えません。「ObjectScript から Python を呼べたら?」を実現するための計画中機能も含め、IRIS がサポートする Python の利用方法をご紹介します。 この動画の講演資料(PDF)もご用意しました。動画の中でご紹介している技術資料へのURLは、こちらの資料をご活用ください。
記事
Mihoko Iijima · 2021年7月13日

管理ポータルにログインできない場合の確認項目

これは InterSystems FAQ サイトの記事です。 管理ポータル接続時に指定しているWeb サーバポートが正しい番号を指定しているかご確認ください。 Windows にクライアントツールのインストールを行っている場合は、ランチャーに登録している接続サーバの設定に問題がある場合が考えられます。 ランチャー > 優先接続サーバ > 追加/編集 で、接続先の Webサーバポートが正しく設定されているかご確認ください。 Web サーバポートが不明な場合は、インストールディレクトリにある構成ファイル(cache.cpf または iris.cpf)をテキストエディタで開き、“WebServerPort” の項目で確認できます。 例) 【IRIS2018.1~】 WebServerPort=52773 【Caché2009.x~】 WebServerPort=57772 【Caché5.1~2008.x】 WebServer=ON,57772
記事
Makiko Kokubun · 2021年7月6日

動画:Performance 101

*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。 稼働後のシステムで、お客様から「パフォーマンスが思ったように出ない」と問い合わせを受けることが良くあります。漠然とした「遅い」状況をどのように解決すればいいのでしょう? パフォーマンスに困ったときにどこに着目し、どのツールで調べていくか、お客様から日々ご相談をいただくカスタマーサポートから、解決に向かうアプローチの「イロハ」をご紹介します。 この他にも、開発者コミュニティでは、パフォーマンスに役立つ技術情報を公開しています。こちらも合わせてご覧ください。
記事
Mihoko Iijima · 2021年9月5日

使用中のライセンス情報を取得する方法

これは InterSystems FAQ サイトの記事です。 %SYSTEM.License クラスのメソッド利用すると、ライセンス情報を取得できます(実行時は、$SYSTEM.License.メソッド名() と記述します)。 %SYSTEM.License クラスは、ライセンスユーティリティ用システムオブジェクトです。 ユーティリティの詳細については、添付資料をご参照ください。(クラス詳細については、クラスリファレンス内 %SYSTEM パッケージ以下 License クラスも併せてご覧ください。) また、ライセンス情報は、管理ポータルからも確認できます。 ライセンスキー情報: [システム管理] > [ライセンス] 以下 ライセンス使用状況: [システムオペレーション] > [ライセンス使用量] 以下
記事
Tomoko Furuzono · 2021年12月7日

UTF-8で保存されたHTMLファイルをリクエストすると、日本語が文字化けする

これは、InterSystems FAQサイトの記事です。 プライベートWebサーバを使用して、HTMLファイルをリクエストした際に、日本語が文字化けする場合があります。その場合には、HTMLファイルをBOM(バイト・オーダー・マーク)付で保存してください。 ※原則的に、プライベートWebサーバを使用してアプリケーションを稼働することは推奨しておりません。 アプリケーション稼働には、必ず、IISやApache等の製品版のWebサーバを使用してください。   プライベートWebサーバについては、以下のドキュメントをご参照ください。 プライベート Web サーバおよび管理ポータル【IRIS】 プロダクション Web サーバおよび Caché 付属のプライベート Web サーバ
記事
Hiroshi Sato · 2022年8月1日

ユーザーがブラウザの閉じるボタン(Xボタン)を押してCSPページを終了した時にサーバで検知する方法

これは InterSystems FAQ サイトの記事です。 残念ながら良い方法はありません。 もし処理の流れとして突然処理を中断されると不都合がある場合には、OnunloadHandler内でalertメソッドにより、Xボタンを押さないように注意を促すようなメッセージを出す方法が考えられます。 一般的には、ユーザ都合で処理中断されてもサーバ側処理内でデータの整合性等に不都合が発生しない様にアプリケーションの実装を行う必要があります。 ページのアンロード時に呼び出されるOnunloadHandler内でサーバ・メソッドを呼び出す方法は様々な問題があるため、使用することはお勧めしません。
記事
Hiroshi Sato · 2022年7月25日

ミラーリングでデータベース以外のファイルを同期する方法

これは InterSystems FAQ サイトの記事です。 ミラーリングが同期の対象とするのはデータベースファイルのみです。 アプリケーションに必要なその他のファイル(CSPファイル、画像ファイル、ドキュメントファイルなど)をミラーセットを構成する二台のサーバー間で同期させるには、 NASなどを導入して共有ディスク上にそれらのファイルを配置する方法 または同期ソフトを導入して二台のサーバー間のファイルを同期させる方法 などの方法が考えられます。 また、2の方法ではWindows上ではRoboCopy、Linuxの場合にはrsyncという同期ソフトを使った実例があります。
記事
Tomoko Furuzono · 2025年3月31日

IRISのSQLでサポートされているSQLウィンドウ関数について

これは、InterSystems FAQ サイトの記事です。 ウィンドウ関数は、結果セットを部分的に切り出した領域に集約関数を適用できるもので、WHERE GROUP BY および HAVING 節が適用された後、SELECT クエリで選択された行に対して作用します。IRIS/IRIS for Health 2021.1からサポートしています。サポートされるウィンドウ関数は以下の通りです。 FIRST_VALUE(field) PERCENT_RANK() RANK() ROW_NUMBER() SUM(field) 詳細については、下記ドキュメントページをご確認ください。ウィンドウ関数の概要関連記事:IRIS SQLでは OFFSET/LIMIT句のような機能をサポートしてますか? IRIS SQLクエリで取得した結果セットのランキング(順位)を算出する方法
記事
Mihoko Iijima · 2025年7月3日

文字コードが不明なファイルや文字列を正しく処理する方法

これは InterSystems FAQ サイトの記事です。 InterSystems 製品では、ファイルオープン時に文字コードを指定すれば指定の文字コードで正しくファイルの中身を処理できます。 文字コードを指定しない場合、InterSystems 製品をインストールした OS に合わせて設定されたファイル I/O 用文字コードを利用してファイルをオープンします(Linux 系は UTF8、Windows は SJIS)。 また、文字列については文字コードが判明していれば $ZCONVERT() 関数を使用して指定文字コードで文字列を処理することができます。  例)$ZCONVERT(文字列,"I","IRIS内文字コード") 文字コードが不明な場合、残念ながら InterSystems 製品だけでそのコードを判別することができないため、例えば Embedded Python で Python の chardet パッケージを使用して文字コード判別し、IRIS 内文字コードを取得しファイルオープン、文字列の文字コード変換をすることができます。 chardetパッケージについては、外部サイトですが参考となります。ぜひご参照ください。 参考ページ:[解決!Python]テキストファイルのエンコーディングを調べて、その内容を読み込むには(chardetパッケージ) 以下、具体的な処理内容です。文字コードが不明なファイルに対する処理例として記載しています(文字列に対する処理例は末尾にあります)。 IRIS のクラス定義に以下のように language=python を設定したクラスメソッドを用意します。 /// ファイルのエンコードを確認して返す /// 第1引数:ファイル名(フルパス) /// 戻り値:エンコード /// 事前準備:Pythonのchardetパッケージをインストールしておく必要があります /// 参考URL:https://atmarkit.itmedia.co.jp/ait/articles/2105/11/news015.html ClassMethod GetEncode(filename As %String) As %String [ Language = python ] { import iris from chardet import detect # chardetパッケージからdetect関数をインポート with open(filename, 'rb') as f: # バイナリファイルとして読み込みオープン b = f.read() # ファイルから全データを読み込み enc = detect(b) # 読み込んだデータdetect関数に渡して判定する #print(enc) return enc["encoding"] } ターミナルで単体テストを行った結果は以下の通りです。 例:ECU-JPで保存されているファイルを確認した場合 この後、IRIS 内ユーティリティメソッドを利用して IRIS 用文字コードを入手しファイルオープン時の文字コードに指定します。 set TranslateTable=##class(%Net.Charset).GetTranslateTable(ここにPythonで確認したエンコード) コード詳細は以下の通りです。 ClassMethod test(filename As %String) { if $Get(filename)="" { write "第1引数にファイル名をフルパスで指定してください",! return } // Pythonのchardetパッケージを利用したエンコード調査を実行します set encode=..GetEncode(filename) if $get(encode)="" { write filename," のエンコードが入手できませんでした",! return } // エンコードが返った来た場合、IRIS内の文字コードを調査 set TranslateTable=##class(%Net.Charset).GetTranslateTable(encode) write "IRISの文字コードは:",TranslateTable,! write "ファイルの中身は以下==",! set fs=##class(%Stream.FileCharacter).%New() set fs.TranslateTable=TranslateTable do fs.LinkToFile(filename) while fs.AtEnd=0 { write fs.ReadLine(),! } kill fs } 実行例は以下の通りです。 USER>do ##class(FAQ.Utils).test("/data/sample1.txt") IRISの文字コードは:EUC ファイルの中身は以下== あいうえお かきくけこ さしすせそ USER> ファイルではなく文字列に対して操作する場合は、以下の手順で実行します。 1、Python の chardetパッケージを利用してエンコードを入手 set encode=##class(FAQ.Utils).GetEncode("/data/sample1.txt") 2、IRIS 用文字コードを入手 USER>set TranslateTable=##class(%Net.Charset).GetTranslateTable(encode) USER>write TranslateTable EUC USER> 3、$ZCONVERT()関数を使用してコードを変換 USER>write $ZCONVERT(reco,"I",TranslateTable) // recoに対象文字列が含まれているとします あいうえお USER>
記事
Hiroshi Sato · 2020年6月30日

icmを利用してIRISクラスターを構成する方法

1. 初めに IRISでは、複数ノードでクラスターを構成し、ワークロードのスケールアウト、データボリュームのスケールアウトやトランザクション処理と分析処理を異なるノードで処理するマルチワークロードを実現しています。しかし、クラスターを構成するための設定は、ノード数が増えるにつれ煩雑になり、それらを人手の作業に全て委ねると設定ミス等を招きやすいといえます。また、クラスタの構成を処理負荷の増加に基づいて拡張する、または逆に縮小する、あるいは、データ冗長性を追加するためにミラーリングの構成を追加するなど構成変更は、想定するより多いかもしれません。しかもクラスタ毎に同様の設定を毎回行うとなると、人手による作業では、煩雑性だけでなく俊敏性に欠けると言わざるを得ません。 そこで、IRISには、クラスター構成作業を自動化する新しいツールICM(InterSystems Cloud Manager)が用意されました。 ここでは、ICMを使用したクラウド上でのIRIS構成の自動化の手順について説明します。 2. 事前に準備するもの 以下の作業を行うためには、InterSystemsが用意している2つのDocker Imageを事前に取得する必要があります。 ICMイメージ IRISイメージ これらのDockerイメージを取得するには、InterSystemsが運営しているWRC Directというシステムにログインする必要があります。 WRC Directシステムにログインするアカウントは、InterSystems製品のパートナー様やInterSystemsの製品を直接ご購入いただいたエンドユーザー様は取得可能です。 そのアカウントをお持ちでない方は、お手数ですがインターシステムズのカスタマーサポートセンターまでお問い合わせください。 WRC Directにログイン後、InterSystemsタブからSoftware Distributionを選択します。 表示される複数のメニューからContainersを選択します。 InterSystems IRISとInterSystems Cloud Managerを選び、ダウンロードボタンを押します。 IRISとICMのバージョンは合わせてください。 特に条件等なければ、その時点の最新バージョンを選んでください。 アーキテクチャーの所でx64とARMがあるので、間違えないようにしましょう。 3. Dockerイメージの登録 クラウドからicmで指定するDockerイメージを取得できる様にインターネットからアクセスできるレポジトリが必要です。 一番簡便な方法は、Docker Hubに登録することです。 3.1 Docker Hubへの登録 以下はDocker Hubに登録するサンプルです。 イメージの名前は、違う名前でタグ付してください。(hsato0719/icm:2020.1.0.215.0) docker hubにログインするためには、Dockerのアカウント(ID)が必要です。 アカウントは無償で作成可能です。 WRC Directからダウンロードしたアーカイブファイルを使用して以下のコマンド発行 $ docker load -i icm-2020.1.0.215.0-docker.tar.gz$ docker load -i iris-2020.1.0.215.0-docker.tar.gz$ docker tag intersystems/icm:2020.1.0.215.0 hsato0719/icm:2020.1.0.215.0$ docker tag intersystems/iris:2020.1.0.215.0 hsato0719/iris:2020.1.0.215.0$ docker loginLogin with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.Username: satohiroshi0719Password: Login Succeeded$ docker push hsato0719/icm:2020.1.0.215.0$ docker push hsato0719/iris:2020.1.0.215.0 4. ライセンスキー、クレデンシャル情報のセットアップ 4.1 icm dockerの起動 以下を実行するまえにシステムにDockerがインストールされているか確認してください。(Docker for Windows, Docker fof Mac) $ docker run --name icm -v /Users/hsato:/myhome -it --cap-add SYS_TIME hsato0719/icm:2020.1.0.215.0 -v で設定しているディレクトリーは、ホストシステム(WindowsやMac)とDockerの間でファイルを交換したい場合に設定します。 4.2 クレデンシャル情報の生成 以下のコマンドを実行します。 $ ICM/bin/keygenSSH.sh$ ICM/bin/keygenTLS.sh 4.3 ライセンスキーのコピー ライセンスキーはUNIXフォーマット(Windowsフォーマットだとicm runの時にコピーが永遠に終わらない状態になる)で作成してください。 評価用ライセンスは、 サポート契約のあるエンドユーザー、パートナー様であれば、製品評価ポータル(https://evaluation.InterSystems.com)から取得できます。(WRC Directアカウントでログイン) 以下のコマンドを実行します。 $ cd /Samples$ mkdir license$ cd license$ cp /myhome/license/ubuntu-sharding-iris.key . (/myhome/licenseにubuntu-sharding-iris.keyを事前に置きます。) 5. defaults.jsonとdefinitions.jsonの編集 ICMの設定の中心となるdefaults.jsonとdefinitions.jsonの編集を行います。 defaults.jsonの内容は、サポートしているすべてのクラウドで共通な部分とクラウド固有な部分があります。 5.1 defaults.json 以下のサンプルは、AWS用の設定です。 /Samples # cat AWS/defaults.json{ "Provider": "AWS", "Label": "Sato", "Tag": "TEST", "DataVolumeSize": "10", "SSHUser": "ubuntu", "SSHPublicKey": "/Samples/ssh/insecure-ssh2.pub", "SSHPrivateKey": "/Samples/ssh/insecure", "DockerImage": "hsato0719/iris:2020.1.0.215.0", "DockerUsername": "", "DockerPassword": "", "TLSKeyDir": "/Samples/tls/", "LicenseDir": "/Samples/license/", "Region": "ap-northeast-1", "Zone": "ap-northeast-1a", "DockerVersion": "5:19.03.5~3-0~ubuntu-bionic", "AMI": "ami-0278fe6949f6b1a06", "InstanceType": "m4.large", "Credentials": "/Samples/AWS/sample.credentials", "Mirror": "false", "UserCPF": "/Samples/cpf/iris.cpf"} Label,Tagは適当にご自分専用の名前を使用してください。 DataVolumeSizeも用途に応じてサイズを調整してください。 SSHUserはAWSのubuntuの場合、ubuntuで固定です。 SSHPublicKeyとSSHPrivateKeyは4.2で生成したキーファイルをそのまま使用します。 DockerImageは3.1でDocker Hubに登録したタグ名を指定します。 InstanceTypeは用途に応じてタイプを選択してください。 それ以外は、そのままの値でOKです。 以下のサンプルは、Azure用の設定です。 /Samples # cat Azure/defaults.json{ "Provider": "Azure", "Label": "Hiroshi", "Tag": "TEST", "DataVolumeSize": "50", "SSHUser": "ubuntu", "SSHPublicKey": "/Samples/ssh/insecure-ssh2.pub", "SSHPrivateKey": "/Samples/ssh/insecure", "DockerImage": "hsato0719/iris:2020.1.0.215.0", "DockerUsername": "", "DockerPassword": "", "TLSKeyDir": "/Samples/tls/", "LicenseDir": "/Samples/license/", "Location": "Japaneast", "Zone": "1", "PublisherName": "Shardtest", "Offer": "UbuntuServer", "Sku": "18.04-LTS", "Version": "18.04.201909030", "DockerVersion": "18.06.1~ce~3-0~ubuntu", "Size": "Standard_DS3_v2", "AccountTier": "Premium", "AccountReplicationType": "LRS", "SubscriptionId": "xxxxxxxx", "ClientId": "xxxxxxxxxxx", "ClientSecret": "xxxxxxxxxxx", "TenantId": "xxxxxxxxxxxxx", "Mirror": "false", "UserCPF": "/Samples/cpf/iris.cpf"} 変更する部分は、AWS用とほぼ同様です。LabelとTagは適当に変更してください。 以下の設定は、6.2のクラウド個別設定の所を参照してください。 SubscriptionId ClientId ClientSecret TenantId Definitions.jonは基本的にクラウド固有の情報はありません。 以下の設定では、2ノードのシャードデータクラスターを構成しています。 5.2 definitions.json /Samples # cat Azure/definitions.json[ { "Role": "DATA", "Count": "2", "LicenseKey": "ubuntu-sharding-iris.key" }] 6. クラウド個別設定 6.1 sample.credentials (for AWS) AWSコンソールから右上のマイアカウント(自分の登録したメールアドレス)の所をクリック 表示されるメニューからマイセキュリティ資格情報をクリック アクセスキー (アクセスキー ID とシークレットアクセスキー)の左側の三角をクリック 新しいアクセスキーの生成ボタンを押す ダウンロードcsvファイルを選んでクリック 生成されたファイルを以下の形式に変換(XXXXの部分はそのまま)し、sample.credentialsという名前にする [default]aws_access_key_id = XXXXaws_secret_access_key = XXXX そのsamle.credentialsをicm docker内の/Samples/AWSにコピーする $ cd /Samples/AWS$ cp /myhome/sample.credentials . そのdefaults.jsonとdefinitions.jsonをicm docker内の/Samples/AWSにコピーする $ cd /Samples/AWS$ cp /myhome/defaults.json .$ cp /myhome/definitions.json . 6.2 Azure subscriptionid Azureホームから移動の所のサブスクリプションをクリック サブスクリプションID tenant-id AzureホームからAzureサービスのAzure Active Directoryをクリック 既定のディレクトリーの所のテナントID 左のメニューからアプリの登録を選び、+新規登録を押す アプリケーションの名前 入力 サポートされているアカウントの種類 この組織ディレクトリのみに含まれるアカウント リダイレクトURLWeb https://intersystems.com 登録ボタンを押す 表示されるアプリケーションIDがクライアントID左のメニューから証明書とシークレットを選択 新しいクライアントシークレットを押す 左のメニューからAPIのアクセス許可をクリック + 右のペインからアクセス許可の追加ボタンを押す右側からAzure Service Managementをクリック Access Azure Service Management as organization userを選択 アクセス許可の追加ボタンを押す Azure トップからサブスクリプションを選択 左側のメニューからアクセス制御IAMをクリック ロールの割り当てを追加するの追加ボタンを押す 役割  所有者 アクセスの割り当て先   Azure ADのユーザー、グループ、サービスプリンシパル 選択  先ほど作ったアプリケーションの名前 保存ボタンを押す そのdefaults.jsonとdefinitions.jsonをicm docker内の/Samples/AZureにコピーする $ cd /Samples/AZure$ cp /myhome/defaults.json .$ cp /myhome/definitions.json . 7. プロビジョニング 6.で設定した構成情報に基づいて、クラウド上で必要なリソースの割り当てや基本的な設定等を実施します。 icm provisionコマンドでそれを実行します。 以下、Azureでの例を示します。 $ cd /Samples/AWS/Samples/Azure # icm provisionStarting init of Sato-ICM......completed init of Sato-ICMStarting plan of Sato-ICM......completed plan of Sato-ICMStarting refresh of Sato-ICM......completed refresh of Sato-ICMStarting apply of Sato-ICM...Elapsed time for apply on Sato-ICM: 15s...Elapsed time for apply on Sato-ICM: 30s......completed apply of Sato-ICMStarting init of Sato-DATA-ICM......completed init of Sato-DATA-ICMStarting plan of Sato-DATA-ICM......completed plan of Sato-DATA-ICMStarting refresh of Sato-DATA-ICM......completed refresh of Sato-DATA-ICMStarting apply of Sato-DATA-ICM...Elapsed time for apply on Sato-DATA-ICM: 15s...Elapsed time for apply on Sato-DATA-ICM: 30s...Elapsed time for apply on Sato-DATA-ICM: 45s...Elapsed time for apply on Sato-DATA-ICM: 60s...Elapsed time for apply on Sato-DATA-ICM: 75s...Elapsed time for apply on Sato-DATA-ICM: 90s...Elapsed time for apply on Sato-DATA-ICM: 105s...Elapsed time for apply on Sato-DATA-ICM: 120s......completed apply of Sato-DATA-ICMCopying files to Sato-DATA-ICM-0002...Copying files to Sato-DATA-ICM-0001......copied files to Sato-DATA-ICM-0001Configuring Sato-DATA-ICM-0001......copied files to Sato-DATA-ICM-0002Configuring Sato-DATA-ICM-0002......configured Sato-DATA-ICM-0001Copying more files to Sato-DATA-ICM-0001......configured Sato-DATA-ICM-0002Copying more files to Sato-DATA-ICM-0002......copied more files to Sato-DATA-ICM-0001Mounting volumes on Sato-DATA-ICM-0001......copied more files to Sato-DATA-ICM-0002Mounting volumes on Sato-DATA-ICM-0002......mounted volumes on Sato-DATA-ICM-0001Installing Docker on Sato-DATA-ICM-0001......mounted volumes on Sato-DATA-ICM-0002Installing Docker on Sato-DATA-ICM-0002...Elapsed time for provision on Sato-DATA-ICM-0001: 15s...Elapsed time for provision on Sato-DATA-ICM-0002: 15s...Elapsed time for provision on Sato-DATA-ICM-0001: 30s...Elapsed time for provision on Sato-DATA-ICM-0002: 30s...Elapsed time for provision on Sato-DATA-ICM-0001: 45s...Elapsed time for provision on Sato-DATA-ICM-0002: 45s...Elapsed time for provision on Sato-DATA-ICM-0001: 60s...Elapsed time for provision on Sato-DATA-ICM-0002: 60s......installed Docker on Sato-DATA-ICM-0001Determining host OS of Sato-DATA-ICM-0001......installed Docker on Sato-DATA-ICM-0002Determining host OS of Sato-DATA-ICM-0002......determined host OS of Sato-DATA-ICM-0001Determining local IP address of Sato-DATA-ICM-0001......determined host OS of Sato-DATA-ICM-0002Determining local IP address of Sato-DATA-ICM-0002......determined local IP address of Sato-DATA-ICM-0001...determined local IP address of Sato-DATA-ICM-0002Installing Weave Net on Sato-DATA-ICM-0001...Installing Weave Net on Sato-DATA-ICM-0002...Elapsed time for weave on Sato-DATA-ICM-0001: 15s...Elapsed time for weave on Sato-DATA-ICM-0002: 15s......installed Weave Net on Sato-DATA-ICM-0002Collecting Weave info for Sato-DATA-ICM-0002......installed Weave Net on Sato-DATA-ICM-0001Collecting Weave info for Sato-DATA-ICM-0001......collected Weave info for Sato-DATA-ICM-0002...collected Weave info for Sato-DATA-ICM-0001Machine IP Address DNS Name Provider Region Zone------- ---------- -------- -------- ------ ----Sato-DATA-ICM-0001 52.185.190.176 satodataicm1.japaneast.cloudapp.azure.co Azure Japaneast 1 Sato-DATA-ICM-0002 52.185.190.169 satodataicm2.japaneast.cloudapp.azure.co Azure Japaneast 1 To destroy: icm unprovision -stateDir state [-cleanUp] [-force] 8. Deploy 7.でプロビジョニングされた構成で、実際のシステムをデプロイしてみます。 /Samples/Azure # icm runEnter desired InterSystems IRIS password:           --- 構成するIRISのシステムパスワードを聞かれるので、ここで入力し、設定します。Enter password again:                              --- 同じパスワードを入力します。Pulling image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0001 ...Pulling image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0002 ...Elapsed time for pull on Sato-DATA-ICM-0001: 15s...Elapsed time for pull on Sato-DATA-ICM-0002: 15s......pulled image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0002...pulled image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0001Stopping container iris on Sato-DATA-ICM-0001...Stopping container iris on Sato-DATA-ICM-0002......completed stop of container iris on Sato-DATA-ICM-0001...completed stop of container iris on Sato-DATA-ICM-0002Removing container iris on Sato-DATA-ICM-0001...Removing container iris on Sato-DATA-ICM-0002......removed container iris on Sato-DATA-ICM-0001...removed container iris on Sato-DATA-ICM-0002Inspecting docker image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0001...Inspecting docker image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0002......inspected docker image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0001...inspected docker image hsato0719/iris:2020.1.0.215.0 on Sato-DATA-ICM-0002Creating container iris on Sato-DATA-ICM-0001...Creating container iris on Sato-DATA-ICM-0002......created container iris on Sato-DATA-ICM-0001...created container iris on Sato-DATA-ICM-0002Copying license directory /Samples/license/ to Sato-DATA-ICM-0001...Copying CPF deltas to Sato-DATA-ICM-0002......copied license directory /Samples/license/ to Sato-DATA-ICM-0001Copying CPF deltas to Sato-DATA-ICM-0001......copied CPF deltas to Sato-DATA-ICM-0002...copied CPF deltas to Sato-DATA-ICM-0001Starting container iris on Sato-DATA-ICM-0001...Starting container iris on Sato-DATA-ICM-0002......completed start of container iris on Sato-DATA-ICM-0001...completed start of container iris on Sato-DATA-ICM-0002Waiting for InterSystems IRIS to start on Sato-DATA-ICM-0001...Waiting for InterSystems IRIS to start on Sato-DATA-ICM-0002...Elapsed time for wait_started on Sato-DATA-ICM-0001: 15s...Elapsed time for wait_started on Sato-DATA-ICM-0002: 15s......InterSystems IRIS started on Sato-DATA-ICM-0001Elapsed time for wait_started on Sato-DATA-ICM-0002: 30s......InterSystems IRIS started on Sato-DATA-ICM-0002Getting ICM state from Sato-DATA-ICM-0001...Getting ICM state from Sato-DATA-ICM-0002......got ICM state from Sato-DATA-ICM-0001...got ICM state from Sato-DATA-ICM-0002Configuring Web Gateway on Sato-DATA-ICM-0001...Configuring Web Gateway on Sato-DATA-ICM-0002......configured Web Gateway on Sato-DATA-ICM-0002...configured Web Gateway on Sato-DATA-ICM-0001Configuring ODBC on Sato-DATA-ICM-0001...Configuring ODBC on Sato-DATA-ICM-0002......configured ODBC on Sato-DATA-ICM-0002...configured ODBC on Sato-DATA-ICM-0001Configuring JDBC on Sato-DATA-ICM-0001...Configuring JDBC on Sato-DATA-ICM-0002......configured JDBC on Sato-DATA-ICM-0001...configured JDBC on Sato-DATA-ICM-0002Configuring ECP on Sato-DATA-ICM-0002...Configuring ECP on Sato-DATA-ICM-0001......configured ECP on Sato-DATA-ICM-0002...configured ECP on Sato-DATA-ICM-0001Changing WebGateway password on Sato-DATA-ICM-0001...Changing WebGateway password on Sato-DATA-ICM-0002......changed WebGateway password on Sato-DATA-ICM-0002...changed WebGateway password on Sato-DATA-ICM-0001Validating license on Sato-DATA-ICM-0001...Acquiring license on Sato-DATA-ICM-0002......acquired license on Sato-DATA-ICM-0002...validated license on Sato-DATA-ICM-0001Acquiring license on Sato-DATA-ICM-0001......acquired license on Sato-DATA-ICM-0001Enable sharding on Sato-DATA-ICM-0001...Enable sharding on Sato-DATA-ICM-0002......enabled sharding on Sato-DATA-ICM-0002...enabled sharding on Sato-DATA-ICM-0001Initializing shard Sato-DATA-ICM-0001......initialized shard Sato-DATA-ICM-0001Attaching shard Sato-DATA-ICM-0002 as data node.......attached shard Sato-DATA-ICM-0002 as data nodeSetting shard options on Sato-DATA-ICM-0002......set shard options on Sato-DATA-ICM-0002Setting shard options on Sato-DATA-ICM-0001......set shard options on Sato-DATA-ICM-0001Verifying shards on Sato-DATA-ICM-0001......verified shards on Sato-DATA-ICM-0001Setting ICM state on Sato-DATA-ICM-0001...Setting ICM state on Sato-DATA-ICM-0002......set ICM state on Sato-DATA-ICM-0001...set ICM state on Sato-DATA-ICM-0002-> Management Portal available at: http://satodataicm1.japaneast.cloudapp.azure.com:52773/csp/sys/UtilHome.csp 最後のurlをブラウザで指定して管理ポータルにログインできます。ユーザー名: _systemパスワード: icm deployで指定したパスワード 9. test icmを使った動作確認のためのサンプルを以下に示します。 $ icm ps -container iris$ icm exec -command "df -k" -machine Sato-DATA-ICM-0001$ icm session -interactive -machine Sato-DATA-ICM-0001 -namespace USER$ icm scp -localPath local-path [-remotePath remote-path]$ icm sql -command "create table order (orderid varchar(20), primary key (orderid), shard)" -role DATA$ icm sql -command "create table lineitem (product varchar(20), orderid varchar(20), quantity integer, shard)" -role DATA$ icm sql -command "create table product (name varchar(20), price number(7,2))" -role DATA$ icm sql -command "create table product (name varchar(20), price number(7,2))" -role DATA$ icm sql -command "insert into product values ('hammer',9.95)" -role DATA$ icm sql -command "insert into product values ('nail',0.02)" -role DATA$ icm sql -command "insert into product values ('pliers',8.95)" -role DATA$ icm sql -command "insert into product values ('screw',0.05)" -role DATA$ icm sql -command "insert into product values ('screwdriver',7.95)" -role DATA$ icm sql -command "insert into product values ('saw',12.95)" -role DATA$ icm sql -command "insert into order values ('A-001')" -role DATA$ icm sql -command "insert into order values ('A-002')" -role DATA$ icm sql -command "insert into order values ('B-001')" -role DATA$ icm sql -command "insert into order values ('B-002')" -role DATA$ icm sql -command "insert into order values ('B-003')" -role DATA$ icm sql -command "insert into order values ('B-004')" -role DATA$ icm sql -command "insert into order values ('B-005')" -role DATA$ icm sql -command "insert into lineitem values ('hammer','A-001',1)" -role DATA$ icm sql -command "insert into lineitem values ('nail','A-001',1000)" -role DATA$ icm sql -command "insert into lineitem values ('pliers','A-002',1)" -role DATA$ icm sql -command "insert into lineitem values ('screwdriver','B-001',1)" -role DATA$ icm sql -command "insert into lineitem values ('screw','B-001',500)" -role DATA$ icm sql -command "insert into lineitem values ('screwdriver','B-002',2)" -role DATA$ icm sql -command "insert into lineitem values ('pliers','B-002',1)" -role DATA$ icm sql -command "insert into lineitem values ('screw','B-002',1500)" -role DATA$ icm sql -command "insert into lineitem values ('saw','B-003',1)" -role DATA$ icm sql -command "insert into lineitem values ('saw','B-004',1)" -role DATA$ icm sql -command "insert into lineitem values ('pliers','B-004',1)" -role DATA$ icm sql -command "insert into lineitem values ('pliers','B-005',2)" -role DATA$ icm sql -command "select avg(quantity) from lineitem" -role DATA$ icm sql -command "select %id, * from order" -role DATA$ icm sql -command "select %id, * from lineitem" -role DATA$ icm sql -command "select order.orderid, product, quantity from order, lineitem where order.orderid=lineitem.orderid order by 1" -role DATA$ icm sql -command "select orderid, sum(price*quantity) from lineitem, product where lineitem.product=product.name group by orderid" -role DATA$ icm sql -command "select orderid, sum(price*quantity) from lineitem, product where lineitem.product=product.name group by orderid" -machine Sato-DATA-TEST-0001$ icm sql -command "select orderid, sum(price*quantity) from lineitem, product where lineitem.product=product.name group by orderid" -machine Sato-DATA-TEST-0002 10. cleanUp これを忘れるとクラウド課金し続けるので注意 icm unprovision -cleanUp -force
記事
Toshihiko Minamoto · 2023年6月14日

初めてのIAM 使用体験

# オンラインコース「[Hands-On with InterSystems API Manager for Developers](https://learning.intersystems.com/course/view.php?id=1747)」のフィードバック  Docker コンテナと REST API の基本的な知識で、InterSystems API Manager による API とマイクロサービスの制御に挑戦したいと思い、 ホストにローカルの IRIS インスタンス(Windows OS)を使用し、Linux VM で IAM (ゲスト)を実行するこのオンラインコースを実行してみました。  まず InterSystems API Manger(IAM)を紹介してから、ローカル環境をセットアップするための手順を説明し、最後にコースの各章の内容を確認しましょう。 # はじめに 今日では、API トラフィックの管理、監視、および保護が UI ポータルに集約される 簡単なデプロイのメリットを生かして、API を管理することが非常に重要となっています。 InterSystems API Manger(IAM)は、IRIS アプリケーションが消費し公開する API とマイクロサービスを制御します。 下流と上流のシステムの間の API ゲートウェイであり、どの API がどれくらいの頻度で誰に呼び出されたのかを視覚的に追跡する方法も備わっています。  IAM を使用するメリット: * HTTP ベースの API の監視 * トラフィックの制御  * セキュリティメカニズムによる API の保護  * 新しいオンボーディング開発者にとっての使いやすさ # IAM のセットアップ IAM のセットアップを開始する前にインストールしたもの * Windows(IRIS インスタンスをインストール) * Linux VM(Docker をインストール) InterSystems IRIS インスタンスで IAM を使用できるようにします。 1. IRIS インスタンスの管理ポータルを開き、IAM を有効にします。 1. 1. 管理ポータルで、[システム管理]>[セキュリティ]>[ユーザー]を選択し、IAM ユーザーを選択します。 2. [パスワード]ラジオボタンをオンにします。 3. IAM ユーザーのパスワードを入力し、確認します。 4. [ユーザーを有効化済み]チェックボックスをオンにします。 5. [保存]を選択します。 2. IAM Web アプリケーションを有効にします(IRIS ライセンスに「API Management」が指定されていることを確認してください)。  1. 1. 管理ポータルで、[システム管理]>[セキュリティ]>[アプリケーション]>[Web アプリケーション]を選択し、"**/api/iam**" を選択します。  2. [アプリケーションを有効にする]チェックボックスをオンにします。 3. [保存]を選択します。 IAM インストールファイルをダウンロードして解凍します。 1. Linux 環境内の WRC から IAM インストールキットをダウンロードします。 2. tar ファイルを解凍します(**iam-image.tar** は IAM Docker イメージであるため、解凍しないでください)。 ![](/sites/default/files/inline/images/images/Screenshot%202023-01-30%20141720.png) ![](/sites/default/files/inline/images/images/Screenshot%202023-01-30%20141559.png) IAM のセットアップと起動  このステップでは、**ROOT** ユーザーを使用しました。Linux ユーザーで sudo を使用すると、「Cannot load the Manager Potal properly(Manager Portal を正しく読み込めません)」というエラーが発生するか、セットアップスクリプトが環境変数値を docker-compose.yaml ファイルに渡せなかったためです。 後者の場合、"**sudo -E**" を使って環境変数を渡すと回避できました。 1. IAM アーカイブを解凍したディクショナリで "**docker load -i iam_image.tar**" コマンドを実行してターミナルを開きます。 2. 現在のディレクトリで "**source ./scripts/iam-setup.sh**" を実行するか、scripts フォルダで "**source ./iam-setup.sh**" を実行します。 1. の正確な IAM イメージ名とリポジトリ名を入力します。例: intersystems/iam:3.0.2.0-2(このステップは必須です。これを実行しない場合、"docker compose" を行ったときにリポジトリの認証に失敗したというエラーメッセージが表示されます。) 2. ホストマシンの正確な IP アドレスを入力します(IPV4 の仕様は Windows の設定で確認できます。localhost や 127.0.0.1 を入力しないでください)。   3. Windows OS の IRIS インスタンスのポート番号を入力します(例: 52773)。  4. IAM ユーザーのパスワードを 2 回入力します。 3. scripts ディレクトリ内で、"**iam-test.sh**" を実行して、接続をテストしてください。 4. scripts ディレクトリ内で、"**docker compose up -d**" を実行して IAM を起動します。 5. 次のアドレスにアクセスし、Linux の IAM ポータルを起動します: VM を使ってホストアドレスを ping できない場合は、Windows ファイアウォールの詳細設定にある[受信の規則]を確認してください。 [**ファイルとプリンタの共有(エコー要求 - ICMPv4-In)プロファイル: プライベート、パブリック**]を有効にします。 ![](/sites/default/files/inline/images/images/Screenshot%202023-01-25%20145811.png) IAM のテスト インストールキットの scripts ディレクトリ内に **iam-test.sh** というスクリプトがあります。  ".**/iam-test.sh**" と入力して実行し、IAM と IRIS インスタンス間の接続のテストを開始します。  **注意**: テスト結果に「**サービスを作成中にエラーが発生しました。 HTTP ステータスコード:000 またはサービス作成中のエラー。 HTTP ステータスコード:409**」が表示された場合は、Docker のステータスを確認してください。健全であるにも関わらず、動作しない場合は、コンテナをシャットダウンし、もう一度 docker compose を実行してください。私の経験では、VM を一時停止すると、これが発生することがあります。 ![](/sites/default/files/inline/images/images/c8f88a77d239cbf45e7e52e38723548.png) 詳細については、こちらの IAM セットアップドキュメントをご覧ください: [https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=CIAM3.0\_install#CIAM3.0\_install_setupIAM](https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=CIAM3.0_install#CIAM3.0_install_setupIAM) ハンズオン演習: # コースの各章 この演習の後に 3 つの章を完了したので、その内容を共有したいと思います。 * サービスのセットアップ * ルートのセットアップ * コンシューマーとプラグインの設定 IAM を使用し始める前、この演習では GET メソッドを使って REST リクエストを行うことが求められていました。この HTTP リクエストはクライアントサーバーからのもので、IRIS インスタンスにビルドされた Web アプリケーションを直接エンドポイントとしてポイントしています。  次のステップでは、API リクエストが転送されるサービスと着信リクエストを分析して最適な API に割り当てるルートのセットアップ方法が説明されていました。   サービスとルーターのセットアップ サービスとは?  サービスは、API Manager を InterSystems IRIS に接続するように構成されます。そのため通常は、InterSystems IRIS 内の REST サービスまたは Web アプリケーションごとに、サービスは 1 つです。 たとえば、ベースパスが /rest/coffeemakerapp の Web アプリケーションがある場合、この URL に対し、API Manager 内で 1 つのサービスを構成します。 サービスは通常、ルートの前に定義されます。 ルートとは? ルートは、**クライアントアプリケーション**が InterSystems API Manger に対して呼び出すものを定義します。 インターフェースを使用すると、定義されたサービスからそれに対応するルートが簡単に作成されるようになっているため、通常は、ルートの前にサービスを定義します。 ルートは一般に、InterSystems IRIS 内のパスを単純化したものです。 次の例では、 /test、/coffeemakers、/coffeemaker、および /newcoffeemaker のルートを作成します。 ルートが具体的であるほど、メトリックの表示と特定のルートへのプラグインの追加において、API Manager 内で API をより細かく制御できます。 ![](/sites/default/files/inline/images/images/Screenshot%202023-01-27%20155122.png) サービスを作成する: 1. IAM 管理ポータルに移動し、[サービス]タブを選択します。 2. [新しいサービス]をクリックして名前を付けます。 3. [URL を使用して追加]を選択します。 4. Web アプリケーションに指定した正確な URL パスを[ベース URL]に指定し、インスタンスの IP アドレスが正しいことを再確認します(localhost または 127.0.0.1 を使用しないでください)。 ![](/sites/default/files/inline/images/images/Screenshot%202023-02-08%20135400.png) ルートを作成する: 1. サービスの要約まで下にスクロールし、[ルートを追加]をクリックしアンス。 2. [名前]、[プロトコル」、[パス]を指定します。 3. [サービス]フィールドに、サービスの詳細が自動的に生成されます。 4. この演習では、[詳細]フィールドの[パスをストリップ]をオフにするように求められました。オンである場合、InterSystems IRIS にリクエストを送信する際に、InterSystems IRIS エンドポイントに接続するために重要となるパスが削除されてしまいます。 ![](/sites/default/files/inline/images/images/Screenshot%202023-02-08%20135429.png) サービスとルートが作成されたら、Postman などの REST クライアントを使用して、直接 IAM にリクエストを送信し、「200 ok」のレスポンスを受信することができます。例: GET (/test は作成されたルートです。) 注意: 私の場合、HTTP リクエストの URL は Linux VM の IP アドレスと一致していますが、この IP アドレスは[設定]> [ネットワーク]で確認するか、ターミナルで "ifconfig" コマンドを実行して調べてください。  ![](/sites/default/files/inline/images/images/Screenshot%202023-02-08%20135215.png) IAM 管理ポータルを開いてリクエストを確認すると、すべての coffeemakers が REST クライアントから IAM に正しく記録されているのがわかります。 HTTP リクエストを直接 IRIS Web アプリケーションに送信するのではなく、基本的な CRUD リクエストであっても、IAM を使用すると、視覚的な表現によって API を制御し、エンドポイントのセキュリティを維持することができます。 ![](/sites/default/files/inline/images/images/Screenshot%202023-02-08%20141809.png) プラグインの使用 IAM を使用するメリットの 1 つに、スロットリングに役立つレート制限プラグイン、ACL プラグイン、OAuth2.0 プラグインなど、多数のプラグインの存在が挙げられます。 個人的なケースとして、basic-auth の有効化とコンシューマーの作成における体験を紹介します。 basic-auth プラグインを有効にする 1. IAM 管理ポータルに移動し、[プラグイン]タブを選択します。 2. [新しいプラグイン]>[基本認証]>[作成]をクリックします。 ![](/sites/default/files/inline/images/images/Screenshot%202023-02-10%20115149.png) Basic Auth に必要な IRIS ユーザーを作成する  1. IRIS 管理ポータルを開きます。  2. [システム管理]>[セキュリティ]>[ユーザー]>[新規ユーザーの作成]に移動します。 3. ユーザーの名前とパスワードを設定します。 4. 他は空のままにして、[保存]をクリックします。私の場合は "CoffeeManager" というユーザーを作成しました。 ![](/sites/default/files/inline/images/images/image2023-2-10_11-57-21.png) コンシューマーを作成して、資格情報をセットアップする 1. IAM 管理ポータルに移動し、[コンシューマー]タブを選択します。 2. [新しいコンシューマー]をクリックし、[ユーザー名]に「CoffeeManger」(私の場合)と入力して、[作成]をクリックします。 3. CoffeeManager 情報ページ >[資格情報]>[新しい Basic Auth 資格情報]に移動します。 4. IRIS インスタンスで作成したユーザー資格情報を使用し、保存します。 ![](/sites/default/files/inline/images/images/image2023-2-10_12-0-18.png) ![](/sites/default/files/inline/images/images/image2023-2-10_12-3-12.png) これで、basic-auth プラグインを機能させるための要件がすべて揃いました。 前のステップで作成した "CoffeeManager" の資格情報で Basic Auth を使って、HTTP リクエストを送信します。  ![](/sites/default/files/inline/images/images/image2023-2-10_12-6-15.png) CoffeeManager 情報ページ >[アクティビティ]に移動すると、リクエストが成功したことが記録されていることを確認できます。 ![](/sites/default/files/inline/images/images/image2023-2-10_12-8-8.png) # まとめ まとめると、InterSystems API Manager(IAM)とは何か、またそのメリットを最初に紹介しました。 続いて、Linux VM で IAM をセットアップする方法と基本機能を実装して IAM を使用する方法を示し、サービスとルートの作成、プラグインとコンシューマーの有効化を行いました。 ご質問やコメントがございましたら、お気軽にご連絡ください。 IAM をお楽しみください!