#継続的デリバリー

0 フォロワー · 26 投稿

継続的デリバリー - チームが短いサイクルでソフトウェアを作成し、ソフトウェアをいつでも確実にリリースできるようにするソフトウェアエンジニアリング手法です。 ソフトウェアの構築、テスト、リリースをより速く、より頻繁に行うことを目的としています。

InterSystems公式 Masahito Miura · 7月 30, 2025

インターシステムズは InterSystems IRIS® data platform のバージョン 2025.2 をリリースしました。2025.2 は Continuous Delivery(CD)リリースです。InterSystems IRIS for Health™ および HealthShare®Health Connect™ のバージョン 2025.2 はセキュリティ・アップデートによるミラーリングの制限のため、現在提供されていません (詳細は後述)。

リリースハイライト

このリリースでは、セキュリティ、開発者エクスペリエンス、運用および相互運用性にわたってインパクトのある機能強化が導入されています。注目すべき新機能は以下のとおりです:

1.   新しい IRISSECURITY データベースによるセキュリティ強化

  o    セキュリティー・データは新しい IRISSECURITY データベースに移されました。このデータベースは暗号化することができます。

  o    新しいロール %SecurityAdministrator は、一元管理をサポートします。

  o    セキュリティ関連のグローバルとテーブルへの直接アクセスは非推奨です。代わりに提供されている API を適切なパーミッションで使用してください。

0
0 56
InterSystems公式 Seisuke Nakahashi · 11月 28, 2024

インターシステムズは InterSystems IRIS data platform、InterSystems IRIS for Health、HealthShare Health Connect のバージョン 2024.3 をリリースしました。2024.3 は Continuous Delivery(CD)リリースです。

0
0 81
記事 Toshihiko Minamoto · 10月 24, 2024 8m read

CI/CD シリーズの新しい章へようこそ。ここでは、InterSystems テクノロジーと GitLab を使用したソフトウェア開発の様々な可能なアプローチを取り上げています。 今回も相互運用性について説明を続けますが、特に相互運用性デプロイの監視に焦点を当てます。 まだアラートをすべての相互運用性プロダクションにセットアップしていない場合は、それをセットアップしてエラーとプロダクションの状態についての一般的なアラートを取得できるようにしてください。

非活動タイムアウトは、すべての相互運用性ビジネスホストに共通する設定です。 ビジネスホストは、「Inactivity Timeout(非活動タイムアウト)」フィールドに指定された秒数以内にメッセージを受信しない場合に非アクティブステータスになります。 プロダクションの監視サービスはプロダクション内のビジネスサービスとビジネスオペレーションのステータスを定期的に確認し、非活動タイムアウト期間内にアクティビティがない場合にその項目を「非アクティブ」にマークします。 デフォルト値は 0(ゼロ)です。 この設定が 0 である場合、ビジネスホストはアイドル状態がどれほど続いても Inactive にマークされることはありません。

これはアラートを生成し、構成されたアラートと合わせてプロダクションの問題に関するリアルタイム通知を可能にするため、非常に便利な設定です。 ビジネスホストがアイドル状態である場合、プロダクション、統合、またはネットワーク接続に調べる価値のある問題がある可能性があります。 ただし、ビジネスホストには一定時間の非活動タイムアウトを 1 つしか設定できないため、夜間、週末、休日などのトラフィックの少ない既知の期間中に不要なアラートを生成する可能性があります。 この記事では、動的な非活動タイムアウトを実装するためのいくつかのアプローチを説明します。 機能する例(現在ある顧客サイトの本番環境で実行しているもの)を紹介していはいますが、この記事は独自の動的な非活動タイムアウトの実装を構築するためのガイドラインを紹介することを目的としているため、ここに提案するソリューションを唯一の代替手法と見なさないようにしてください。

構想

相互運用性エンジンは、各ビジネスホストをサブスクリプトとして、最新のアクティビティのタイムスタンプを値として含む特殊な HostMonitor グローバルを維持しています。 非活動タイムアウトを使用する代わりに、このグローバルを監視し、HostMonitor の状態に基づいてアラートを生成することにします。 HostMonitor は、非活動タイムアウト値が設定されているかに関係なく維持されます。常にオンの状態です。

実装

まず初めに、以下のようにして HostMonitor グローバルを反復処理します。

Set tHost=""
For { 
  Set tHost=$$$OrderHostMonitor(tHost) 
  Quit:""=tHost
  Set lastActivity = $$$GetHostMonitor(tHost,$$$eMonitorLastActivity)
}

監視サービスを作成するには、各ビジネスホストに対して以下のチェックを実行する必要があります。

  1. ビジネスホストが完全に動的非活動タイムアウトのスコープで管理されるかを決定します(たとえば、トラフィックの多い hl7 インターフェースには通常の非活動タイムアウトを適用できます)。
  2. ビジネスホストがスコープ内である場合、最後のアクティビティからの時間を計算する必要があります。
  3. 次に、非活動時間といくつかの条件(日中/夜間、曜日)に基づいて、アラートを送信するかを決定する必要があります。
  4. アラートレコードを送信する場合は、アラートを 2 回送信しないように、最後のアクティビティの時間を記録する必要があります。

すると、コードは以下のようになります。

