クリアフィルター
記事
Tomoko Furuzono · 2025年4月10日
これはInterSystems FAQサイトの記事です。
サーバのIPアドレスやマシン名は、%SYSTEM.INetInfoクラスのメソッドで取得することが出来ます。
set hostname=$System.INetInfo.LocalHostName() //マシン(ホスト)名
set ip=$system.INetInfo.HostNameToAddr($system.INetInfo.LocalHostName()) //IPアドレス
記事
Megumi Kakechi · 2021年2月18日
jQuery($.getJSON と $.ajax)を使用した InterSystems IRIS データのJSON形式での取得方法をご紹介します。
以下にサンプルをご用意しました。
https://github.com/Intersystems-jp/REST_JSON_sample
サンプルには、次の内容が含まれます。
・REST + JSON・REST + CORS
※それぞれ、$.getJSON と $.ajax で取得する方法を記載しています。
※サーバ側ではSelect文の実行結果をJSON_OBJECT関数を使用しJSON文字列で出力しています。 関数については以下のドキュメントをご覧ください。 JSON_OBJECT関数
使用手順は以下になります。
1. USERネームスペースに json.xml をインポート・コンパイル
2. テスト用データの作成(ターミナルで以下のコマンドを実行する)
USER>do ##class(Sample.Person).Populate(200)
3. 初期設定(REST用)
管理ポータル > セキュリティ管理 > ウェブ・アプリケーション
新しいウェブ・アプリケーションを作成ボタンを押す
名前 /csp/user/rest ネームスペース USER ディスパッチ・クラス REST.Person
保存ボタンを押す
4. test_json.html をWEBサーバに配置する
例: C:\Inetpub\wwwroot <-- IIS ルート C:\InterSystems\IRIS\CSP\user <-- cspフォルダ
5. test_json.htmlをブラウザで開く
例: http://localhost/test_json.html http://localhost:52773/csp/user/test_json.html ※サンプル内のクロスドメイン対応URLは、http://127.0.0.1:52773/ を使用(PWS用サンプル)
6. テキストボックスに適当なID(1,2,100 など)を入力し、検索ボタンを押して出力結果を確認する。
★IRISでJSONを操作する基本情報については、こちらの記事をご覧ください(ビデオもご紹介しています)。
【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:IRIS での JSON の操作
記事
Mihoko Iijima · 2022年7月4日
開発者の皆さん、こんにちは!
PythonでExcelからPDFへ変換を行うには、pywinを使うとできるらしいので、IRISにあるデータをDataframeに設定した後Excelに出力し、ExcelからPDFに変換する流れを、Embedded Pythonで試してみました。
メモ:pywinはWindows環境下で動くモジュールのようです。
Excelに出力するデータですが、例では、SELECTの結果をDataframeに格納する方法を利用しています。グローバル変数の情報をDataframeに格納する方法については、以下の記事で詳しくご紹介しています。ぜひご参照ください。Embedded Python で IRIS グローバル($LB) を Pandas Dataframe に変換する方法
まずは、必要なモジュールをインストールする必要があるので、pywin32 モジュールを irispipを使ってインストールします。
以下の例では、IRIS for Health が c:\InterSystems\IRISHealth にインストールされている状態で実行しています。
Embedded Pythonは、IRIS/IRIS for Health どちらでも利用できます。
c:\InterSystems\IRISHealth\bin>irispip install --target c:\InterSystems\IRISHealth\mgr\python pywin32
Collecting pywin32
Using cached pywin32-304-cp39-cp39-win_amd64.whl (12.2 MB)
Installing collected packages: pywin32
Successfully installed pywin32-304
// 以下省略
pywin32モジュールインストール後、以下の作業を行うことで、Embedded Python でExcelからPDFへの変換を実行できるようになりました。
専用DLL(pythoncom39.dll とpywintypes39.dll)を c:\windows\system32以下にコピー
pywin32のパス2種(<IRISインストールディレクトリ>\mgr\python\win32\lib と <IRISインストールディレクトリ>\mgr\python\win32)を sys.pathに追加
IRISのサービスアカウントを管理者ユーザに変更:ご参考「サービスアカウントの変更について【IRIS】」
それぞれの手続きをご紹介します。
1. 専用DLL(pythoncom39.dll とpywintypes39.dll)を c:\windows\system32以下にコピー
インストール後、さっそく import win32com.client を実行したいところですが、IRISターミナルから起動するPythonシェルで実行すると以下のエラーが出てしまいます。
>>> import win32com.client
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "c:\intersystems\irishealth\mgr\python\win32com\__init__.py", line 5, in <module>
import win32api, sys, os
ModuleNotFoundError: No module named 'win32api
このエラーをググりますと、以下の投稿に辿り着き、
How to fix "ImportError: DLL load failed" while importing win32api
👆52番の回答を試してみると、インポートできるようになりました。
具体的な手続きは以下の通りです。
irispipでインストールしたpywin32の2種類のDLL(pythoncom39.dll とpywintypes39.dll)を c:\windows\system32にコピーします。
irispipでインストールされる場所:<IRISインストールディレクトリ>\mgr\python\pywin32_system32
例)C:\InterSystems\IRISHealth\mgr\python\pywin32_system32
2. pywin32のパス2種を sys.pathに追加
import win32com.client を行うため、sys.pathにpywin32のインストールで用意される以下2つのディレクトリを追加する必要がありました。
参考記事:http://blog.livedoor.jp/blackcode/archives/python-win32api-import-error.html
<IRISインストールディレクトリ>\mgr\python\win32\lib
<IRISインストールディレクトリ>\mgr\python\win32
例は以下の通りです。
import sys
sys.path += ['C:\InterSystems\IRISHealth\mgr\python\win32\lib','C:\InterSystems\IRISHealth\mgr\python\win32']
3. IRISのサービスアカウントを管理者ユーザに変更
1、2までで、import win32com.client は成功しますが、肝心のExcelからPDFへ変換する流れでエラーが出ます😢。
どうやら、ExcelからPDF変換の流れを管理者権限で実行する必要があり、IRISのサービスアカウントが規定(SYSTEMアカウント)である場合に失敗します。
IRISのサービスアカウントを管理者に変更します(管理者権限でコマンドプロンプトを起動した後、以下のコマンドを実行します)。
例)<IRISインストールディレクトリ>\bin> irisinstall setserviceusername 構成名 ユーザ名 パスワード
c:\InterSystems\IRISHealth\bin>irisinstall setserviceusername IRISHealth userx passwordx
サービスアカウント変更後、IRISの再起動が必要となります。
サービスアカウントの変更について【IRIS】
※サービスアカウントを変更した場合の注意点
サービスアカウントを LOCAL_SYSTEM から変更すると、権限が不足するため、IRIS開始時の共有メモリの取得に Large Page (※)が使用できなくなります。※Windows上でのCaché共有メモリの割り当てについて
Large Pageを使用するためには、変更したアカウントに対して"メモリ内のページのロック" 特権を付与する必要があります。“メモリ内のページのロック” 特権の付与は、ローカルセキュリティポリシー(secpol.msc)より実施します。
1~3までの手続きを行った後、以下のPythonスクリプトファイルを実行できるようになります。
スクリプト例では、2つ関数を用意しています。以下それぞれの概要です。
関数:CreateExcel(ファイルフルパス) では、Test.Personテーブルを作成し、テストデータを4件登録し、Excel出力しています。(関数最後にTest.PersonをDropしています)
Excel出力の為、openpyxlとpandasのインストールが必要です。irispipでインストールしてから実行してください。
例)c:\InterSystems\IRISHealth\bin\irispip install --target c:\InterSystems\IRISHealth\mgr\python openpyxlc:\InterSystems\IRISHealth\bin\irispip install --target c:\InterSystems\IRISHealth\mgr\python pandas
関数:Output(エクセルファイルフルパス,PDFファイルフルパス) では、関数CreateExcel()を呼び出し、Excelファイルを準備してから、PDF変換を行っています。
第1引数:出力したいエクセルファイル名をフルパスで指定します。例)c:\\temp\\Book4.xlsx
第2引数:Excelから変換するPDF保存名でフルパスで指定します。 例)c:\\temp\\Book4.pdf
サンプルコードは以下の通りです。
import sys
sys.path += ['C:\InterSystems\IRISHealth\mgr\python\win32\lib','C:\InterSystems\IRISHealth\mgr\python\win32']
# 以下 python.exeから実行する時のパス
sys.path+=['c:\intersystems\irishealth\mgr\python','c:\intersystems\irishealth\lib\python']
import iris
#--------------------------------------------
import win32com.client
import pandas as pd
import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows
def CreateExcel(filename):
sql="create table Test.Person (Name VARCHAR(50),Email VARCHAR(50))"
rs=iris.sql.exec(sql)
rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト1','test1@mail.com')")
rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト2','test2@mail.com')")
rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト3','test3@mail.com')")
rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト4','test4@mail.com')")
df=iris.sql.exec("select Name,Email from Test.Person").dataframe()
#df.to_excel(filename)
wb=openpyxl.Workbook()
ws = wb.create_sheet(title="シート1")
ws.append(['行番号', '名前', 'メール'])
for i,row in enumerate(dataframe_to_rows(df,header=False)):
if i==0:
continue
ws.append(row)
wb.save(filename)
wb.close()
rs=iris.sql.exec("drop table Test.Person")
def Output(filename,pdfname):
CreateExcel(filename)
excel = win32com.client.Dispatch("Excel.Application")
wb=excel.WorkBooks.Open(filename)
wb.WorkSheets("シート1").Select()
wb.ActiveSheet.ExportAsFixedFormat(0,pdfname)
excel.quit()
上記コードを c:\WorkSpace\TryPython\ExcelToPDF.py に配置した状態とします。
ObjectScritpからの実行例は以下の通りです。
set sys=##class(%SYS.Python).Import("sys")
do sys.path.append("c:\WorkSpace\TryPython")
set e=##class(%SYS.Python).Import("ExcelToPDF")
do e.Output("c:\\temp\\Book5.xlsx","c:\\temp\\Book5.pdf")
Pythonシェルからの実行例は以下の通りです。
C:\WorkSpace\TryPython> python
Python 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path+=['C:\WorkSpace\TryPython']
>>> import ExcelToPDF as e
>>> e.Output("c:\\temp\\Book6.xlsx","c:\\temp\\Book6.pdf")
少し前準備が多いですが、Pythonの機能を活用してIRISにあるデータをExcel出力+PDF変換までできました🐍
Pythonとても便利ですね!
記事
Minoru Horita · 2020年7月6日
この連載記事では、InterSystemsデータプラットフォーム用のPython Gatewayについて説明します。 また、InterSystems IRISからPythonコードなどを実行します。 このプロジェクトは、InterSystems IRIS環境にPythonの力を与えます。
任意のPythonコードを実行する
InterSystems IRISからPythonへのシームレスなデータ転送
Python相互運用アダプタでインテリジェントな相互運用ビジネスプロセスを構築する
InterSystems IRISからのPythonコンテキストの保存、調査、変更、復元
その他の記事
現時点での連載計画です(変更される可能性があります)。
パート I:概要、展望、紹介
パート II:インストールとトラブルシューティング <-- 現在、この記事を参照しています
パート III:基本機能
パート IV:相互運用アダプタ
パート V:Execute関数
パート VI:動的ゲートウェイ
パート VII:プロキシゲートウェイ
パート VIII:使用事例とML Toolkit
インストール
この記事はPython Gatewayをインストールするのに役立ちます。Python Gatewayをインストールして使用する方法はいくつか存在します。
ホスト
Windows
Linux
Mac
Docker
作成済みのイメージをプルする
独自のイメージをビルドする
インストール方法に関係なく、コードが必要になります。 コードはリリースページでしかダウンロードできません。 リリースページにはテスト済みの安定版リリースが公開されていますので、最新のものを入手してください。 現在のバージョンは0.7ですが、将来的には新しいものになるでしょう。 リポジトリをクローンまたはダウンロードせず、最新のリリースをダウンロードしてください。
ホスト
ホストOSにPython Gatewayをインストールする場合は、先に(OSに関係なく)Pythonをインストールする必要があります。
Python 3.6.7(64ビット版)をインストールします。 Pythonはデフォルトの推奨場所にインストールすることをお勧めします。
dill モジュールを、pip install dill でインストールします。
ObjectScript コード(すなわち、do $system.OBJ.ImportDir("C:\InterSystems\Repos\Python\isc\py\","*.cls","c",,1))をProduction(Ensembleが有効な)名前空間に読み込みます。 既存の名前空間呼び出しを本番環境で有効にする場合は、write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1) にします。
コールアウトDLL/SO/DYLIBをInterSystems IRISインストール環境の bin フォルダに置きます。 ライブラリファイルは write ##class(isc.py.Callout).GetLib() によって返されるパスに置く必要があります。
Windows
PYTHONHOME 環境変数がPython 3.6.7を参照していることを確認します。
SYSTEM PATH 環境変数に PYTHONHOME 変数(またはその参照先ディレクトリ)が含まれていることを確認します。
Linux
SYSTEM PATH 環境変数に /usr/lib および /usr/lib/x86_64-linux-gnu が含まれていることを確認します(最初にあるのが望ましい)。 /etc/environment ファイルを使用して環境変数を設定します。
undefined symbol: _Py_TrueStruct というエラーが発生した場合はTroubleshooting(トラブルシューティング)セクションを確認して PythonLib プロパティを指定してください。
Mac
Python.orgのPython 3.6.7のみが現在サポートされています。 PATH 変数を確認してください。
環境変数を変更した場合は、InterSystems製品を再起動してください。
Docker
コンテナを使用することには次のような多くのメリットがあります。
- 移植性
- 効率性
- 分離
- 軽量
- 不変性
Dockerの詳細については、こちらの連載記事をご覧ください。
Python GatewayのDockerビルドはすべて2019.1のコンテナをベースにしています。
作成済みのイメージをプルする
docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy:latest を実行してプルし、Python GatewayをInterSystems IRIS Community Edition上で実行してください。 それだけです。
独自のイメージをビルドする
Dockerイメージをビルドするには、リポジトリのルートで次を実行します:docker build --force-rm --tag intersystemscommunity/irispy:latest イメージはデフォルトで intersystems/iris:2019.1.0.510.0-1 イメージにビルドされますが、これは IMAGE 変数を指定することで変更できます。InterSystems IRIS Community Editionからビルドするには、次を実行します:docker build --build-arg IMAGE=store/intersystems/iris:2019.1.0.510.0-community --force-rm --tag intersystemscommunity/irispy:latest
その後、次のコマンドでDockerイメージを実行できます。
docker run -d \
-p 52773:52773 \
-v /<HOST-DIR-WITH-iris.key>/:/mount \
--name irispy \
intersystemscommunity/irispy:latest \
--key /mount/iris.key
InterSystems IRIS Community Editionベースのイメージを実行している場合はキーの指定を省略できます。
Dockerの注意事項
Dockerに関するいくつかの情報を掲載しておきます。
テストプロセス isc.py.test.Process はイメージのアーティファクトを一時ディレクトリに保存します。 このパスはマウントされているディレクトリに変更できます。 そのためには Correlation Matrix: Graph 呼び出しのアノテーションを編集し、f.savefig 関数に有効なファイルパスを指定してください。
ターミナルアクセスの場合は、docker exec -it irispy sh を実行します。
SuperUser/SYS または Admin/SYS のユーザー名/パスワードの組み合わせでSMPにアクセスしてください。
コンテナを停止するには、docker stop irispy && docker rm --force irispy を実行してください。
インストールの検証
Python Gatewayをインストールした後は動作確認を行います。 以下のコマンドを実行してください。
set sc = ##class(isc.py.Callout).Setup()
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var)
write var
Python 変数 xの値 HELLO が出力されるはずです。 戻り値のステータスがエラーの場合、または var が空の場合はreadmeのtroubleshooting(トラブルシューティング)セクションを確認してください。
まとめ
Python Gatewayは迅速かつ簡単にインストールできます。 Dockerに精通している方は最新のイメージを入手してください。そうでない場合は、InterSystems IRISの主なOS(Windows、Linux、Mac)用のキットがあります。 次の記事では、Python Gatewayの使用を開始します。
図解入りガイド
ML Toolkitユーザーグループには、図解入りのインストールガイドもあります。 ML Toolkitユーザーグループは、InterSystems社のGitHub組織の一部として設定されている非公開GitHubリポジトリです。 このリポジトリは、ML Toolkitコンポーネントをインストール、学習、またはすでに使用している外部ユーザーを対象としています。 ML Toolkitユーザーグループに参加するには、以下の内容を含む簡単なメールを MLToolkit@intersystems.com 宛に送信してください(グループメンバーが議論中にあなたを認識して特定するために必要です)。
GitHubのユーザー名
氏名(英文字表記の名前、姓の順)
組織(勤務先、通学先、または在宅勤務)
役職(組織での実際の役職、「学生」、または「無所属」)
国(本拠地としている国)
続けて「Python Gateway パート III:基本機能」をお読みください。
また、前のパート「Python Gateway パート I:はじめに」も確認してください。
InterSystems Open Exchangeで関連アプリケーションを確認してください。
記事
Minoru Horita · 2020年8月6日
この連載記事では、InterSystemsデータプラットフォーム用の[Python Gateway](https://openexchange.intersystems.com/package/PythonGateway)について説明します。 また、InterSystems IRISからPythonコードなどを実行します。 このプロジェクトは、InterSystems IRIS環境にPythonの力を与えます。
* 任意のPythonコードを実行する
* InterSystems IRISからPythonへのシームレスなデータ転送
* Python相互運用アダプタでインテリジェントな相互運用ビジネスプロセスを構築する
* InterSystems IRISからのPythonコンテキストの保存、調査、変更、復元
その他の記事
現時点での連載計画です(変更される可能性があります)。
* [パート I:概要、展望、紹介](https://jp.community.intersystems.com/post/python%C2%A0gateway%C2%A0%E3%83%91%E3%83%BC%E3%83%88%C2%A0i%EF%BC%9A%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
* [パート II:インストールとトラブルシューティング](https://jp.community.intersystems.com/post/python%C2%A0gateway%C2%A0%E3%83%91%E3%83%BC%E3%83%88%C2%A0ii%EF%BC%9A%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%C2%A0)
* [パート III:基本機能](https://jp.community.intersystems.com/post/python-gateway-%E3%83%91%E3%83%BC%E3%83%88iii%EF%BC%9A%E5%9F%BA%E6%9C%AC%E6%A9%9F%E8%83%BD)
* [パート IV:相互運用アダプタ](https://jp.community.intersystems.com/post/python-gateway-%E3%83%91%E3%83%BC%E3%83%88-iv%EF%BC%9A%E7%9B%B8%E4%BA%92%E9%81%8B%E7%94%A8%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)
* パート V:Execute関数
* パート VI: Jupyter Notebook
現在、デフォルトのPython 3のexecutorが使用されています。
この拡張機能はアノテーションにPythonコードが含まれていることを前提としており、アクティビティ名を先行する読み取り専用の見出しとして使用します。
最近、私はJupyterのサポートを拡張しました。 これで、JupyterからPythonGatewayのビジネスプロセスを開発できるようになりました。 以下のように何でも対応できます。
* 新しいビジネスプロセスを作成する
* ビジネスプロセスを削除する
* 新しいアクティビティを作成する
* アクティビティを変更する
* アクティビティを削除する
記事
Mihoko Iijima · 2020年7月21日
IRIS で REST サーバを作成する際に準備する REST ディスパッチクラスを API ファーストの手順で作成する方法を解説します。(OpenAPI 2.0に基づいて作成したアプリケーション定義を使用してディスパッチクラスを作成する手順を解説します)
このビデオには、以下の関連ビデオがあります。
IRISの基本操作についてのビデオ(索引ページ)
InterSystems開発者コミュニティ biginnerタグ一覧
もくじ
最初~ 復習ビデオ/関連ビデオについて など
IRIS で 作成する REST サーバの仕組み
IRISでのJSON操作について
手動によるRESTディスパッチクラスの作成
2:36~ 作成するディスパッチクラスの内容
4:15~ RESTディスパッチクラス:APIファーストで作成する方法(手順説明)
5:55~ アプリケーションの仕様を定義する (例)
6:19~ IRISにアプリケーション仕様を登録する(説明)など
7:40~ POST要求の実行 (例)
8:24~ 実演
↓実演で使用したURL↓ http://localhost:52773/api/mgmnt/v2/user/crud2
10:32~ (POST要求の)実行結果
11:50~ ベースURLの設定(管理ポータルでの設定)+ 実演
13:23~ curd2.implクラスの実装方法(スタジオとVSCodeで確認)
16:30~ curd2.implクラスの実装方法
↓ドキュメントへのリンク↓ https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GREST_implementation
18:02~ VSCode:curd2.implクラスの変更方法
18:40~ GET要求:全件取得 GetAllPerson()の実装 実演
24:44~ GET要求:全件取得 Postmanでテスト
25:20~ POST要求:Test.Person(1件)の実装 実演
29:37~ POST要求:Postmanでテスト
31:10~ GET要求:IDを指定したTest.Personの取得 GetPerson()の実装 実演
33:42~ GET要求:IDを指定したTest.Person Postmanでテスト
34:02~ PUT要求:IDを指定してTest.Personの修正 UpdatePerson()の実装 実演
36:12~ PUT要求:Postmanでテスト
36:50~ DELETE要求:IDを指定してTest.Personを削除 DeletePerson()の実装 実演
38:00~ DELETE要求:Postmanでテスト
38:30~ まとめ
38:57~ ビデオで確認できたこと
※YouTubeでご覧いただくと、もくじの秒数にジャンプできます。
サンプルコード一式(Git)(コンテナでサンプル環境を開始できます。詳細は Readme をご参照ください。)
impl クラスコード例
記事
Tomohiro Iwamoto · 2020年8月13日
本記事について
InterSystems IRISは、管理ポータルへのアクセス方法がデフォルトではhttpとなっており、クライアントが社内、サーバがクラウドという配置の場合、なんらかの方法でトラフィックを暗号化したいと考える方も多いかと思います。そこで、AWS上にて稼働中のIRISの管理ポータル(あるいは各種RESTサービス)との通信を暗号化する方法をいくつかご紹介したいと思います。
本記事では、アクセスにIRIS組み込みのapacheサーバを使用しています。ベンチマーク目的や本番環境のアプリケーションからのアクセス方法としては使用しないでください。短期間・少人数での開発・動作検証・管理目的でのアクセスを暗号化する事を想定しています。
ドメイン名とメジャーな認証局発行のSSLサーバ証明書を用意できればベストなのですが、上記のような用途の場合、コスト面でなかなか難しいと思います。ですので、下記の証明書の使用を想定しています。- 自己署名(いわゆるオレオレ証明書)- 自分で建てた認証局で署名した証明書(いわゆるオレオレ認証局)
また、下記のような実行環境を想定しています。
手元のPC環境
O/S
Windows10
ブラウザ
Chrome/FireFox/Edge
IDE
vscode+ObjectScript拡張
ローカルPCで未使用のポート番号
8888
EC2インスタンス作成時に使用したキーペアの秘密鍵
aws-secret.pem
AWS環境
IRISホストの公開ホスト名
ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com
IRISのウェブサーバポート番号
52773
O/S
Ubuntu 18.04LTS
O/Sユーザ名
ubuntu
直接アクセス
1) ポートフォワーディングを使う
最もお手軽な方法です。セキュリティグループで、SSH用のポート(22)をインターネットからのインバウンド許可する必要があります。
C:\Users\xxxx>ssh -i aws-secret.pem -L 8888:localhost:52773 ubuntu@ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com
このコマンドを実行中は、SSHを実行したPCからは、IRISホストに
http://localhost:8888/csp/sys/%25CSP.Portal.Home.zen
でアクセスできます。sshでログインした状態になっているので、開発時に行うような端末操作(IRISの起動・停止、IRISセッション開始など)に利用できます。この方法は、スーパーサーバ・ポート(51773)にも有効ですので、Studioによる通信の暗号化にも使用できます。
注意)Windowsの場合、ssh用の秘密鍵(aws-secret.pem)を%USERPROFILE%\に配置しないと、エラーになります。
C:\Users\xxxx>dir %USERPROFILE%\aws-secret.pem
2020/07/14 17:10 1,692 aws-secret.pem
1 個のファイル 1,692 バイト
0 個のディレクトリ 108,323,176,448 バイトの空き領域
vscodeの設定(settings.json)は下記のようになります。
{
"objectscript.conn": {
"host": "localhost",
"https": false,
"port": 8888,
"ns": "USER",
"username": "xxx",
"password": "xxx",
"active": true
}
}
2) SSL設定を施したReverse Proxyを使う
IRISホストに自己証明書を適用したapacheやnginxをReverseProxy設定で配置します。セキュリティグループで、HTTPS用のポート(443)をインターネットからのインバウンド許可する必要があります。
apache及びnginxの設定を行うスクリプトをこちらに掲載しています。これにより、ブラウザからIRISホストに
https://ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com/csp/sys/%25CSP.Portal.Home.zen
でアクセスできます。
vscodeの設定(settings.json)は下記のようになります。
{
"objectscript.conn": {
"host": "ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com",
"https": true,
"port": 443,
"ns": "USER",
"username": "xxx",
"password": "xxx",
"active": true
}
}
踏み台ホスト経由
検証用とはいえ、ユーザデータやコードを含むEC2インスタンスのSSHやHTTPSポートをインターネット解放するのは不安がある場合は、踏み台ホスト(Bastion Host)を使用しますが上記の方法は、踏み台ホストがある場合でも同様です。セキュリティグループで、踏み台ホストとIRISホスト間のTCPトラフィックをインバウンド許可する必要があります。
下記のような実行環境であると想定します。
AWS環境
IRISホストの公開ホスト名
なし
IRISホストの内部IPアドレス
10.0.1.81
踏み台ホストの公開ホスト名
ec2-54-250-169-yyy.ap-northeast-1.compute.amazonaws.com
1) ポートフォワーディングを使う
セキュリティグループで、SSH用のポート(22)をインターネットからのインバウンド許可する必要があります。
下記のコマンドを、踏み台ホストに対して実行します。
C:\Users\xxxx>ssh -i aws-secret.pem -L 8888:10.0.1.81:52773 ubuntu@ec2-54-250-169-yyy.ap-northeast-1.compute.amazonaws.co
以下、同様です。
2) SSL設定を施したReverse Proxyを使う
セキュリティグループで、HTTPS用のポート(443)をインターネットからのインバウンド許可する必要があります。同じ作業を、踏み台ホストで実行します。転送先のURLをIRISホストの内部IPアドレス:10.0.1.81に変更します。
ProxyRequests Off
ProxyPass / http://10.0.1.81:52773/
ProxyPassReverse / http://10.0.1.81:52773/
以下、ホスト名が踏み台ホスト名に変わる事以外は、同様です。
AWS/ALB経由
あまり一般的ではないかもしれませんが、AWS/ALBに自己証明書を適用することができます。この場合、ALBにてSSL終端させるので、別途SSL有効化したapacheを用意する手間が省けます。
ALBの作成には、最低2つのAZの指定が必要なので、ここではICM(InterSystems Cloud Manager)にて、DM(2台)をMIRROR:trueで作成した環境を使用しました。(ICMについては、icmを利用してIRISクラスターを構成する方法をご覧ください)
default.json (抜粋)
{
"Zone": "ap-northeast-1a,ap-northeast-1c",
"Mirror": "true",
}
definitions.json
[
{
"Role": "DM",
"Count": "2",
"MirrorMap": "primary,backup",
"ZoneMap": "0,1"
}
]
setup.shで作成した証明書ファイルを使用します。これらのファイルをACM(Certificate Manager)にインポートします。証明書本文:server.crtの内容証明書のプライベートキー:server.keyの内容証明書チェーン:inca.pemの内容
補足)awscliを使える環境であれば、setup.shの最後の行をアンコメントすれば自動登録されます。
下記設定でALBを新規作成します。
手順 1: ロードバランサーの設定名前:任意スキーム:インターネット向けIP アドレスタイプ:ipv4リスナー:https(port:443)アベイラビリティーゾーン:ap-northeast-1a,ap-northeast-1c
手順 2: セキュリティ設定の構成デフォルトの証明書の選択:ACM から証明書を選択する証明書の名前:(先ほどACMにインポートした証明書を選択)
手順 3: セキュリティグループの設定セキュリティグループの設定:新しいセキュリティグループを作成する→https(port:443)のみを許可。
手順 4: ルーティングの設定ターゲットグループ:新しいターゲットグループ名前:任意ターゲットの種類:インスタンスプトロコル:httpポート:52773
ヘルスチェック プトロコル:httpパス:/csp/bin/mirror_status.cxwヘルスチェックの詳細設定ポート:上書き→52773
手順 5: ターゲットの登録先ほど作成したEC2インスタンスを登録済みに追加
作成したALBの状態がactiveになれば、ALBのDNS名を使ってhttpsアクセスできるようになります。
https://[DNS名]/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen
記事
Megumi Kakechi · 2021年5月27日
これは InterSystems FAQ サイトの記事です。
InterSystems Data Platformは、データベースキャッシュやルーチンキャッシュなどの共有メモリを、起動時に割り当てます。
バージョン2007.1以降をWindows上で動作させる際、Windows特有の共有メモリに関する問題が生じることが判明しています。
詳細については、以下の技術資料をご参照ください。
Windows上での共有メモリの割り当てについて
また、以下の記事もあわせてご覧ください。
コンソールログに "Failed to allocate xxxMB shared memory using large pages..." のエラーメッセージが出ているとき
IRISが使用するワーキングセット(メモリ)について