Set tHost=""
For { 
  Set tHost=$$$OrderHostMonitor(tHost) 
  Quit:""=tHost
  Continue:'..InScope(tHost)
  Set lastActivity = $$$GetHostMonitor(tHost,$$$eMonitorLastActivity)
  Set tDiff = $$$timeDiff($$$timeUTC, lastActivity)
  Set tTimeout = ..GetTimeout(tDayTimeout)
  If (tDiff > tTimeout) && ((lastActivityReported="") || ($system.SQL.DATEDIFF("s",lastActivityReported,lastActivity)>0)) {
    Set tText = $$$FormatText("InactivityTimeoutAlert: Inactivity timeout of '%1' seconds exceeded for host '%2'", +$fn(tDiff,,0), tHost)
    Do ..SendAlert(##class(Ens.AlertRequest).%New($LB(tHost, tText)))
    Set $$$EnsJobLocal("LastActivity", tHost) = lastActivity
  } 
}

カスタムロジックを実際に格納している InScopeGetTimeout メソッドを実装したら、完了です。 この例では、日中のタイムアウト(Day Timeout、これはビジネスホストごとに異なる可能性がありますが、デフォルト値があります)と夜間のタイムアウト(Night Timeout、追跡されているすべてのビジネスホストに共通)があるため、ユーザーは以下の設定を指定する必要があります。

  • スコープ: ビジネスホスト名(または名前の一部)とそれぞれのカスタムの DayTimeout 値を組み合わせた、行あたり 1 つのリスト。 スコープ内のビジネスホストのみが追跡されます(少なくとも 1 つのスコープに対して $find(host, scope) 条件を満たす必要があります)。 すべてのビジネスホストを監視する場合は空白のままにします。 例: OperationA=120
  • DayStart: 00:00:00 からの秒。日中はこの後に開始します。 DayEnd より少ない数値である必要があります。 すなわち、 06:00:00 AM は 6*3600 = 21600 となります。
  • DayEnd: 00:00:00 からの秒。日中はこの後に終了します。 DayStart より大きな数値である必要があります。 すなわち、 08:00:00 PM は (12+8)*3600 = 72000 となります。
  • DayTimeout: 日中にアラートを発生させるための秒単位のデフォルトのタイムアウト値。
  • NightTimeout: 夜間にアラートを発生させるための秒単位のタイムアウト値。
  • WeekendDays: 週末と見なされる曜日。 カンマ区切りです。 週末の場合、NightTimeout が 1 日 24 時間適用されます。 例: 1,7。日付の DayOfWeek 値は、$SYSTEM.SQL.Functions.DAYOFWEEK(date-expression) を実行してチェックします。 デフォルトでは、返される値は以下の曜日を表します: 1 — 日曜日、2 — 月曜日、3 — 火曜日、4 — 水曜日、5 — 木曜日、6 — 金曜日、7 — 土曜日。

完全なコードを確認できますか、特に興味深い点はないと思います。 単に InScope と GetTimeout メソッドを実装しているだけです。 他の基準を使用して、InScope と GetTimeout メソッドを必要に応じて調整できます。

問題

言及する問題は 2 つあります。

  • 非アクティブビジネスホストには黄色いアイコンがない(ホストの非活動タイムアウト設定値がゼロであるため)。
  • Out-of-host 設定 - 開発者は新しいビジネスホストを追加するたびにこのカスタム監視サービスを更新して、動的な非活動タイムアウトを使用することを覚えておく必要があります。

代替手法

上記のソリューションを実装する前に、以下のアプローチを探りました。

  1. 日中/夜間が開始するときに InactivityTimeout 設定を変更するビジネスサービスを作成する。 当初、この方法で進もうと考えましたが、主に、InactivityTimeout 設定を変更するたびに影響のあるすべてのビジネスホストを再起動しなければならないなど、多数の問題に遭遇しました。
  2. カスタムアラートプロセッサーに、夜間の InactivityTimeout である場合にアラートを送信する代わりにアラートを抑止するというツールを追加する。 Ens.MonitorServoce からの非活動アラートが LastActivity を更新するため、カスタムアラートプロセッサーからは「実際の」最終アクティビティタイムスタンプを取得する方法がわかりません(Ens.MessageHeader をクエリする以外で)。 また「夜間」である場合、ホストの状態を OK に戻し、まだ夜間の InactivityTimeout でなければアラートを抑止します。
  3. Ens.MonitorService を拡張する。これは、OnMonitor コールバック以外は可能に思えませんでしたが、他の目的には役立ちます。

まとめ

必ずアラートをすべての相互運用性プロダクションにセットアップして、エラーやプロダクションの状態についての一般的なアラートを取得します。 静的な非活動タイムアウトで十分でなければ、動的な実装を簡単に作成できます。

リンク

0
0 53
記事 Toshihiko Minamoto · 10月 14, 2024 16m read

CI/CD シリーズの新しい章へようこそ。ここでは、InterSystems テクノロジーと GitLab を使用したソフトウェア開発の様々な可能なアプローチを取り上げています。

今回は、相互運用性についてご紹介しましょう。

問題

アクティブな相互運用性プロダクションがある場合、2 つの個別のプロセスフローが存在します。メッセージを処理する稼動中のプロダクションと、コード、プロダクションの構成、およびシステムデフォルト設定を更新する CI/CD プロセスフローです。

明らかに、CI/CD プロセスは相互運用性に影響しますが、 本題は次にあります。

  • 更新中には実際に何が起きているのか?
  • 更新中の本番停止を最小限に抑えるか失くしてしまうには、どうすればよいのか?

用語

  • ビジネスホスト(BH)- 相互運用性プロダクションの構成可能な要素: ビジネスサービス(BS)、ビジネスプロセス(BP、BPL)、ビジネスオペレーション(BO)。
  • ビジネスホストジョブ(ジョブ)- ビジネスホストのコードを実行し、相互運用性プロダクションによって管理される InterSystems IRIS ジョブ。
  • プロダクション - 相互に接続されたビジネスホストのコレクション。
  • システムデフォルト設定(SDS)- InterSystems IRIS がインストールされている環境に固有の値。
  • アクティブメッセージ - 1 つのビジネスホストジョブによって現在処理されているリクエスト。 1 つのビジネスホストジョブに対するアクティブメッセージは最大 1 つです。 アクティブメッセージのないビジネスホストジョブはアイドルです。

何が起きているのか?

プロダクションのライフサイクルから見てみましょう。

プロダクションの起動

まず初めに、プロダクションを起動できます。 ネームスペースあたり 1 つのプロダクションのみを同時に実行でき、一般に(作業内容や過程を十分に理解していない限り)、ネームスペースごとに実行するプロダクションは 1 つ限りです。 1 つのネームスペース内で 2 つ以上の異なるプロダクションを切り替えるのは推奨されません。 プロダクションを起動すると、そのプロダクションに定義されたすべての有効なビジネスホストが起動します。 一部のビジネスホストが起動に失敗してもプロダクションの起動には影響しません。

ヒント:

  • システム管理ポータルから、または ##class(Ens.Director).StartProduction("ProductionName") を呼び出してプロダクションを起動します。
  • OnStart メソッドを実装して、プロダクションの起動時に(ビジネスホストジョブが起動する前に)任意のコードを実行します。
  • プロダクションの起動は監査可能なイベントです。 誰がいつ起動したかを必ず監査ログで確認できます。

プロダクションの更新

プロダクションが起動した後、Ens.Director は実行中のプロダクションを継続的に監視します。 プロダクションの状態は 2 つあります。プロダクションクラスとシステムデフォルト設定に定義された target state と、ジョブが作成されたときに適用された設定で現在実行しているジョブの running state です。 希望する状態と現在の状態が同一である場合はすべて良好ですが、異なる場合にはプロダクションを更新する必要があります。 通常、この場合には、システム管理ポータルのプロダクション構成ページに赤い「更新」ボタンが表示されます。

プロダクションを更新すると、現在のプロダクションの状態をターゲットプロダクションの状態に一致させることになります。

プロダクションを更新するために ##class(Ens.Director).UpdateProduction(timeout=10, force=0) を実行すると、各ビジネスホストにおいて以下が行われます。

  1. アクティブな設定をプロダクション/SDS/クラスの設定と比較します。
  2. (1) で不一致が生じた場合に限り、ビジネスホストは古いものとしてマークされ、更新が必要となります。

これを各ビジネスホストに対して実行した後、UpdateProduction は一連の変更をビルドします。

  • ビジネスホストを停止
  • ビジネスホストを起動
  • プロダクション設定を更新

そしてその後で適用します。

このようにして、何も変更せずに設定を「更新」するとプロダクションが停止しません。

ヒント:

  • システム管理ポータルから、または ##class(Ens.Director).UpdateProduction(timeout=10, force=0) を呼び出してプロダクションを更新します。 システム管理ポータルのデフォルトの更新タイムアウトは 10 秒です。 メッセージの処理がそれ以上かかることが分かっている場合は、タイムアウト時間がより長い Ens.Director:UpdateProduction を呼び出します。
  • 更新タイムアウトはプロダクションの設定であり、より長い時間に値を変更できます。 この設定はシステム管理ポータルに適用されます。

コードの更新

UpdateProduction は古いコードで BH を更新することはありません。 これは安全を優先した動作ではありますが、根底にあるコードが変更した場合にすべての実行中の BH を自動的に更新する場合は、以下のように行います。

まず、以下のように読み込んでコンパイルします。

do $system.OBJ.LoadDir(dir, "", .err, 1, .load)
do $system.OBJ.CompileList(load, "curk", .errCompile, .listCompiled)

listCompiled には、u フラグにより、実際にコンパイルされたすべての項目が含まれます(読み込まれるセットを最小限に抑えるには、git diffs を使用します)。 この listCompiled を使用して、コンパイルされたすべてのクラスの $lb を取得します。

set classList = ""
set class = $o(listCompiled(""))
while class'="" { 
  set classList = classList _ $lb($p(class, ".", 1, *-1))
  set class=$o(listCompiled(class))
}

その後で、再起動が必要な BH のリストを計算します。

SELECT %DLIST(Name) bhList
FROM Ens_Config.Item 
WHERE 1=1
  AND Enabled = 1
  AND Production = :production
  AND ClassName %INLIST :classList

最後に、bhList を取得した後に、影響のあるホストを停止して起動します。

for stop = 1, 0 {
  for i=1:1:$ll(bhList) {
    set host = $lg(bhList, i)
    set sc = ##class(Ens.Director).TempStopConfigItem(host, stop, 0)
  }
  set sc = ##class(Ens.Director).UpdateProduction()
}

プロダクションの停止

プロダクションは停止可能です。つまり、すべての美自演すホストジョブにシャットダウンのリクエストを送信します(アクティブなメッセージがある場合はその処理が完了してから安全にシャットダウンされます)。

ヒント:

  • システム管理ポータルから、または ##class(Ens.Director).StopProduction(timeout=10, force=0) を呼び出してプロダクションを停止します。 システム管理ポータルのデフォルトの停止タイムアウトは 120 秒です。 メッセージの処理がそれ以上かかることが分かっている場合は、タイムアウト時間がより長い Ens.Director:StopProduction を呼び出します。
  • シャットダウンタイムアウトはプロダクションの設定です。 より長い時間に値を変更できます。 この設定はシステム管理ポータルに適用されます。
  • OnStop メソッドを実装して、プロダクションの停止時に任意のコードを実行します。
  • プロダクションの停止は監査可能なイベントであり、誰がいつ停止したのかを必ず監査ログで確認できます。

ここで重要なのは、プロダクションはビジネスホストの合計であることです。

  • プロダクションを起動するとすべての有効なビジネスホストが起動します。
  • プロダクションを停止するとすべての実行中のビジネスホストが停止します。
  • プロダクションを更新すると、古いセットのビジネスホストが計算され、これらが先に停止されてからその直後にもう一度起動されます。 また、新たに追加されたビジネスホストは開始のみされ、プロダクションから削除されたビジネスホストは単に停止されます。

この流れで、ビジネスホストのライフサイクルに進みましょう。

ビジネスホストの起動

ビジネスホストは(プールサイズの設定値に応じて)同一のビジネスホストジョブで構成されています。 ビジネスホストを起動すると、すべてのビジネスホストジョブが起動します。 これらは並列して起動します。

個別のビジネスホストジョブは以下のように起動します。

  1. 相互運用性はビジネスホストジョブになる新しいプロセスを JOB で起動します。
  2. 新しいプロセスは相互運用性ジョブとして登録されます。
  3. ビジネスホストコードとアダプターコードがプロセスメモリに読み込まれます。
  4. ビジネスホストとアダプターに関連する設定がメモリに読み込まれます。 以下はその順序です。 a. プロダクション設定(システムデフォルトとクラス設定をオーバーライドします)。 b. システムデフォルト設定(クラス設定をオーバーライドします)。 c. クラス設定。
  5. ジョブの準備が整い、メッセージを受け入れ始めます。

(4)が完了すると、ジョブは設定またはコードを変更できないため、新しい/同じコードと新しい/同じシステムデフォルト設定をインポートしても、現在実行中の相互運用性ジョブに影響しません。

ビジネスホストの停止

ビジネスホストジョブを停止すると、以下のようになります。

  1. 相互運用性はジョブにメッセージ/入力の受け入れ停止を要求します。
  2. アクティブなメッセージがある場合、ビジネスホストジョブにはそれを処理するための数秒のタイムアウトがあります(ジョブを完了、つまり BO の場合は OnMessage メソッド、BS の場合は OnProcessInput メソッド、BPL BP の場合は状態の S<int> メソッド、BP の場合は On*メソッドを終了します)。
  3. アクティブなメッセージがタイムアウトと force=0 までに処理されていない場合、そのビジネスホストのプロダクションの更新は失敗します(SMP に赤い更新ボタンが表示されます)。
  4. 以下のいずれかを満たす場合は停止します。
    • アクティブなメッセージがない
    • アクティブなメッセージは timeout の前に処理された
    • アクティブなメッセージはタイムアウト前に処理されなかったが force=1 で処理された
  5. ジョブは 相互運用性から登録解除され停止します。

ビジネスホストの更新

ビジネスホストの更新では、ビジネスホストの現在実行中のジョブを停止し、新しいジョブを起動します。

ビジネスルール、ルーティングルール、DTL

すべてのビジネスホストは、新しいバージョンのビジネスルール、ルーティングルール、および DTL が利用できるようになると直ちにそれらを使用し始めます。 この状況では、ビジネスホストの再起動は不要です。

オフラインでの更新

とは言え、時にはプロダクションの更新には個別のビジネスホストの停止が必要です。

ルールは新しいコードで決まる

この状況を考えてみてください。 任意の基準に基づいてメッセージをビジネスプロセス A または B にルーティングする現在のルーティングルール X があるとします。 新しいコミットにおいて、以下を同時に追加します。

  • ビジネスプロセス C
  • メッセージを A、B、または C にルーティングする新しいバージョンのルーティングルール X

このシナリオでは、先にルールを読み込んでからプロダクションを更新することはできません。 新しくコンパイルされるルールは、InterSystems IRIS がまだコンパイルしていないかもしれないビジネスプロセス C に直ちにルーティングし始めるか、相互運用性がまだ使用できるように更新されていないためです。 この場合、ルーティングルールでビジネスホストを無効に子、コードを更新し、プロダクションを更新して、ビジネスホストをもう一度有効にする必要がります。

注意:

  • プロダクションデプロイファイルを使用してプロダクションを更新する場合、影響されるすべての BH は自動的に無効化/有効化されます。
  • InProc によって呼び出されたホストの場合、コンパイルによって呼び出し元が保持する特定のホストのキャッシュが無効になります。

ビジネスホスト間の依存関係

ビジネスホスト間の依存関係は重要です。 ビジネスプロセス A と B があり、A が B にメッセージを送信するとします。 新しいコミットにおいて、以下を同時に追加します。

  • リクエストの新しいプロパティX を B に設定する新しいバージョンのプロセス A
  • 新しいプロパティ X を処理できる新しいバージョンのプロセス B

このシナリオでは、プロセス B を先に更新してから A を更新する必要があります。 これは次のいずれかの方法で行えます。

  • 更新の間、ビジネスホストを無効化する
  • 更新を 2 つに分ける: まずプロセス B のみを更新してから、その後の別の更新で、プロセス A から B にメッセージを送信し始める。

新しいバージョンのプロセス A と B に古いバージョンとの互換性がない場合のより困難な状況では、ビジネスホストの停止が必要となります。

キュー

更新後に、ビジネスホストが古いメッセージを処理できないことが分かっている場合、ビジネスホストキューが更新前に空になっていることを確認する必要があります。 これを行うには、ビジネスホストにメッセージを送信するすべてのビジネスホストを無効化し、そのキューが空になるのを待ちます。

BPL ビジネスプロセスにおける状態の変更

はじめに、BPL BP の仕組みから簡単に説明します。 BPL BP をコンパイルした後、2 つのクラスが完全な BPL クラス名と同じ名前でパッケージに作成されます。

  • Thread1 クラスはメソッド S1, S2, ... Sn を含み、BPL 内のアクティビティに対応します。
  • Context クラスにはすべてのコンテキスト変数があり、BPL が実行する次の状態もあります(S5)・

また BPL クラスは永続であり、現在処理中のリクエストを格納します。

BPL は Thread クラスで S メソッドを実行し、それにおうじて BPL クラステーブル、Context テーブル、および Thread1テーブルを更新することによって機能します。ここで、「処理中」の 1 つのメッセージは BPL テーブル内の 1 行になります。 リクエストが処理されると、BPL は BPL、Context、および Thread エントリを削除します。 BPL BP は非同期であるため、1 つの BPL ジョブは S 呼び出しの間に情報を保存して異なるリクエストを切り替えることで、同時に多数のリクエストを処理できます。 たとえば、BPL は 1 つのリクエストが sync アクティビティに到達するまで処理し、BO からの応答を待ちます。 現在のコンテキストを %NextState プロパティ(Thread1 クラス)をレスポンスアクティビティ S メソッドに設定してディスクに保存し、BO が応答するまで他のリクエストを処理します。 BO が応答したら、BPL はコンテキストをメモリに読み込んで、%NextState プロパティに保存された状態に対応するメソッドを実行します。

では、BPL を更新したらどうなるでしょうか? まず、少なくとも以下の 2 つの条件の 1 つを満たしていることをチェックする必要があります。

  • 更新中に、Context テーブルが空である。つまり、処理中のアクティブなメッセージがない。
  • 新しい状態は古い状態と同じであるか、新しい状態は古い状態の後に追加されている。

少なくとも 1 つの条件を満たしている場合は、問題ありません。 更新後 BPL が処理する更新前リクエストが存在しないか、状態が最後に追加される、つまり古いリクエストもそこに含まれることが可能です(更新前リクエストが更新後 BPL アクティビティと処理に互換していることが前提です)。

ただし、処理中のアクティブなリクエストが存在し、BPL が状態の順序を変更した場合はどうでしょうか? 理想的には、待機できるのであれば、BPL 呼び出し元を無効にしてキューが空になるまで待機します。 Context テーブルが空であることも確認します。 キューには未処理のリクエストのみが表示され、Context テーブルは処理中のリクエストを格納することを覚えておきましょう。つまり、非常にビジーな BPL のキューサイズが 0 となる場合があり、それは正常です。 その後、BPL を無効にし、更新を実行して、以前に無効にしたすべてのビジネスホストを有効にします。

それが可能でない場合は(通常、非常に時間のかかる BPL がある場合。リクエストの処理に約 1 週間かかった BPL の更新ケースや更新ウィンドウが短すぎたケースを覚えています)、BPL バージョン管理を使用します。

または、更新スクリプトを書くことができます。 この更新スクリプトでは、更新された BPL が古いリクエストを処理できるように、古い次の状態を新しい次の状態にマッピングして、Thread1 テーブルで実行します。 もちろん更新期間中は BPL を無効にしておく必要があります。 とは言え、これは非常にまれな状況であり、通常は行う必要はありませんが、その必要性が生じた場合にはこれを使用することができます。

まとめ

相互運用性は、根底にあるコードが変更した後でプロダクションを最新状態にするために必要となるアクションを最小限に抑えるために、洗練されたアルゴリズムを実装します。 SDS の更新ごとに安全なタイムアウトで UpdateProduction を呼び出せます。 それぞれのコードの更新については更新ストラテジーを決定する必要があります。

git diffs を使ってコンパイルされるコードの量を最小限に抑えると、コンパイル時間の軽減に役立ちますが、コードをそのコード自体で「更新」して再コンパイルするか、同じ値で設定を「更新」するとプロダクションの更新はトリガーされないか不要となります。

ビジネスルール、ルーティングルール、および DTL を更新してコンパイルすると、プロダクションを更新せずにすぐにアクセス可能になります。

最後に、プロダクションの更新は安全な操作であり、通常、停止は必要ありません。

リンク

この記事の執筆において貴重な支援を提供してくださった @James MacKeith@Dmitry Zasypkin、および @Regilo Regilio Guedes de Souza に感謝申し上げます。

0
0 60
記事 Toshihiko Minamoto · 10月 8, 2024 9m read

約 4 年のギャップを経て、私の CI/CD シリーズが帰ってきました! 長年にわたり、InterSystems の数社のお客様と連携し、様々なユースケースに対応する CI/CD パイプラインを開発してきました。 この記事で紹介する情報が誰かのお役に立てられれば幸いです。

この連載記事では、InterSystems テクノロジーと GitLab を使用したソフトウェア開発の様々な可能なアプローチを取り上げています。

取り上げたいトピックは広範にありますが、今回は、コードを超えた内容についてお話ししましょう。構成とデータについてです。

問題

前回はコードの昇格について話しました。ある意味ステートレスで、常に、(おそらく)空のインスタンスから完全なコードベースへと進めます。 ただし、時にはデータまたは状態を提供することも必要です。 データには様々なタイプがあります。

  • 構成: ユーザー、ウェブアプリ、LUT、カスタムスキーマ、タスク、ビジネスパートナーなど
  • 設定: 環境固有の key-value ペア
  • データ: 参照テーブルとアプリが機能するために提供しなければならない場合があるテーブル

これらすべてのデータタイプについて、およびソース管理にコミットしてからデプロイする方法について説明します。

構成

システム構成は多数のクラスに広がっていますが、InterSystems IRIS はほとんどを XML にエクスポートできます。 まず最初に、これは以下についての情報を含むSecurityパッケージです。

  • Web アプリケーション
  • DocDB
  • ドメイン
  • 監査イベント
  • KMIPServers
  • LDAP 構成
  • リソース
  • ロール
  • SQL 特権
  • SSL 構成
  • サービス
  • ユーザー

これらのすべてのクラスは Exists、Export、および Import メソッドを提供しているため、環境間で移動することが可能です。

いくつかの欠点:

  • ユーザーと SSL 構成にはパスワードなどの機密情報が含まれる場合があります。 セキュリティ上の理由により、通常はこれらをソース管理に保存することは推奨されません。 1 回限りの転送を行うには Export/Import メソッドを使用します。
  • Export/Import メソッドはデフォルトですべてを 1 つのファイルに出力するため、ソース管理には不便である場合があります。 ルックアップテーブル、カスタムスキーマ、ビジネスパートナー、タスク、認証情報、および SSL 構成のエクスポートとインポートを行えるユーティリティクラスがあります。 これはファイル当たり 1 つの項目をエクスポートするため、LUT を含むディレクトリ、カスタムスキーマのディレクトリ、などを得ることができます。 SSL 構成の場合は、証明書やキーといったファイルもエクスポートします。

また、Export/Import の代わりに %Installer または Merge CPF を使用してこれらのほとんどを作成できることも覚えておくとよいでしょう。 いずれのツールもネームスペースとデータベースの作成をサポートしています。 Merge CPF はグローバルバッファーサイズなどのシステム設定を調整できます。

タスク

%SYS.Task クラスはタスクを保管し ExportTasks および ImportTasks メソッドを提供します。 また、タスクを 1 つずつインポート/エクスポートするには、上記のユーティリティクラスも確認してください。 タスクをインポートする際に StartDate またはその他のスケジュール関連のプロパティが過去の日時である場合、インポートエラー(ERROR #7432: Start Date and Time must be after the current date and time)が発生する可能性があることに注意しましょう。 ソリューションとして、LastSchedule0 に設定すると、InterSystems IRIS は新たにインポートしたタスクを最も近い未来に実行するようにスケジュールを設定し直します。

相互運用性

相互運用性本番には以下が含まれます。

  • ビジネスパートナー
  • システムのデフォルト設定
  • 認証情報
  • ルックアップテーブル

最初の 2 つは Ens.Config パッケージにあり、%Export%Import メソッドを使用できます。 認証情報とルックアップテーブルは上記のユーティリティクラスを使ってエクスポートします。 最近のバージョンでは、ルックアップテーブルは $system.OBJ クラスでエクスポート/インポートできます。

設定

システムデフォルト設定 - 環境固有の設定のデフォルトの相互運用性メカニズムです。

システムデフォルト設定の目的は、本番定義を環境間でコピーするプロセスを単純化することにあります。 いずれのプロダクションにおいても、いくつかの設定の値はプロダクションの設計の一部として決定されます。そのためこれらの設定は通常すべての環境で同一です。 一方でその他の設定は、環境に合わせて調整する必要があり、これらの設定にはファイルパス、ポート番号などが含まれます。

システムデフォルト設定は、InterSystems IRIS がインストールされている環境に固有の値のみを指定する必要があります。 それに反し、プロダクションの定義では、すべての環境で同一となる設定の値を指定する必要があります。

これらを本番環境で使用することを非常にお勧めします。 システムデフォルト設定を転送するには、%Export%Import を使用してください。

アプリケーション設定

アプリケーションもおそらく設定を使用します。 その場合、システムデフォルト設定を使用することをお勧めします。 これは相互運用性メカニズムではありますが、設定は %GetSetting(pProductionName, pItemName, pHostClassName, pTargetType, pSettingName, Output pValue)ドキュメント)からアクセスできます。 必要でないデフォルト設定を設定するラッパーを書くことができます。例:

ClassMethod GetSetting(name, Output value) As %Boolean [Codemode=expression]
{
##class(Ens.Config.DefaultSettings).%GetSetting("myAppName", "default", "default", , name, .value)
}

ほかにもカテゴリが必要な場合は、pItemNamepHostClassName 引数を公開することもできます。 設定は主に、インポート、システム管理ポータルの使用、Ens.Config.DefaultSettings クラスのオブジェクトの作成、または ^Ens.Config.DefaultSettingsD グローバルの設定によって設定できます。

ここでの主なアドバイスは、設定を 1 か所にまとめておき(システムデフォルト設定またはカスタムソリューションのどちらでもかまいません)、アプリケーションは指定された API のみを使用して設定を取得するようにすることです。 この場合、アプリケーション自体は環境について認識せず、残っているのは環境固有の値を含む集中設定ストレージを提供することだけです。 これを行うには、リポジトリに環境ブランチ名と同じファイル名で設定ファイルを含む設定フォルダを作成します。 次に、CI/CD フェーズにおいて、$CI_COMMIT_BRANCH環境変数を使って正しいファイルを読み込みます。

DEV.xml
TEST.xml
PROD.xml

環境ごとに複数のファイルがある場合は、環境ブランチに因んだフォルダ名を使用してください。 InterSystems IRIS 内部から環境変数値を取得するには、$System.Util.GetEnviron("name")使用します

データ

一部のデータ(参照テーブル、カタログなど)を使用できるようにするには、いくつかの方法があります。

  • グローバルエクスポート。 バイナリ GOF export または新しい XML エクスポートをのいずれかを使用します。 GOF エクスポートの場合は、ソースとターゲットシステムのロケールが一致する(または少なくともグローバルこれ―ションがターゲットシステムで使用できる)必要があることに注意しましょう。 XML エクスポート にはさらに多くの空き容量が必要です。 グローバルを xml.gz ファイルにエクスポートし、$system.OBJ メソッドが必要に応じて xml.gz ファイルを自動的にアーカイブ(アーカイブ解除)するようにすることで改善できます。 このアプローチの主なデメリットは、XML であってもほとんどが base64 でエンコードされるため、データを人間が読み取れないことです。
  • CSV。 CSV をエクスポートして、LOAD DATA でインポートします。 CSV は最もストレージ効率が高く人間が読み取れる形式であるため、私の一番の優先オプションです。何にでもインポートできます。
  • JSON。 クラスを JSON 対応にします。
  • XML。 オブジェクトを XML に投影するためにクラスを XML 対応にします。 データに複合構造が含まれる場合に使用します。

どの形式を使用するかは、ユースケースによって異なります。 ここでは、ストレージ効率の順に形式をリストしていますが、データ量があまり多くない場合には考慮する点ではありません。

まとめ

状態は、CI/CD デプロイパイプラインをさらに複雑にしますが、InterSystems IRIS ではそれを管理するためのツールを豊富に提供しています。

リンク

0
0 81
記事 Yuji Ohata · 9月 8, 2023 6m read

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

技術文書ライティングコンテストという事で、私からはAWS環境を用いたCI/CDの仕組みについてご紹介します。

CI/CDとは「Continuous Integration(継続的インテグレーション)/ Continuous Delivery(継続的デリバリー)」の略称で、
詳細はネットをググると色々出てくると思いますが、私としてはリポジトリに格納されたものを自動で品質保証して、
問題なければ自動でデプロイしてくれる一連の仕組み
だと理解しています。

という事で、その第一歩はIRISのソースコードをgitで管理することです。
pythonで作成したテストプログラムを用意しました。

0
0 507
お知らせ Mihoko Iijima · 5月 15, 2022

開発者のみなさん、こんにちは!

2022年3月9日開催「InterSystems Japan Virtual Summit 2022」のセッション「VSCode、Jenkinsを使用した CICD 環境の構築」のアーカイブを YouTube に公開いたしました。

(プレイリストはこちら


IRIS アプリケーションの開発では、どのような開発環境、テスト環境を構築されてますでしょうか?

このセッションでは VSCode で開発した複数の Windows サーバで通信を行うプログラムを例に Jenkins の環境構築とインストールキットの作成やテストを自動化する方法について説明します。

また、IRIS の %UnitTest クラスを Jenkins で判別させるツールや、バッチコマンドから IRIS の処理を実行するツールを紹介します。

ぜひ動画をご参照ください。

<iframe width="521" height="293" src="https://www.youtube.com/embed/b4eoKDR0swA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

【目次】

01:06 CICD とは

01:31 デモでご紹介する開発環境のシステム構成

 ↓プログラムのリポジトリ↓
 https://github.com/miniclub/IRISUtilsTest.git

03:18 VSCode、Jenkins のインストール(デモ)

 ご参考:VSCodeを使ってみよう

12:08 InterSystems ObjectScript Package Managerのインストールのデモ

 https://openexchange.intersystems.com/package/ObjectScript-Package-Manager

 ↓loader-v2.0.0.zip↓
 https://github.com/miniclub/loader/releases/tag/v2.0.0

14:39 Jenkins ジョブの作成、pipeline記述方法とデモ

 ↓プログラムのリポジトリ↓
 https://github.com/miniclub/IRISUtilsTest.git

26:43 まとめ

0
0 314
記事 Toshihiko Minamoto · 2月 14, 2022 19m read

キーワード: IRIS、IntegratedML、Flask、FastAPI、Tensorflow Serving、HAProxy、Docker、Covid-19

目的:

過去数か月に渡り、潜在的なICU入室を予測するための単純なCovid-19 X線画像分類器やCovid-19ラボ結果分類器など、ディープラーニングと機械学習の簡単なデモをいくつか見てきました。  また、ICU分類器のIntegratedMLデモ実装についても見てきました。  「データサイエンス」の旅路はまだ続いていますが、「データエンジニアリング」の観点から、AIサービスデプロイメントを試す時期が来たかもしれません。これまでに見てきたことすべてを、一式のサービスAPIにまとめることはできるでしょうか。  このようなサービススタックを最も単純なアプローチで達成するには、どういった一般的なツール、コンポーネント、およびインフラストラクチャを活用できるでしょうか。

対象範囲

対象:

ジャンプスタートとして、docker-composeを使用して、次のDocker化されたコンポーネントをAWS Ubuntuサーバーにデプロイできます。

  • **HAProxy ** - ロードバランサー
  • Gunicorn と **Univorn ** - Webゲートウェイ****サーバー
  • FlaskFastAPI - WebアプリケーションUI、サービスAPI定義、およびヒートマップ生成などのアプリケーションサーバー
  • Tensorflow Model ServingTensorflow-GPU Model Serving - 画像や分類などのアプリケーションバックエンドサーバー
  • IRIS IntegratedML - SQL インターフェースを備えたアプリとデータベースを統合した AutoML
  • ベンチマーキング用クライアントをエミュレートする、JupyterノートブックのPython3
  •  Dockerとdocker-compose
  • Testla T4 GPU搭載のAWS Ubuntu 16.04 

注意: GPUを使用したTensorflow Servingはデモのみを目的としています。GPU関連の画像(dockerfile)と構成(docker-compose.yml)は、単純にオフにできます。

対象外またはウィッシュリスト:

  • Nginx またはApacheなどのWebサーバーは、今のところこのデモでは省略されています。
  • RabbitMQとRedis  - IRISまたはEnsembleと置き換えられる、信頼性の高いメッセージングキューブローカー。   
  • IAMIntersystems API Manger)またはKongはウィッシュリストに含まれます。
  • **SAM **(InterSystemsのシステムアラートと監視) 
  • Kubernetes Operator付きのICMInterSystems Cloud Manager)- 誕生したときからずっとお気に入りの1つです。
  • FHIR(IntesyStems IRISベースのFHIR R4サーバーとFHIRアプリのSMART用FHIRサンドボックス)
  • CI/CD開発ツールまたはGithub Actions

「機械学習エンジニア」は、サービスのライフサイクルに沿って本番環境をプロビジョニングする際に、必然的にこれらのすべてのコンポーネントを操作しなければならないでしょう。 今後徐々に、焦点を当てていきたいと思います。

GitHubリポジトリ

全ソースコードの場所: https://github.com/zhongli1990/covid-ai-demo-deployment

また、新しいリポジトリとともに、integratedML-demo-templateリポジトリも再利用します。
 

デプロイメントのパターン

以下に、この「DockerでのAIデモ」テストフレームワークの論理的なデプロイパターンを示します。

デモの目的により、意図的にディープラーニング分類とWebレンダリング用に個別のスタックを2つ作成し、HAProxyをソフトロードバランサーとして使用して、受信するAPIリクエストをこれらの2つのスタックでステートレスに分散できるようにしました。

  • Guniorn + Flask + Tensorflow Serving
  • Univcorn + FaskAPI + Tensorflow Serving GPU

前の記事のICU入室予測と同様に、機械学習デモのサンプルには、IntegratedMLを使用したIRISを使用します。

現在のデモでは、本番サービスでは必要または検討される共通コンポーネントをいくつか省略しました。

  • Webサーバー: NginxまたはApacheなど。 HAProxyとGunicorn/Uvicornの間で、適切なHTTPセッション処理を行うために必要となります(DoS攻撃を防止するなど)。
  • キューマネージャーとDB: RabbitMQやRedisなど。Flask/FastAPIとバックエンドサービングの間で、信頼性のある非同期サービングとデータ/構成の永続性などに使用されます。  
  • APIゲートウェイ: IAMまたはKongクラスター。単一障害点を作らないように、HAProxyロードバランサーとAPI管理用Webサーバーの間に使用されます。
  • 監視とアラート: SAMが適切でしょう。
  • CI/CD開発のプロビジョニング: クラウドニューラルデプロイメントと管理、およびその他の一般的な開発ツールによるCI/CDにはK8を使用したICMが必要です。

実際のところ、IRIS自体は、信頼性の高いメッセージングのためのエンタープライズ級のキューマネージャーとしても、高性能データベースとしても確実に使用することができます。 パターン分析では、IRISがRabbitMQ/Redis/MongoDBなどのキューブローカーとデータベースの代わりになることは明らかであるため、レイテンシが大幅に低く、より優れたスループットパフォーマンスとさらに統合する方が良いでしょう。  さらに、IRIS Webゲートウェイ(旧CSPゲートウェイ)は、GunicornやUvicornなどの代わりに配置できますよね?  

環境トポロジー

上記の論理パターンを全Dockerコンポーネントに実装するには、いくつかの一般的なオプションがあります。 頭に思い浮かぶものとしては以下のものがあります。  

  • docker-compose
  • docker swarmなど
  • Kubernetesなど 
  • K8演算を使用したICM

このデモは、機能的なPoCといくつかのベンチマーキングを行うために、「docker-compose」から始めます。 もちろん、いつかはK8やICMを使いたいとも考えています。 

docker-compose.ymlファイルに説明されているように、AWS Ubuntuサーバーでの環境トポロジーの物理的な実装は、以下のようになります。  

上図は、全Dockerインスタンスのサービスポートが、デモの目的でどのようにマッピングされており、Ubuntuサーバーで直接公開されているかを示したものです。 本番環境では、すべてセキュリティ強化される必要があります。 また、純粋なデモの目的により、すべてのコンテナは同じDockerネットワークに接続されています。本番環境では、外部ルーティング可能と内部ルーティング不可能として分離されます。

Docker化コンポーネント 

以下は、docker-compose.ymlファイルに示されるとおり、ホストマシン内でこれらのストレージボリュームが各コンテナインスタンスにどのようにマウントされているかを示します。 

ubuntu@ip-172-31-35-104:/zhong/flask-xray$ tree ./ -L 2

./├── covid19                             (Flask+GunicornコンテナとTensorflow Servingコンテナがここにマウントされます)├── app.py                                (Flaskメインアプリ:  WebアプリケーションとAPIサービスインターフェースの両方がここに定義されて実装されます)├── covid19_models               (CPU使用の画像分類Tensorflow Servingコンテナ用のTensorflowモデルはここに公開されてバージョン管理されます)├── Dockerfile                          (Flask サーバーとGunicorn:      CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:5000", "--workers", "4", "--threads", "2"]├── models                               (.h5形式のFlaskアプリ用モデルとX線画像へのGrad-CAMによるヒートマップ生成のAPIデモ)├── __pycache__├── README.md├── requirements.txt             (全Flask+Gunicornアプリに必要なPythonパッケージ) ├── scripts├── static                                  (Web静的ファイル)├── templates                         (Webレンダリングテンプレート)├── tensorflow_serving        (TensorFlow Servingサービスの構成ファイル)└── test_images├── covid-fastapi                   (FastAPI+UvicornコンテナとGPU使用のTensorflow Servingコンテナはここにマウントされます)├── covid19_models            (画像分類用のTensorflow Serving GPUモデルは、ここに公開されてバージョン管理されます)├── Dockerfile                       (Uvicorn+FastAPIサーバーはここから起動されます: CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4" ]├── main.py                           (FastAPIアプリ: WebアプリケーションとAPIサービスインターフェースの両方がここに定義されて実装されます)├── models                            (.h5形式のFastAPIアプリ用モデルとX線画像へのGrad-CAMによるヒートマップ生成のAPIデモ)├── __pycache__├── README.md├── requirements.txt├── scripts├── static├── templates├── tensorflow_serving└── test_images├── docker-compose.yml      (フルスタックDocker定義ファイル。  Docker GPU「nvidia runtime」用にバージョン2.3を使用。そうでない場合はバージョン3.xを使用可)├── haproxy                             (HAProxy dockerサービスはここに定義されます。  注意: バックエンドLBにはスティッキーセッションを定義できます。 )                             ├── Dockerfile└── haproxy.cfg└── notebooks                       (TensorFlow 2.2とTensorBoardなどを含むJupyterノートブックコンテナサービス)├── Dockerfile├── notebooks                  (機能テスト用に外部APIクライアントアプリをエミュレートするサンプルノートブックファイルとロードバランサーに対してPythonによるAPIベンチマークテストを行うサンプルノートブックファイル)└── requirements.txt

注意: 上記のdocker-compose.ymlはCovid-19 X線画像のディープラーニングデモ用です。  別のintegratedML-demo-templatedocker-compose.ymlとともに、環境トポロジーに表示されるフルサービススタックを形成するために使用されています。  

サービスの起動 

すべてのコンテナサービスを起動するには、単純なdocker-compose up -dを使用します。

ubuntu@ip-172-31-35-104:~$ docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                PORTS                                                                              NAMES
31b682b6961d        iris-aa-server:2020.3AA               "/iris-main"             7 weeks ago         Up 2 days (healthy)   2188/tcp, 53773/tcp, 54773/tcp, 0.0.0.0:8091->51773/tcp, 0.0.0.0:8092->52773/tcp   iml-template-master_irisimlsvr_1
6a0f22ad3ffc        haproxy:0.0.1                         "/docker-entrypoint.…"   8 weeks ago         Up 2 days             0.0.0.0:8088->8088/tcp                                                             flask-xray_lb_1
71b5163d8960        ai-service-fastapi:0.2.0              "uvicorn main:app --…"   8 weeks ago         Up 2 days             0.0.0.0:8056->8000/tcp                                                             flask-xray_fastapi_1
400e1d6c0f69        tensorflow/serving:latest-gpu         "/usr/bin/tf_serving…"   8 weeks ago         Up 2 days             0.0.0.0:8520->8500/tcp, 0.0.0.0:8521->8501/tcp                                     flask-xray_tf2svg2_1
eaac88e9b1a7        ai-service-flask:0.1.0                "gunicorn app:app --…"   8 weeks ago         Up 2 days             0.0.0.0:8051->5000/tcp                                                             flask-xray_flask_1
e07ccd30a32b        tensorflow/serving                    "/usr/bin/tf_serving…"   8 weeks ago         Up 2 days             0.0.0.0:8510->8500/tcp, 0.0.0.0:8511->8501/tcp                                     flask-xray_tf2svg1_1
390dc13023f2        tf2-jupyter:0.1.0                     "/bin/sh -c '/bin/ba…"   8 weeks ago         Up 2 days             0.0.0.0:8506->6006/tcp, 0.0.0.0:8586->8888/tcp                                     flask-xray_tf2jpt_1
88e8709404ac        tf2-jupyter-jdbc:1.0.0-iml-template   "/bin/sh -c '/bin/ba…"   2 months ago        Up 2 days             0.0.0.0:6026->6006/tcp, 0.0.0.0:8896->8888/tcp                                     iml-template-master_tf2jupyter_1

docker-compose up --scale fastapi=2 --scale flask=2 -d   for example will horizontally scale up to 2x Gunicorn+Flask containers and 2x Univcorn+FastAPI containers:

ubuntu@ip-172-31-35-104:/zhong/flask-xray$ docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                PORTS                                                                              NAMES
dbee3c20ea95        ai-service-fastapi:0.2.0              "uvicorn main:app --…"   4 minutes ago       Up 4 minutes          0.0.0.0:8057->8000/tcp                                                             flask-xray_fastapi_2
95bcd8535aa6        ai-service-flask:0.1.0                "gunicorn app:app --…"   4 minutes ago       Up 4 minutes          0.0.0.0:8052->5000/tcp                                                             flask-xray_flask_2

... ...

「integrtedML-demo-template」の作業ディレクトリで別の「docker-compose up -d」を実行することで、上記リストのirisimlsvrとtf2jupyterコンテナが起動されています。

テスト

1. 単純なUIを備えたAIデモWebアプリ

上記のdockerサービスを起動したら、一時アドレスhttp://ec2-18-134-16-118.eu-west-2.compute.amazonaws.com:8056/のAWS EC2インスタンスにホストされているCovid-19に感染した胸部X線画像の検出用デモWebアプリにアクセスできます。

以下は、私の携帯でキャプチャした画面です。  デモUIは非常に単純です。基本的に「Choose File」をクリックして「Submit」ボタンを押せば、X線画像がアップロードされて分類レポートが表示されます。 Covid-19感染のX線画像として分類されたら、DLによって「検出された」病変領域をエミュレートするヒートマップが表示されます。そうでない場合は、分類レポートにはアップロードされたX線画像のみが表示されます。

        

このWebアプリはPythonサーバーページです。このロジックは主にFastAPI's main.pyファイルとFlask's app.pyファイルにコーディングされています。

もう少し時間に余裕がある際には、FlaskとFastAPIのコーディングと規則の違いを詳しく説明かもしれません。  実は、AIデモホスティングについて、FlaskとFastAPIとIRISの比較を行いたいと思っています。 

2. テストデモAPI      

FastAPI(ポート8056で公開)には、以下に示すSwagger APIドキュメントが組み込まれています。 これは非常に便利です。 以下のようにURLに「/docs」を指定するだけで、利用することができます。 

いくつかのプレースホルダー(/helloや/itemsなど)と実際のデモAPIインターフェース(/healthcheck、/predict、predict/heatmapなど)を組み込みました。

これらのAPIに簡単なテストを実行してみましょう私がこのAIデモサービス用に作成したJupyterノートブックサンプルの1つで、Python行を(APIクライアントアプリエミュレーターとして)いくつか実行します。  

以下では、例としてこちらのファイルを実行しています。 https://github.com/zhongli1990/covid-ai-demo-deployment/blob/master/notebooks/notebooks/Covid19-3class-Heatmap-Flask-FastAPI-TF-serving-all-in-one-HAProxy2.ipynb

まず、バックエンドのTF-Serving(ポート8511)とTF-Serving-GPU(ポート8521)が稼働していることをテストします。 

!curl http://172.17.0.1:8511/v1/models/covid19  # tensorflow serving
!curl http://172.17.0.1:8521/v1/models/covid19  # tensorflow-gpu serving
{
 "model_version_status": [
  {
   "version": "2",
   "state": "AVAILABLE",
   "status": {
    "error_code": "OK",
    "error_message": ""
   }
  }
 ]
}
{
 "model_version_status": [
  {
   "version": "2",
   "state": "AVAILABLE",
   "status": {
    "error_code": "OK",
    "error_message": ""
   }
  }
 ]
}

 

次に、以下のサービスAPIが稼働していることをテストします。

  • Gunicorn+Flask+TF-Serving
  • Unicorn+FastAPI+TF-Serving-GPU
  • 上記の両サービスの手間にあるHAProxyロードバランサー
  • r = requests.get('http://172.17.0.1:8051/covid19/api/v1/healthcheck')  # tf srving docker with cpu 
    print(r.status_code, r.text)
    r = requests.get('http://172.17.0.1:8056/covid19/api/v1/healthcheck')  # tf-serving docker with gpu
    print(r.status_code, r.text)
    r = requests.get('http://172.17.0.1:8088/covid19/api/v1/healthcheck')  # tf-serving docker with HAproxy
    print(r.status_code, r.text)

    そして、以下のような結果が期待されます。

    200 Covid19 detector API is live!
    200 "Covid19 detector API is live!\n\n"
    200 "Covid19 detector API is live!\n\n"

     

    入力X線画像の分類とヒートマップ結果を返す、/predict/heatmapなどの機能的なAPIインターフェースをテストします。  受信する画像は、API定義に従ってHTTP POST経由で送信される前にbased64にエンコードされています。

    %%time# リクエストライブラリをインポート
    import argparse
    import base64import requests# api-endpointを定義
    API_ENDPOINT = "http://172.17.0.1:8051/covid19/api/v1/predict/heatmap"image_path = './Covid_M/all/test/covid/nejmoa2001191_f3-PA.jpeg'
    #image_path = './Covid_M/all/test/normal/NORMAL2-IM-1400-0001.jpeg'
    #image_path = './Covid_M/all/test/pneumonia_bac/person1940_bacteria_4859.jpeg'
    b64_image = ""
    # JPGやPNGなどの画像をbase64形式にエンコード
    with open(image_path, "rb") as imageFile:
        b64_image = base64.b64encode(imageFile.read())# APIに送信されるデータ
    data = {'b64': b64_image}# POSTリクエストを送信しレスポンスをレスポンスオブジェクトとして保存
    r = requests.post(url=API_ENDPOINT, data=data)print(r.status_code, r.text)# レスポンスを抽出
    print("{}".format(r.text))

    このようなすべてのテスト画像もGitHubにアップロード済みです。  上記のコードの結果は以下のようになります。

    200 {"Input_Image":"http://localhost:8051/static/source/0198f0ae-85a0-470b-bc31-dc1918c15b9620200906-170443.png","Output_Heatmap":"http://localhost:8051/static/result/Covid19_98_0198f0ae-85a0-470b-bc31-dc1918c15b9620200906-170443.png.png","X-Ray_Classfication_Raw_Result":[[0.805902302,0.15601939,0.038078323]],"X-Ray_Classification_Covid19_Probability":0.98,"X-Ray_Classification_Result":"Covid-19 POSITIVE","model_name":"Customised Incpetion V3"}
    
    {"Input_Image":"http://localhost:8051/static/source/0198f0ae-85a0-470b-bc31-dc1918c15b9620200906-170443.png","Output_Heatmap":"http://localhost:8051/static/result/Covid19_98_0198f0ae-85a0-470b-bc31-dc1918c15b9620200906-170443.png.png","X-Ray_Classfication_Raw_Result":[[0.805902302,0.15601939,0.038078323]],"X-Ray_Classification_Covid19_Probability":0.98,"X-Ray_Classification_Result":"Covid-19 POSITIVE","model_name":"Customised Incpetion V3"}
    
    CPU times: user 16 ms, sys: 0 ns, total: 16 ms
    Wall time: 946 ms

     

    3. デモサービスAPIをベンチマークテストする

    HAProxyロードバランサーインスタンスをセットアップします。 また、Flaskサービスを4個のワーカーで開始し、FastAPIサービスも4個のワーカーで開始しました。

    ノートブックファイルで直接8個のPythonプロセスを作成し、8個の同時APIクライアントがデモサービスAPIにリクエストを送信する様子をエミュレートしてみてはどうでしょうか。 

    #from concurrent.futures import ThreadPoolExecutor as PoolExecutor
    from concurrent.futures import ProcessPoolExecutor as PoolExecutor
    import http.client
    import socket
    import timestart = time.time()#laodbalancer:
    API_ENDPOINT_LB = "http://172.17.0.1:8088/covid19/api/v1/predict/heatmap"
    API_ENDPOINT_FLASK = "http://172.17.0.1:8052/covid19/api/v1/predict/heatmap"
    API_ENDPOINT_FastAPI = "http://172.17.0.1:8057/covid19/api/v1/predict/heatmap"
    def get_it(url):
        try:
            # 画像をループ
            for imagePathTest in imagePathsTest:
                b64_image = ""
                with open(imagePathTest, "rb") as imageFile:
                    b64_image = base64.b64encode(imageFile.read())
        
                data = {'b64': b64_image}
                r = requests.post(url, data=data)
                #print(imagePathTest, r.status_code, r.text)
            return r
        except socket.timeout:
            # 実際のケースではおそらく
            # ソケットがタイムアウトする場合に何かを行うでしょう
            passurls = [API_ENDPOINT_LB, API_ENDPOINT_LB, 
            API_ENDPOINT_LB, API_ENDPOINT_LB, 
            API_ENDPOINT_LB, API_ENDPOINT_LB, 
            API_ENDPOINT_LB, API_ENDPOINT_LB]with PoolExecutor(max_workers=16) as executor:
        for _ in executor.map(get_it, urls):
            pass
        
    print("--- %s seconds ---" % (time.time() - start))

    したがって、8x27 = 216個のテスト画像を処理するのに74秒かかっています。 これは負荷分散されたデモスタックが、(分類とヒートマップの結果をクライアントに返すことで)1秒間に3個の画像を処理できています。

    --- 74.37691688537598 seconds ---

    PuttyセッションのTopコマンドから、上記のベンチマークスクリプトが実行開始されるとすぐに8個のサーバープロセス(4個のGunicornと4個のUvicorn/Python)がランプアップし始めたことがわかります。

    今後の内容

    この記事は、テストフレームワークとして「全DockerによるAIデモ」のデプロイメントスタックをまとめるための出発点に過ぎません。 次は、Covid-19 ICU入室予測インターフェースなどさらに多くのAPIデモインターフェースを理想としてはFHIR R4などによって追加し、サポートDICOM入力形式を追加したいと思います。 これは、IRISがホストするML機能とのより緊密な統合を検討するためのテストベンチになる可能性もあります。 医用画像、公衆衛生、またはパーソナル化された予測やNLPなど、さまざまなAIフロントを見ていく過程で、徐々に、より多くのMLまたはDL特殊モデルを傍受するためのテストフレームワーク(非常に単純なテストフレーム)として使用していけるでしょう。 ウィッシュリストは、前の投稿(「今後の内容」セクション)の最後にも掲載しています。 

    0
    0 550
    InterSystems公式 Yoichi Miyashita · 1月 31, 2022

    インターシステムズは、InterSystems IRIS data platform、InterSystems IRIS for Health、HealthShare Health Connect の バージョン 2021.2 をリリースしました。

    【新機能のご紹介】
    InterSystems IRIS data platform 2021.2 には、以下の新機能が含まれます。

    (1) アプリケーション および インターフェース開発者向け機能
    ・Embedded Python
    ・Python を利用した Interoperability プロダクション
    ・Visual Studio Code の ObjectScript 拡張機能
    ・必要最小限のコードで SQL 実行を可能にする、新しいビジネス・サービスおよび ビジネス・オペレーション

    (2) 分析 および AI 機能
    ・CSV や JDBC 経由のデータを効率よくロードする新しい SQL LOAD コマンド
    ・Adaptive Analytics の機能強化

    (3) クラウド および システム運用者向け機能
    ・InterSystems IRIS アプリケーションからクラウド・サービスへのより簡単な接続や利用を容易にする、新しいクラウド・コネクタ
    ・IKO による Kubernetes リソース管理機能の向上

    0
    0 400
    InterSystems公式 Toshihiko Minamoto · 4月 24, 2021

    みなさん、こんにちは。
    今回はInterSystems Container Registryを発表できることをうれしく思います。 これはコンテナベースのリリースやプレビューにアクセスする新たな配布チャンネルです。すべてのコミュニティエディションのイメージはログイン不要の公開リポジトリにあります。すべてのリリースイメージ(IRIS, IRIS for Health, Health Connect, System Alerting and Monitoring, InterSystems Cloud Manager) やユーティリティイメージ(アービター、 Web Gateway、PasswordHash等) にはWRCアカウントの認証情報から生成されるログイントークンが必要です。

    0
    0 383
    InterSystems公式 Yoichi Miyashita · 4月 13, 2021

      インターシステムズは InterSystems IRIS および IRIS for Health バージョン2020.4 をリリースしました。本バージョンは、継続的デリバリ(CD) リリースのため、Docker コンテナ として知られる OCI (Open Container Initiative)形式 (for Linux x86-64 および Linux ARM64) のみ入手いただけます。

    コンテナイメージは OCI に準拠した Linux x86-64 および Linux ARM64 対応のランタイムエンジンで動作可能です。

    あわせて IRIS Studio 2020.4 もリリースしました。

    リリースのビルド番号は 2020.4.0.547.0 です。

    【新機能のご紹介】
    InterSystems IRIS Data Platform 2020.4 には、以下の新機能が含まれます。

    0
    0 326
    InterSystems公式 Toshihiko Minamoto · 10月 11, 2020

    InterSystems は、InterSystemsIRIS を新しいリリース方法を採用しようとしています(訳注:2020年現在、このリリース方法が採用されています)。このブログでは、新しいリリースモデルとお客様が予測しておくべきことを説明しています。  この内容は InterSystems IRIS ロードマップセッションの最後に行われた Global Summit で説明し、お客様から多くの肯定的なフィードバックを受け取ったものです。

    この新しいモデルでは、次の 2 つのリリースストリームを提供しています。

    1)EM と呼ばれる従来と同じ毎年恒例のリリース(拡張メンテナンス

    2)CD(継続的デリバリーを意味する)のタグが付けられ、コンテナ形式でのみ入手可能になる四半期ごとのリリース。

    変更の理由はスピードと予測性の向上

    この業界では変化のペースが加速していますが、このモデルを採用すれば最新機能を非常に迅速に公開し、市場での応答性と競争力を高めることができます。  当社は多くのお客様から次の 2 つを求められています。

  • 新機能をリクエストしてからそれを使用できるようになるまでの時間の短縮
  • アップデート計画を立てるための予測可能なスケジュール
  • この継続的デリバリーの原則に基づいた新しいリリースの流れは、多くの主要ソフトウェア会社やエンタープライズ対応のオープンソースプロジェクトの大部分で使用されている 2 ストリームモデルとほぼ同等のものです。 この方法の採用に成功した人々は、リリースの品質が向上し、リスクが低下し、応答時間が短縮されたことを明確に報告しています。 

    従来のリリース方針は変更なし

    従来と同じリリース(「EM」リリース)はこれまでと同じように行われます。   このリリースは継続的なメンテナンスリリースの対象となり、必要に応じてその場その場で提供され、すべてのプラットフォームでサポートされます。  従来通り、全製品のインストールキットは WRC Software Distribution ポータルを通じて入手できます。 フィールドテストはこれまでと同様にメジャーリリースで利用できます。  メンテナンスリリースは従来と同じ基本ルールが適用され、EMリリースで利用できます。

    以前と異なるのは、これらのリリースが毎年予測可能なタイミングで提供されるようになることです。 次の図に示すように、InterSystems IRIS のバージョン 2019.1 は 2019 年 3 月に、バージョン 2020.1 は 2020 年 3 月に予定されています。  

    新しい四半期リリースではコンテナのみが提供

    3 カ月ごとに新しい四半期リリースストリームを介して「CD」表記の新機能が提供されるようになります。 例えば次の図に示すように、InterSystems IRIS バージョン 2018.2 CD は 2018 年 11 月に、バージョン 2019.1 CD は 2019 年 2 月に、バージョン 2019.2 CD は 2019 年 5 月に予定されています。  

    CD リリースには次の制限があります。

  • Open Container Initiative(OCI)フォーマットを使用するコンテナイメージとしてのみ入手できます。 このフォーマットは、Docker / Amazon / Microsoft / Google / IBM などの多くの企業で広く使用され、サポートされています。
  • OCI 互換のインフラストラクチャのみで動作します。 Docker は最も一般的な OCI ランタイムであるため、InterSystems は Ubuntu Linux カーネルで構築された Docker コンテナの提供とサポートを行っています。 このコンテナは、すべての主要クラウドプラットフォーム(Amazon AWS / Microsoft Azure / Google GCP/ IBM Cloud)と事実上すべての種類の Linux、Windows Server 2016 / 2019 などのさまざまなプラットフォームで実行されます。 InterSystems は Docker-for-windows と Docker-for-mac をそれぞれ使用する開発専用の Windows 10 と Mac OS へのコンテナのデプロイをサポートしています。 (現時点で OCI コンテナをサポートしていない代表的なプラットフォームは AIX です。)
  • これらはコンテナであるため、インストールやイメージのアップグレードは不要です。 InterSystems が提供するコンテナイメージを使用し、それともとに独自のイメージを作成できます。 デプロイする場合は、単純にコンテナを入れ替えるだけです。データのアップグレードが必要な場合、InterSystems はリリースと共にアップグレードを提供します。
  • CD リリースに関して、InterSystems はメンテナンスリリース、セキュリティ修正、またはAdhoc(パッチ修正)を提供しません。変更を取得したい場合は、単純に次のリリースを取得してください。 最新の変更が加えられた新しいリリースが 3 カ月ごとに提供されるため、重要な修正を待つ必要はありません。
  • InterSystems は開発、テスト、および本番環境を対象に CD リリースを完全にサポートしています。 InterSystems は各 CD リリースに加えてプレビュープログラムも用意し、最終リリースの前にプレビューイメージを提供します。 プレビューイメージは、開発およびテストを目的とする場合はサポートされますが、本番環境ではサポートされていません。

    コンテナは比較的新しいものですが、現在は広く使用されており、多くのメリットがあります。 お客様は CD リリースを使用したり、コンテナを採用したりする必要はありません。ただし、コンテナ内で InterSystems IRIS を使用するのに役立つ多くの InterSystems のリソース(複数のオンライン動画を含む)が存在するほか、業界全体には大規模なコンテナ周辺のエコシステムがあります。

    CD リリースは新機能を迅速に提供するほか、従来の(EM)リリースの予測可能性と安定性の向上に役立ちます。今年最初の CD リリースには対応する EM リリースがあります(プラットフォーム固有の機能を除いては同じものです)。また、これらには以前の CD リリースのすべての機能に加えてさらに多くの機能が追加されています。開発者は CD リリースで作業でき、コードが従来のリリースでも機能することを確信できます。CD リリースを試さなかった場合でも、四半期ごとに InterSystems IRIS でリリースされた機能を追跡し、自信を持って計画を立てることができます。

    0
    1 391
    InterSystems公式 Yoichi Miyashita · 10月 9, 2020

    InterSystems IRIS データ・プラットフォーム および InterSystems IRIS for Health バージョン 2020.3 CD をリリースしました。
    こちらはCD(continuous delivery)リリースになりますので、OCI(Open Container Initiative)と呼ばれるDockerコンテナー形式でのみ使用可能です。

    リリースのビルド番号は 2020.3.0.221.0 です。

    InterSystems IRIS Data Platform 2020.3 により、サイロ化したデータとアプリケーションをつなぐ、リアルタイム機械学習に対応したアプリケーションの迅速な開発と展開を可能にします。このバージョンでは、以下の多くの新機能が含まれます。

    クラウド、オンプレミス双方での、開発および運用面の機能追加
    ・IKO - 新機能 InterSystems Kubernetes Operator (IKO) を使うことでKubernetesクラスタをより簡単に構成
    ・ICMにおける IAMデプロイのサポート
    ・非同期ミラーにおける シャードクラスタのサポート
    ・システム管理ポータルでの ワークキューの管理

    0
    0 193
    お知らせ Yoichi Miyashita · 7月 12, 2020

    InterSystems IRIS データ・プラットフォーム および InterSystems IRIS for Health バージョン 2020.2 CD をリリースしました。
    こちらはCD(continuous delivery)リリースになりますので、OCI(Open Container Initiative)と呼ばれるDockerコンテナー形式でのみ使用可能です。

    リリースのビルド番号は 2020.2.0.211.0 です。

    InterSystems IRIS データ・プラットフォームバージョン 2020.2 は、以下の拡張機能を備えた重要なセキュリティアップデートを提供します。

    ・TLS 1.3のサポート
    ・SHA-3のサポート

    InterSystems IRIS for Health バージョン 2020.2 にはさら以下の機能が含まれます。

    ・FHIR R4データ変換
    ・FHIRサーバーの新しい構成UI
    ・IHE RMUプロファイルのサポート
    ・IHEコネクタソンの更新

    0
    1 218
    記事 Mihoko Iijima · 7月 7, 2020 11m read

    私たちのほとんどは、多かれ少なかれDockerに慣れ親しんでいます。 Dockerを使用している人たちは、ほとんどのアプリケーションを簡単にデプロイし遊んで、何かを壊してしまってもDockerコンテナを再起動するだけでアプリケーションを復元できる点を気に入っています。  

    InterSystems も Docker を気に入っています。

    InterSystems OpenExchange プロジェクトには、InterSystems IRISのイメージを簡単にダウンロードして実行できるDockerコンテナで実行するサンプルが多数掲載されています。また、Visual Studio IRISプラグインなど、その他の便利なコンポーネントもあります 。

    特定のユースケース用の追加コードを使ってDockerでIRISを実行するのは簡単ですが、ソリューションを他のユーザーと共有する場合は、コマンドを実行し、コードを更新するたびに繰り返し実行するための何らかの方法が必要になります。 この記事では、継続的インテグレーション継続的デリバリー (CI / CD)を使ってそのプロセスを簡素化する方法を説明します。

    セットアップ

    0
    0 244
    記事 Mihoko Iijima · 7月 6, 2020 8m read

    ​​​​​​この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けていくつかの可能性のあるアプローチを紹介し、説明したいと思います。以下のようなトピックについて取り上げます。

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 
    • コンテナを使用する理由 
    • コンテナインフラストラクチャ 
    • コンテナを使用したCD 
    • ICMを使用したCD 
    • コンテナアーキテクチャ 

    この記事では、独自のコンテナを構築してデプロイ展開する方法について説明します。 

    Durable %SYS 

    コンテナは一時的なものなので、アプリケーションデータを保存するべきではありません。Durable %SYS の機能により設定、構成、 %SYSデータなどをホストボリュームに保存することができます。

    0
    0 240
    記事 Mihoko Iijima · 7月 6, 2020 12m read

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けていくつかの可能性のあるアプローチをを紹介し、議論したいと思います。 今回は以下のようなトピックを取り上げます。 

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 
    • コンテナを使用する理由 
    • コンテナインフラストラクチャ 
    • コンテナを使用したCD 
    • ICMを使用したCD 

    この記事では、InterSystems Cloud Managerを使用して継続的デリバリーを構築ドします。 ICMは、InterSystems IRISをベースとしたアプリケーション用のクラウドプロビジョニングおよびデプロイメントソリューションです。これにより、 必要なデプロイ構成を定義することができ、ICMが自動的にプロビジョニングします。 詳細については、First Look: ICM をご覧ください。

     ワークフロー

    継続的デリバリーの構成では、次のようになります。

    0
    0 521
    記事 Mihoko Iijima · 7月 6, 2020 11m read

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 
    • コンテナを使用する理由 
    • コンテナインフラストラクチャ 
    • コンテナを使用したCD 

    第1回の記事では、Gitの基本、Gitの概念を高度に理解することが現代のソフトウェア開発にとって重要である理由、Gitを使用してソフトウェアを開発する方法について説明しています。

    第2回の記事では、ソフトウェアのライフサイクルの完全なプロセスであるGitLabワークフローについて説明しています。

    第3回の記事では、GitLabのインストールと構成ならびに利用環境のGitLabへの接続について説明しています。

    第4回の記事では、CDの構成を説明しています。

    第5回の記事では、コンテナとその使用方法(および使用する理由)について説明しています。

    第6回の記事では、コンテナを使用して継続的デリバリーのパイプラインを実行する必要がある主なコンポーネントと、それらすべての連携の仕組みについて説明しています。  

    0
    0 732
    記事 Hiroshi Sato · 6月 30, 2020 17m read

    1. 初めに

    IRISでは、複数ノードでクラスターを構成し、ワークロードのスケールアウト、データボリュームのスケールアウトやトランザクション処理と分析処理を異なるノードで処理するマルチワークロードを実現しています。
    しかし、クラスターを構成するための設定は、ノード数が増えるにつれ煩雑になり、それらを人手の作業に全て委ねると設定ミス等を招きやすいといえます。
    また、クラスタの構成を処理負荷の増加に基づいて拡張する、または逆に縮小する、あるいは、データ冗長性を追加するためにミラーリングの構成を追加するなど構成変更は、想定するより多いかもしれません。
    しかもクラスタ毎に同様の設定を毎回行うとなると、人手による作業では、煩雑性だけでなく俊敏性に欠けると言わざるを得ません。

    そこで、IRISには、クラスター構成作業を自動化する新しいツールICM(InterSystems Cloud Manager)が用意されました。

    ここでは、ICMを使用したクラウド上でのIRIS構成の自動化の手順について説明します。

    2. 事前に準備するもの

    以下の作業を行うためには、InterSystemsが用意している2つのDocker Imageを事前に取得する必要があります。

    • ICMイメージ
    • IRISイメージ
    0
    0 331
    記事 Mihoko Iijima · 4月 28, 2020 9m read

    誰もがテスト環境を持っています。  
    本番環境とは完全に独立した実行環境を持てるほど幸運な人もいます。  
    -- 作者不明 

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。 

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • GitLab CI/CD 
    • CI/CDとコンテナ 

    この最初のパートでは、最新のソフトウェア開発の基礎であるGitバージョン管理システムとさまざまなGitフローを扱います。 

    Git 101  

    これから説明する主なトピックでは、後の概念をより良く理解できるようにするため、ソフトウェア開発全般とGitlabがその取り込みにどのように役立っているのか、Git、あるいはもっと厳密に言えば重要なGit設計の基礎となる複数の高度な概念を取り上げます。 

    そして、Gitは以下のようなアイデア(他にもたくさんありますが、これらが最も重要なアイデアです)に基づいたバージョン管理システムです。 

    0
    1 493
    記事 Mihoko Iijima · 4月 28, 2020 8m read

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。 

    • Git 101 
    • Git Flow(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 
    • コンテナを使用する理由 
    • コンテナインフラストラクチャ 
    • コンテナを使用するGitLab CI/CD 

    第1回の記事では、Gitの基本、Gitの概念を高度に理解することが現代のソフトウェア開発にとって重要である理由、Gitを使用してソフトウェアを開発する方法について説明しています。

    第2回の記事では、アイデアからユーザーフィードバックまでの完全なソフトウェアライフサイクルプロセスであるGitLabワークフローについて説明しています。

    第3回の記事では、GitLabのインストールと構成ならびに利用環境のGitLabへの接続について説明しています。

    第4回の記事では、CDの構成を作成しています。

    第5回の記事では、コンテナとその使用方法(および使用する理由)について説明しています。

    0
    0 809
    記事 Mihoko Iijima · 4月 28, 2020 13m read

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。 

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 

    第1回の記事では、Gitの基本、Gitの概念を高度に理解することが現代のソフトウェア開発にとって重要である理由、Gitを使用してソフトウェアを開発する方法について説明しました。 

    第2回の記事では、アイデアからユーザーフィードバックまでの完全なソフトウェアライフサイクルプロセスであるGitLabワークフローについて説明しました。 

    第3回の記事では、GitLabのインストールと構成ならびに利用環境のGitLabへの接続について説明しました。 

    この記事では、最終的にCDの構成を作成します。 

    計画 

    環境 

    まず、いくつかの環境とそれに対応するブランチが必要です。

    0
    0 311
    記事 Mihoko Iijima · 4月 28, 2020 6m read

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。 

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 

    第1回の記事では、Gitの基本、Gitの概念を高度に理解することが現代のソフトウェア開発にとって重要である理由、Gitを使用してソフトウェアを開発する方法について説明しています。

    第2回の記事では、アイデアからユーザーフィードバックまでの完全なソフトウェアライフサイクルプロセスであるGitLabワークフローについて説明しています。 

    この記事では以下について説明します。 

    • GitLabのインストールと構成 
    • 利用環境のGitLabへの接続 

    GitLabのインストール 

    GitLabをオンプレミス環境にインストールします。 GitLabのインストール方法は多彩で、ソースやパッケージからインストールしたり、コンテナーにインストールしたりできます。 ここではすべての手順を実際に説明するつもりはありませんが、そのためのガイドを紹介します。 ただし、それでもいくつか注意すべき点があります。 

    前提条件: 

    0
    0 265
    記事 Mihoko Iijima · 4月 28, 2020 7m read

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。 

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 
    • コンテナを使用する理由 
    • コンテナを使用するGitLab CI/CD 

    第1回の記事では、Gitの基本、Gitの概念を高度に理解することが現代のソフトウェア開発にとって重要である理由、Gitを使用してソフトウェアを開発する方法について説明していますました。 

    第2回の記事では、アイデアからユーザーフィードバックまでの完全なソフトウェアライフサイクルプロセスであるGitLabワークフローについて説明しています。 

    第3回の記事では、GitLabのインストールと構成ならびに利用環境のGitLabへの接続について説明しています。 

    第4回の記事では、CDの構成を作成しています。 

    この記事では、コンテナとその使用方法(および使用する理由)について説明します。 

    0
    0 228
    記事 Mihoko Iijima · 4月 27, 2020 11m read

    この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。 

    • Git 101 
    • Gitフロー(開発プロセス) 
    • GitLabのインストール 
    • GitLabワークフロー 
    • 継続的デリバリー 
    • GitLabのインストールと構成 
    • GitLab CI/CD 

    前の記事では、Gitの基本、Gitの概念を高度に理解することが現代のソフトウェア開発にとって重要である理由、Gitを使用してソフトウェアを開発する方法について説明しました。 なお、前の記事ではソフトウェア開発の実装部分を中心に取り扱っていましたが、このパートでは以下を取り扱います。 

    • GitLabワークフロー - アイデアからユーザーフィードバックまでの完全なソフトウェアライフサイクルプロセス。 
    • 継続的デリバリー - チームが短いサイクルでソフトウェアを作成し、ソフトウェアをいつでも確実にリリースできるようにするソフトウェアエンジニアリング手法です。 この手法はソフトウェアの構築、テスト、リリースをより速く、より頻繁に行うことを目指しています。 

    GitLabワークフロー 

    GitLabワークフローは、ソフトウェア開発プロセスのライフサイクル全体で実行可能な操作を論理的に並べたものです。 

    0
    0 475