2021年07月

06

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編-

こんにちは。
てくさぽBLOGメンバーの岡田です。

IBM WebSphere Hybrid Edition(以下 WSHE)の導入をAzure上で検証してみた3回シリーズの2回目になります。

本記事では前回実施したAzure上にインストールしたOpenShift4.5環境に、WebSphere Liberty Coreをインストールしていきます。

WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編-
WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編- *本編
WebSphere Hybrid Editionを導入してみた Vol.3 -ツール編-

1.WSHEというソフトウェアが無い?

そもそもWSHEとはどのようなソフトウェアなのでしょうか。
分かりづらいですが、WSHEライセンスを購入してもWSHEというソフトウェアが利用できるわけではありません。WSHEライセンスは以下のWebSphere ApplicationServer関連の主要な製品をまとめたものです。

WebSphere Application Serverは,従来型のWebSphere traditionalおよび,コンテナ環境にも対応したWebSphere Libertyの二種類のランタイムがあります。今回は、WebSphere Libertyランタイムをインストールしてみます。
                                        

2.作業用サーバーを用意する

今回、Azure上に構築したRHEL8サーバーに以下を導入します。*個々のインストール手順は省略

  • ocコマンド
  • podmanコマンド
  • helmコマンド

3.WebSphere Libertyのインストール

ここからは、Azure上のRHEL8サーバーにログインして行います。

(1)統合OCPレジストリーへのアクセス権を付与する

・OCPにログインします。

oc login -u kubeadmin -p  <パスワード> https://api.nicpwhecluster.xxx.com:6443

・oc get nodesでノードのホスト名を確認します。

$ oc get node
NAME STATUS ROLES AGE VERSION
nicpwhecluster-h8lq5-master-0 Ready master 4d23h v1.18.3+e574db2
nicpwhecluster-h8lq5-master-1 Ready master 4d23h v1.18.3+e574db2
nicpwhecluster-h8lq5-master-2 Ready master 4d23h v1.18.3+e574db2
nicpwhecluster-h8lq5-worker-japaneast-1 Ready worker 4d23h v1.18.3+e574db2
nicpwhecluster-h8lq5-worker-japaneast-2 Ready worker 4d23h v1.18.3+e574db2
nicpwhecluster-h8lq5-worker-japaneast-3 Ready worker 4d23h v1.18.3+e574db2

・今回はマスターノードの1つ「nicpwhecluster-h8lq5-master-0」で実行します。クラスタから内部経路を使ってレジストリにアクセスします。

$ oc debug nodes/nicpwhecluster-h8lq5-master-0
Starting pod/nicpwhecluster-h8lq5-master-0-debug …
To use host binaries, run `chroot /host`
Pod IP: 10.0.0.7
If you don’t see a command prompt, try pressing enter.
sh-4.2#

・ノード上でocやpodmanなどのツールにアクセスできるように次のコマンドを実行します。

sh-4.2# chroot /host
sh-4.4#

・アクセストークンを使用して、コンテナイメージ・レジストリにログインします。

sh-4.4# oc login -u kubeadmin -p <パスワード> https://api.nicpwhecluster.xxx.com:6443
The server uses a certificate signed by an unknown authority.
You can bypass the certificate check, but any data you send to the server could be intercepted by others.
Use insecure connections? (y/n): yLogin successful.You have access to 58 projects, the list has been suppressed. You can list all projects with ‘oc projects’Using project “default”.Welcome! See ‘oc help’ to get started.
sh-4.4#
sh-4.4# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000
WARNING! Using –password via the cli is insecure. Please consider using –password-stdin
Login Succeeded!
sh-4.4#

・動作確認します。レジストリdocker.ioからイメージをローカルに持ってきます。

sh-4.4# podman pull docker.io/hello-world
Trying to pull docker.io/hello-world…
Getting image source signatures
Copying blob 0e03bdcc26d7 done
Copying config bf756fb1ae done
Writing manifest to image destination
Storing signatures
bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
sh-4.4#

・取得できたか確認します。

sh-4.4# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> e62c0ee30db5 3 weeks ago 505 MB
quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> b920241dcb5e 3 weeks ago 331 MB
quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 14b9f9be4696 3 weeks ago 312 MB
(途中省略)
quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 088760d6a49a 3 weeks ago 912 MB
docker.io/library/hello-world latest bf756fb1ae65 13 months ago 20 kB
sh-4.4#

・レジストリに対してpodman pushを実行します。

sh-4.4# podman tag docker.io/hello-world image-registry.openshift-image-registry.svc:5000/openshift/hello-world
sh-4.4# podman push image-registry.openshift-image-registry.svc:5000/openshift/hello-world
Getting image source signatures
Copying blob 9c27e219663c done
Copying config bf756fb1ae done
Writing manifest to image destination
Storing signatures
sh-4.4#
(2)統合OCPレジストリーのエクスポーズ

・DefaultRoute を 「True」にします。

$ oc patch configs.imageregistry.operator.openshift.io/cluster –patch ‘{“spec”:{“defaultRoute”:true}}’ –type=merge
config.imageregistry.operator.openshift.io/cluster patched (no change)
$

・podmanでログインします。

$ HOST=$(oc get route default-route -n openshift-image-registry –template='{{ .spec.host }}’)
$ echo $HOST
default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com
$
$ oc whoami -t
M3Dbj0zF2oK68yG21jf7WTV37XeWR8EKRagF62QJOL0
$
$ podman login -u kubeadmin -p <パスワード> –tls-verify=false $HOST
Login Succeeded!
(3)SecurityContextConstraints (SCC) の定義

https://github.com/IBM/charts/tree/master/stable/ibm-websphere-liberty内の記載から以下の赤枠箇所の内容を含んだyamlファイルを作成します。今回はibm-websphere-liberty-scc.yamlという名前で作成しました。

・oc applyコマンドでibm-websphere-liberty-scc を定義します。

$ oc apply -f ./ibm-websphere-liberty-scc.yaml
securitycontextconstraints.security.openshift.io/ibm-websphere-liberty-scc created
(4)プロジェクトwlp-sample作成

Websphere Liberty用にプロジェクトを作成します。今回は、Webコンソールから「wlp-sample」という名前で作成します。

(5)コンテナ・イメージのビルド

・server.xmlの用意
https://github.com/WASdev/ci.docker/blob/master/ga/latest/full/server.xml内の、36行あるserver.xmlの内容をコピーし、ファイルserver.xmlを作成します。

・以下の内容のDockerファイルを作成します。

FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi
COPY –chown=1001:0? server.xml /config/
RUN installUtility install –acceptLicense defaultServer

・コンテナ・イメージをビルドします。

$ podman build -f ./Dockerfile -t mylibertyapp:1.0
STEP 1: FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi
Getting image source signatures
Copying blob 58e1deb9693d done
Copying blob 78afc5364ad2 done
Copying blob 3325260754e7 done
Copying blob 4427719dd2c9 done
Copying blob c059e0bc6ac9 done
Copying blob 0169ad963667 done
Copying blob 6195cb089ab9 done
Copying blob 9f87c21e1265 done
Copying blob 725fc7f0231d done
Copying blob 0331a4de6fdc done
Copying blob bdab1c39af4a done
Copying blob f5b53ae0ca41 done
Copying config ce3acc7fda done
Writing manifest to image destination
Storing signatures
STEP 2: COPY –chown=1001:0 server.xml /config/
fbd6f3d9cba9a7a72ac7a0dc3e3011b6400fdb2fd3e21fa34959dfe1925af803
STEP 3: COPY –chown=1001:0 SampleWebApp.war /config/dropins/
d64e1ce4931688a84d354446fbd4fa9f4744ef65cdcb187f830a2c9ea114dff8
STEP 4: RUN installUtility install –acceptLicense defaultServer
Checking for missing features required by the server …
The server does not require any additional features. No features were installed.Start product validation…
Product validation completed successfully.
STEP 5: COMMIT mylibertyapp:1.0
515b092feddf7a2ebb165bbdab187bbfd54bf3bf09b55651b990b7da5b76f767
$

・作成されたイメージを確認します。

$ podman images | grep myliberty
localhost/mylibertyapp     1.0      515b092feddf      28 seconds ago     738 MB
$
(6)Buildしたコンテナイメージを統合OCPレジストリーにpush

・まず統合OCPレジストリーへログインします。

$ podman login default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com -u kubeadmin -p 75tT5caixaa_Mm7K6HiVT6xvbyFWeoHf1Dp1soB-21Y –tls-verify=false
Login Succeeded!
$

・ビルドしたイメージに統合OCPレジストリーのホスト名とプロジェクトを示す名前を付与します。
実行したらpodman imagesコマンドで確認します。

$ podman tag mylibertyapp:1.0 default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0

$ podman images | grep myliberty
localhost/mylibertyapp 1.0 515b092feddf 5 minutes ago 738 MB
default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp 1.0 515b092feddf 5 minutes ago 738 MB
$

・統合OCPレジストリーへコンテナ・イメージを登録(push)します。

$ podman push default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0 –tls-verify=false
Getting image source signatures
Copying blob 995a5e8c59d9 done
Copying blob 9e4e9b467e1d done
Copying blob 18bd03b00625 done
Copying blob 33037ee11bc5 done
Copying blob 1d7ab3c032a8 done
Copying blob da31cc4e7dec done
Copying blob eeb6d8f926af done
Copying blob 1228a4ab5ec0 done
Copying blob 1235447b1b10 done
Copying blob 60d1e32eff28 done
Copying blob 6ab8cd79d784 done
Copying blob 86b23fed23f4 done
Copying blob 597be5f3fcff done
Copying blob 7dd002d4a36c done
Copying blob 6a5e24c477f6 done
Copying config 515b092fed done
Writing manifest to image destination
Copying config 515b092fed done
Writing manifest to image destination
Storing signatures
$

・コンテナ・イメージが統合OCPレジストリーにpushされたことを確認します。

$ oc get imagestream
NAME IMAGE REPOSITORY TAGS UPDATED
mylibertyapp default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp 1.0 55 seconds ago$ oc describe imagestream mylibertyapp
Name: mylibertyapp
Namespace: wlp-sample
Created: About a minute ago
Labels: <none>
Annotations: <none>
Image Repository: default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp
Image Lookup: local=false
Unique Images: 1
Tags: 11.0
no spec tag* image-registry.openshift-image-registry.svc:5000/wlp-sample/mylibertyapp@sha256:bc6bc8fac41fd59b42d37e02888a3348f057c5caa0d8b41fd74d9e9f4aabdab4
About a minute ago
$
(7)SCCをサービス・アカウントに付与(grant)

・(3)で作成したibm-websphere-liberty-sccをWebSphere Libertyが使用するサービス・アカウントに付与します。

$ oc project wlp-sample

$ oc adm policy add-scc-to-user ibm-websphere-liberty-scc -z mylibertyapp-ibm-websphe
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:ibm-websphere-liberty-scc added: “mylibertyapp-ibm-websphe”
$

(8)WebSphere LibertyのPodをデプロイ

・Helm Chartから変数ファイルを抽出します。
*WebSphere Liberty用helm Chart(「ibm-websphere-liberty-1.10.0.tgz」)をhttps://github.com/IBM/charts/tree/master/repo/stable からダウンロードしておきます。

$ helm inspect values ./ibm-websphere-liberty-1.10.0.tgz > mylibertyapp.yaml

・抽出した変数ファイルをエディタで開いてパラメーターを修正します。今回は以下の2箇所を更新しました。

ー (変更前)license: “”  ⇒ (変更後)license: “accept”
ー (変更前)ssl: enabled: true ⇒ (変更後)ssl: enabled: false

・修正した変数ファイルを指定して「helm install」コマンドを実行し、デプロイします。

$ helm install mylibertyapp ./ibm-websphere-liberty-1.10.0.tgz -f ./mylibertyapp.yaml
NAME: mylibertyapp
LAST DEPLOYED: Mon Mar 1 08:26:17 2021
NAMESPACE: wlp-sample
STATUS: deployed
REVISION: 1
NOTES:
+ If you are running on IBM Cloud Kubernetes Service, get the application address by running these commands:
ibmcloud cs workers $(kubectl config current-context)
export NODE_IP=<Worker node public IP from the first command>
export NODE_PORT=$(kubectl get –namespace wlp-sample -o jsonpath=”{.spec.ports[0].nodePort}” services mylibertyapp-ibm-websphe)
echo Application Address: http://$NODE_IP:$NODE_PORTOtherwise, run the following commands:
export NODE_IP=$(kubectl get nodes -l proxy=true -o jsonpath=”{.items[0].status.addresses[?(@.type==\”Hostname\”)].address}”)
export NODE_PORT=$(kubectl get –namespace wlp-sample -o jsonpath=”{.spec.ports[0].nodePort}” services mylibertyapp-ibm-websphe)
echo Application Address: http://$NODE_IP:$NODE_PORT
$

・正常にデプロイできたか確認します。

$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mylibertyapp wlp-sample 1 2021-03-01 08:26:17.876891227 +0000 UTC deployed ibm-websphere-liberty-1.10.0 19.0.0.6
$

・作成された主要なOCPリソースの一覧と状況を確認します。

$ oc get all -l app=mylibertyapp-ibm-websphe
NAME READY STATUS RESTARTS AGE
pod/mylibertyapp-ibm-websphe-76478c8fcd-ngqpp 1/1 Running 0 82sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 82sNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/mylibertyapp-ibm-websphe 1/1 1 1 82sNAME DESIRED CURRENT READY AGE
replicaset.apps/mylibertyapp-ibm-websphe-76478c8fcd 1 1 1 82s
$
(9)手作業でRouteを定義し、WebSphere Libertyにアクセスします

・作成されたServiceを確認します。

$ oc get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 112s

・Routeを作成します。

$ oc expose service mylibertyapp-ibm-websphe
route.route.openshift.io/mylibertyapp-ibm-websphe exposed
$

・RouteのHOST名を確認します。

$ oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
mylibertyapp-ibm-websphe mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com mylibertyapp-ibm-websphe http None
$

・最後に、Webページにアクセスしてみます。
ー コマンドの場合

$ curl -s http://mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com
<!DOCTYPE html>
<html lang=”en” xml:lang=”en”>
<head>
<meta charset=”utf-8″ name=”viewport”
content=”width=device-width,initial-scale=1.0″>
<!–title data-externalizedString=”WELCOME_TITLE”></title–>
<title>WebSphere Liberty 19.0.0.12</title>
<style>
@font-face {
font-family: IBMPlexSans-Medium;
src: url(‘fonts/IBMPlexSans-Medium.woff’);
}
(以下、省略)

ー Webブラウザの場合

4.まとめ

いかがでしたでしょうか。
コンテナ版なのでインストールは簡単かな、と思っていたのですが実行するコマンドも多くて結構大変だった印象です。大まかには「コンテナイメージのビルド」⇒「OCPレジストリにプッシュ」⇒「Podのデプロイ」という流れなのですがそれぞれの工程ごとにいろいろなコマンドを打つ必要があるので、実際にやってみようと思われている方の参考になればと思います。

ここまでお読みいただきありがとうございました。
次回はWSHEで利用可能な各種ツール群をインストールしてみた内容をお伝えいたします。

 

お問い合わせ

この記事に関するご質問は下記までご連絡ください。

エヌアイシー・パートナーズ株式会社
技術支援本部

E-Mail:nicp_support@NIandC.co.jp
 

その他の記事

2025年12月25日

“AI を学習用ではなく事業の現場に馴染ませる”
本格的なAI時代に誕生したIBM Power11の覚悟とは?

公開日:2025-12-25 本格的なAI時代の到来で、企業にとってIT基盤の存在感はこれまで以上に重みを増しています。IBM Power11は、そうした時代の要請に応えるべく誕生した真のエンタープライズ・サーバーです。堅牢な信頼性と高い処理性能に加え、外付けカードIBM Spyre Acceleratorによって、地に足がついたAIワークロードをすぐに実装できる実用性を備えるに至っています。既に先行ユーザーは、大きな業務効率化の効果を体感しており、このサーバーは単なるハードウェアを超えて、次世代の標準基盤となる期待を集めています。 今回は、日本アイ・ビー・エム(以下、IBM)テクノロジー事業本部 Powerテクニカル・セールス部長 釘井 睦和 氏をお迎えし、AI時代をリードするべくして誕生したIBM Power11の“覚悟”について伺いました。 出席者 ゲスト 日本アイ・ビー・エム株式会社テクノロジー事業本部Powerテクニカル・セールス部長釘井 睦和 氏 インタビュアー エヌアイシー・パートナーズ株式会社技術企画本部テクニカル・サポート部部長 広橋 稔 本格的なAI時代の到来で、さらに重みの増すIT基盤 広橋: 経営とITが不可分となった今日、企業のお客様が直面している課題としてどのようなものがあると考えておられますか。 釘井氏: 本格的にAIの時代が到来したことが非常に大きいと思います。企業競争力の維持を図る上で、もはや、AI活用を抜きに戦略を立てられないというところまで来ています。実践段階に入ってきたこともあり、アナリスト機関IDCによれば、これからはAIエージェントが自らアプリケーションを書くようになると予測されています。その結果、アプリケーションの数は爆発的に増加し、今後10億もの新しいアプリケーションが出現すると予測され、そのうち3分の1はAIによって開発される見込みです。こうなってくると、アプリケーションを支えるインフラは、これまでにないスピードと規模でアプリケーション増加への対応と高い可用性を求められます。計画停止すら許されないミッションクリティカルな業務が増えていくことでしょう。そのような世界では、油断をするとシステムのサイロ化やデータ爆発も起きやすくなるため、その対策も必要です。 その一方で、ランサムウェア攻撃を筆頭に、セキュリティリスクも劇的に高まっており、対策強化も喫緊の課題です。だからといって、ITばかりに予算を使うわけにはいきませんから、そこはコスト最適化を図る目線も要求されます。さらに、少子高齢化社会の進行で、IT人材も確保しづらい状況が続いているため、より少ない人員でより多くのことをカバーできるかといった観点での運用効率化も恒常的なテーマとなっています。つまり、今日の企業が対峙している課題は文字どおり山積しているといえます。 広橋: 確かに、日ごろパートナー企業やエンドユーザー企業のお悩みを聞く中で、こうしたお話はよく伺います。特にAI活用については、意欲を持ちつつも、プレッシャーも感じておられるようです。 AI時代のニーズに応える真のエンタープライズ・サーバー 釘井氏: こうした中、今年登場したIBM Power11は、本格的なAI時代のニーズに応える、真のエンタープライズ・サーバーとして位置づけられています。このサーバーは、単なるハードウェアを超えたまさに“企業の中枢を支える基盤”として設計されており、Powerとして従来から定評のある堅牢性と可用性をさらに進化させつつ、計画停止をほぼ不要とする自律的な運用機能や強靭なセキュリティを標準装備しました。また、最新のDDR5メモリと強化されたI/Oアーキテクチャにより、高負荷のトランザクション処理や大規模データ解析なども余裕を持ってこなすとともに、AI推論も得意とします。IBM Power11は、企業がAI時代に向けて加速できるようIBMが考え抜いたフルスタックのイノベーションです。 広橋: IBM Power11を特徴づけるキーワードをいくつか挙げていただけますか。 釘井氏: 一つは、「0」(ゼロ)です。これは、エンドツーエンドの自動化を実現し、計画的なダウンタイムを0にする、つまり、無停止運転を可能にすることを意味します。 従来はメンテナンスウィンドウを設けて実施していたファームウェア更新、I/Oアダプタ更新、仮想化ソフトウェア更新などを、IBM Power 11ではAutomated Platform Maintenance(APM、プラットフォーム自動保守)機能として、管理コンソールであるIBM Hardware Management Console(HMC)からワンクリックまたは準自動で実行可能です。環境をチェックする更新前準備、パッチ配布、ワークロードの退避・復帰を一連のフローで自動化できるため、停止せずに更新できるというわけです。 また、運用データを横断的に集約し、watsonxですぐに実行できる提案と自動化を結びつける、アプリケーション運用向けのAIオートメーション基盤 IBM Concertがあります。Concert for Powerでは、Powerインフラの脆弱性を検出して、現行バージョンに照らして優先度をAI算定、その後に推奨手順を提示し、必要に応じて更新をゼロ計画停止で実行するところまで担います。ここでいう実行とは、HMC/PowerVMが担う処理をConcertが呼び出して一気通貫に自動実行することを意味しています。 広橋: サーバー停止は業務に支障を及ぼしかねず、利用部門や経営層からの圧力も大きいため、情報システム部門としてはなるべく回避したい運用ですから、安定して動き続けてくれるならそれに越したことはないですね。 釘井氏: はい。もう1つのキーワードは「

2025年12月25日

VMware問題で生じる保守のすき間に、 IBM第三者保守という「つなぎ保守」を

公開日:2025-12-25 ブロードコムによるVMware買収により、多くのユーザー企業が大幅なコスト増か、保守なしでのリスク運用か、という究極の選択を迫られています。そういった企業に対して、日本アイビーエム(以下、IBM)では、「VMware第三者保守サポートサービス」を提供しています。これは、IBMがグローバルレベルでVMwareテクノロジーの知見を収集できる特性を活かして、高い解決率で保守サービスを提供するというもの。 今回は、サービス提供部門の方々をお招きし、このサービスの詳細とメリットとともに、なぜVMware第三者保守を手がけるのかについて深掘りしていきます。 出席者 ゲスト 日本アイ・ビー・エム株式会社テクノロジー事業本部テクノロジー・サービス事業第三営業部 部長 井上 亜矢子 氏 日本アイ・ビー・エム株式会社テクノロジー事業本部テクノロジー・サービス事業R&E第一営業部 山谷 怜 氏 日本アイ・ビー・エム株式会社テクノロジー事業本部テクノロジー・サービス事業R&E第一営業部 山口 英俊 氏 インタビュアー エヌアイシー・パートナーズ株式会社営業本部カスタマーサービス営業部第2グループグループ長 平嶋 英良 突然訪れる保守なしからのリスクをカバーするサービス 平嶋: ブロードコムによるVMware買収、いわゆる“VMware問題”では、多くユーザー企業の間で激震が走りました。大きなインフラコストの上昇を引き起こす要因となったからです。そうした中でIBMは「VMware第三者保守サポートサービス」を提供されている背景をお聞かせください。 山口氏: 買収によって、ライセンスとサポートの考え方が大きく変わりました。従来、ライセンスに関しては、「Perpetual 永続ライセンス」といって、一度購入すれば、期限無制限で永続的に使用する権利が得られました。サポートは、この永続ライセンスに対して有期限で別途契約する形態となっていました。しかし、サブスクリプション・ライセンスへと変更となり、ライセンスは有期のライセンスを新たに買い直すとともに、サポートもライセンスに同梱されることとなりました。したがって、サポートは、ライセンスと同じ期間の権利を買うことが求められることになりました。(図1)。 図1 ”仮想マシンのみ”からコンテナ利用環境へのモダナイゼーション これは、お客様にとって2つのことを意味します。サブスクリプション・ライセンスに移行すればインフラコストの大幅な上昇になり、かといって永続ライセンスにとどまれば、従来のサポート契約期間満了時からサポートが受けられなくなる。つまり、サポートにすき間が生じるリスクが生じます。障害が起きても情報システム部門で対応するという方法もありますが、VMware環境の運用には専門的な知識が必要で、現実的とは言えません。 平嶋: 多くのユーザー企業がジレンマを抱えておられるようです。 山口氏: そうなのです。そこでIBMは、こうした保守なしのリスク運用が生じないように、当社の実績ある第三者保守サポートの枠組みを通じて、経験豊富な技術者チームによるVMware 環境の安定稼働の支援と、コスト最適化効果を提供することを考えました。それが、「VMware第三者保守サポートサービス」です。 このサービスは、これを機に別のインフラ環境へマイグレーションしたり、モダナイゼーションしようと考えるお客様にも有効です。このようなプロジェクトは通常、多くの時間を要します。その間に従来のサポート契約満了日が来てしまうことも考えられ、リスクを避けようとすると、この日に合わせて急いで移行するか、いったんサブスクリプション・ライセンスを受け入れながら、新システムプロジェクトを進めるということになり、新旧インフラコストを負担しなければなりません。しかし、「VMware第三者保守サポートサービス」を利用すれば、既存システムのサポートはこちらでカバーできるため、拙速に陥ることなく、余裕を持ってマイグレーションやモダナイゼーションに取り組むことができます。 井上氏: また、サブスクリプション・ライセンスに移行したけれど、稼働しているアプリケーションの事情で、VMware の古いバージョンを使い続けているという場合もあるかと思います。メーカーではサポートするバージョンが限られているため、サポート契約を結んでいても、それがあまり効果を発揮できないケースがあります。「VMware第三者保守サポートサービス」なら、比較的古いバージョンでもサポートを提供することが可能ですので、こちらを追加でお買い求めいただいてご活用いただく、というパターンもあります。 平嶋: なるほど。様々な状況で、コストを含めて、お客様に安心を提供できるサービスなのですね。 「VMware第三者保守サポートサービス」とは 平嶋: あらためてサービスの詳細をご紹介ください。 井上氏: サービス名称にもある通り、この枠組みではIBMはあくまで第三者であり、メーカーではないため、パッチの提供は行いません。何か事象が起こったときは、お客様からログなどをいただいて、「この設定をこのように変えてください。そうすればこの事象は回避できるはずです」と、事象の回避策を提案します。なぜこのようなことができるかというと、IBMにはグローバルレベルでVMwareのスキル、ノウハウに精通した協業パートナーが存在し、また、様々なお客様において提供したサポートの実績も蓄積しているからです。当社の技術チームがそこから事例やデータの提供を受けながら技術調査を行い、的確かつ最適な回答を追求して問題対応に当たります。ただ、あくまでも立場は第三者であるため、このサービスはベストエフォートでのサポートとなります。しかし、IBMでは、Oracleを含め第三者保守では豊富な実績を誇っており、回避策の提供で解決しない事象はほぼありません。 平嶋: お客様からはどのように相談を受けるのですか。 井上氏: ご相談は24時間365日Web上で受け付けています。対応に当たるのは平日9時から17時になります。 平嶋: IBM製品をお使いのお客様ですと、「システム技術支援サービス」 (System Technical Support Services、以下STSS)をご利用になっているケースもあるかと思いますが、その場合はどうなるのでしょうか。 井上氏: その場合は「IBM サポート・コミュニティ」にご連絡いただければ、STSS側で「これはVMwareの問題だね」と認識して、IBM内部でVMware担当と連絡を取り合って、受付/対応を行います。お客様は窓口を使い分ける必要なく、ワンストップサービスのイメージでご利用いただけます。 図2 IBM VMware第三者保守サポートサービスご提供体制 平嶋: 契約条件などはあるのでしょうか。 井上氏: ライセンス数は“20”から、契約期間は3カ月以上、3年以下とさせていただいています。ライセンス数“20”というのは、日本のVMwareユーザーのお客様を調査したところ、大体平均でこのぐらいの数はお持ちであることがわかり、“20”に設定させていただきました。 平嶋: 契約期間を3カ月以上、3年以下に設定されているのはなぜですか。お客様によっては、もっと長く保守してほしいというご要望があるような気がします。 井上氏: 3カ月以上というのは採算上の問題です。長い分には、5年でも、10年でも保守をお引き受けすることはサービス設計上可能ではあるのですが、あえて3年以下とさせていただいたのには、ここにIBMとしての「思い」があるのです。 次を見据えたシステム移行のための「つなぎ保守」 山谷氏: その「思い」というのは、この第三者保守について、次を見据えたシステム移行を考える上で一つの手段とする、「つなぎ保守」として活用いただきたいというものです。技術革新の著しいITの世界にあって、一つのインフラを長く使い続けるのはあまり健全ではないと私たちは考えています。そのため、あえて「VMware第三者保守サポートサービス」を恒久的に使っていただくことが目的とならないようにと考えています。そこが、他社さんの第三者保守との非常に大きな違いです。お客様にとって重要なのは、この先どのようなインフラが最もふさわしいかを考えることです。一緒に知恵を絞らせていただいてお手伝いしながら、実現するまで既存の環境をお守りする、というのが私たちのスタンスなのです。これは、IBMにはハードウェアでもソフトウェアでも様々な部門があり、多様な支援が可能だからということもあります。 平嶋: VMwareからの移行では、なにかモデルパターンを想定されているのでしょうか。 山谷氏: 移行のパターンはたくさんあると思います。Hyper-VやKVMなど他社製のハイパーバイザーへ移行することもその一つですし、これを機にクラウドへシフトするということも考えられます。お客様によっては非常に大規模で複雑なVMware基盤をお持ちの場合もあると私たちは考えており、一筋縄でいかない環境に対して、新しいインフラをどう構想するか、また移行するか、そして稼働後にどう運用保守していくか、といったところまでご相談に乗ることが可能です。 山口氏: そういう意味では、金融業界のお客様はこう、製造業のお客様はこう、と、お客様の業種・業態によってもさまざまなパターンが考えられるかもしれないですね。IBMは全ての業種・業態のお客様とリレーションがありますので、そうしたナレッジも活かしながら、お客様にヒアリングをさせていただき、システム移行を一緒に検討していければと考えています。また、検討フェーズではパートナー企業の存在、また共創も重要で、ここはNI+C P様に主導権を握っていただければ。「こういう提案をしたい」といただいた声に対して、「それならこのようなソリューションがあります」と応えていきたいと考えています。 余裕を持った最適解の選択をNI+C Pもサポート 平嶋: こうして見ると、「VMware第三者保守サポートサービス」には、大きく4つのメリットがありそうです。1つ目は、 サポート保守なしリスクを伴う運用を防ぎ、万一の障害にも備えられること。2つ目は、 それでいながらコストを最適化できること。3つ目は、ベストエフォートではあるけれど、グローバルレベルでVMwareの高い知見を収集できるIBMの特性を活かした、安心感の高いサポートを受けられること。4つ目は、既存のインフラ環境の“次”を見据えて検討し、実現できるパートナーを持てること。4つ目に関しては、ぜひ当社も貢献したいですね。 山口氏: お客様には、この「つなぎ保守」のメリットを活用し、インフラ環境のマイグレーションやモダナイゼーションに成功していただきたいと思います。 平嶋: インフラ環境の移行は長期的な計画が必要です。このサービスを活用することで「時間」と「安心」を確保でき、拙速を避けて、余裕を持って最適解を選ぶことができます。NI+C Pでは、IBMのハードウェア(保守を含めたサービスやサーバー、ストレージ)とソフトウェア(Storage Fusion、watsonxなど)を組み合わせた最適なソリューションを示すことができます。また、製品の特長やユースケースを分かりやすく説明し、お客様課題の解決策も提案させていただきます。VMware問題でお困りの際は、ぜひお気軽にご相談いただければと思います。 .recommend-list{ margin-top: 0px; } ol.recommend-list li { color: #9b9b9b; } #recommend{ font-family: "Noto Sans Japanese"; font-size: 16px; font-weight: 700; color: #9b9b9b; border: none; padding: 0; margin-bottom: 10px; } .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #eb6100; transition: all 0.5s ease; } .btn_A a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; } .interviewee { font-weight: bold; } figcaption { color: #7c7f78; font-size: smaller; } #box03 { position: relative; margin: 4em 0; padding: 0.5em 1em; border: solid 3px #95ccff; border-radius: 8px; } #box03 .box-title { position: absolute; display: inline-block; top: -13px; left: 10px; padding: 0 9px; line-height: 1; font-size: 19px; background: #FFF; color: #95ccff; font-weight: bold; } #box03 p { margin: 5px; padding: 0; font-weight: bold; } #box04 { position: relative; margin: 4em 0 0 0; padding: 0.5em 1em; border: solid 3px #3193CA; } #box04 .box-title { position: absolute; display: inline-block; top: -27px; left: -3px; padding: 0 9px; height: 25px; line-height: 25px; font-size: 17px; background: #3193CA; color: #ffffff; font-weight: bold; border-radius: 5px 5px 0 0; } #box04 p { margin: 0; padding: 0; } #box_blockquote { position: relative; margin: 4em 0; padding: 0.5em 1em; border: solid 3px #8d8d8d; } #box_blockquote .box-title { position: absolute; display: inline-block; top: -27px; left: -3px; padding: 0 9px; height: 25px; line-height: 25px; font-size: 17px; background: #8d8d8d; color: #ffffff; font-weight: bold; border-radius: 5px 5px 0 0; } #box_blockquote p { margin: 0; padding: 0; } .memo{ color:#53851b ; background-color: #c8d7b7; font-size:70%; } #blockquote_nicp{ padding:10px; margin-bottom:0px; background-color:#ffffff; } #blockquote_nicp_link{ color:#7c7f78; font-size:70%; } #h5_nicp{ font-size: 12px; padding:4px 10px; border:none; background-color:#afd2f453; }

2025年12月24日

【イベントレポート】Automation テクニカルワークショップ第一回 開催しました

公開日:2025-12-24 こんにちは。てくさぽBLOGメンバーの和田です。 2025年11月26日に「Automation テクニカルワークショップ」第一回を開催しました。 本ワークショップは、2025年7月および9月に実施した「watsonx Orchestrate ハンズオンセミナー」に続く取り組みとして、IBM Automation製品群の中で弊社が注力しているAIOpsソリューションを中心に企画検討し、利用イメージがつきやすいInstanaのハンズオンを実施しました。 ハンズオンだけでなくワークショップ形式でのセッションを通じて、ITシステム運用の現場で直面する課題をどのように解決できるのか、Instanaを活用した具体的な方法を参加者同士が議論しました。また、セッションの最後には各チームごとに成果を発表・共有する場を設け、Instanaに対する理解を深めるとともに、参加者間の交流を促進することを目的としました。 本ブログでは、このテクニカルワークショップの内容について簡単にご紹介いたします。 目次 ワークショップアジェンダ Instana概要 Instanaハンズオン グループワーク まとめ お問い合わせ ワークショップアジェンダ ワークショップのアジェンダについては以下の通り実施いたしました。 IBM AIOpsソリューション概要 Instana 座学 Instana ハンズオン Instana最新情報 グループワーク IBM AIOpsソリューション概要では、IBMが取り揃えているAIOpsソリューションのラインナップと利用シーンをご紹介し、その中でもお客様のROIが高いお勧めのソリューションをピックアップしてご紹介しました。 また、Instana最新情報ではIBM様にご登壇いただき、DBMarlinとの連携やAIでの監視支援、LLMのトークン数を収集できる機能など最新アップデート情報をご紹介いただきました。 Instana概要 Instanaについては過去にこちらの記事でご説明しております。 今回はInstanaのAgentを導入することからハンズオンで実施しますので、Instana Agentがどのようにデータを収集するかについてご説明します。 InstanaはAgentのセンサー機能が監視対象を自動検出してデータ収集します。 Agent自体がセンサー機能を持っているわけではなく、Agentインストール後にセンサー機能をインストールし、そのセンサー機能で各コンポーネントを検出しデータを収集しています。 Instana Agentは収集したデータをInstana バックエンド(SaaSもしくは自己ホスト)に送信します。   Instanaハンズオン Instana Agentの導入からInstanaでの情報確認、障害発生時のエラー発生箇所確認をハンズオンで体験頂きました。 実施内容 環境の説明/ログイン Instana Agentのインストール インフラストラクチャー情報確認 アプリケーション設定/アプリケーション情報確認 アラートチャネル作成/アラート設定 障害注入/エラー発生箇所確認   今回のハンズオンではサンプルアプリケーションを導入してあるサーバーを参加人数分ご用意したので、参加者の方々全員がInstana Agentの導入を体験いただけました。 ハンズオンではInstana Agentの導入を行うためCLIでサーバーにログインいただきました。 普段CLIを利用されないかたもいらっしゃったのでログインに苦戦された方もいましたが、AgentのインストールはLinuxの場合ワンライナーで導入できるため、Agent導入はスムーズに行えてました。 実際にAgent導入したサーバの情報やアプリケーションの情報をみていただくことで、Instanaではどういった情報が表示されるのか、どういった操作感なのかを体験していただけました。 また、サンプルアプリケーションにエラーを発生させるスクリプトもご用意しましたので、実際にエラーが起きた場合正常時と比較しどのように見えるか、アラート設定をした場合、どのような通知がくるのかを体験いただきました。 その他のハンズオンについて詳しく知りたい方は、ブログの最後に記載している「お問い合わせ」までお気軽にご連絡ください。 グループワーク 今回、ハンズオンだけでなくITシステム運用の現場における課題を洗い出し、それらの課題を解決する手段としてInstanaがどう使えるかという観点でチームに分かれてグループワークを行いました。 1チーム4,5人の合計3チームに分かれてNI+C Pメンバーがファシリテートしながらアイディア出し・ディスカッションを行いました。 当日上がった課題及びInstanaを活用することで改善できることをいくつかピックアップします。 運用の属人化がおきている 障害原因の特定までをInstanaがガイドしてくれるためどんな人でも対応できる ログの分析に時間がかかる Instanaの画面上でログの確認・分析ができるため時間短縮できる ご参加して頂いたパートナー様が携わっていらっしゃる業務や、業務の経験年数が異なることより多様な意見が出ておりました。 アドバイザーで参加いただいたIBM様も含め、各チーム貴重な意見交換をできるグループワークとなりました。 グループワークの感想について、「他の会社の意見が聞けてよかった」や、「Instanaを利用するシーンがより理解できた」といったような意見をいただきました。 まとめ このたび、Automation製品に関する初めてのワークショップを無事に開催することができ、安堵しております。 ご参加いただいた皆様からのアンケートでは、「はじめてInstanaに触れましたが、実際に障害が発生した際の挙動を見ることができたうえ、他社の方々との交流や意見交換の機会もあり、大変有意義な時間となりました」とのご意見をいただきました。このようなお声をいただけたことで、準備を重ねてきた甲斐があったと感じ、心より嬉しく思っております。 今後も、製品を実際に体験いただけるハンズオンや、参加者同士が交流・情報共有を行えるワークショップを継続的に開催してまいります。ご興味ある方は是非ご参加いただけますと幸いです。 また、「こんなことをやってほしい」「この製品を使ったワークショップをお願いしたい」といったご要望がございましたら、ぜひお気軽にお聞かせください。 お問い合わせ この記事に関するご質問は以下の宛先までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術企画本部 E-mail:nicp_support@NIandC.co.jp   .bigger { font-size: larger; } .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #eb6100; transition: all 0.5s ease; } .btn_A a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .table { border-collapse: collapse; border-spacing: 0; width: 100%; } .td { padding: 10px; vertical-align: top; line-height: 1.5; } .tbody tr td:first-child { font-weight: bold; width: 20%; } .tbody tr td:last-child { width: 80%; } .ul { margin: 0 !important; padding: 0 0 0 20px !important; } .ol { margin: 0 !important; padding: 0 0 0 20px !important; } .tr { height: auto; } .table { margin: 0; } *, *:before, *:after { -webkit-box-sizing: inherit; box-sizing: inherit; } .html { -webkit-box-sizing: border-box; box-sizing: border-box; font-size: 62.5%; } .btn, a.btn, button.btn { font-size: 1.6rem; font-weight: 700; line-height: 1.5; position: relative; display: inline-block; padding: 1rem 4rem; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-transition: all 0.3s; transition: all 0.3s; text-align: center; vertical-align: middle; text-decoration: none; letter-spacing: 0.1em; color: #212529; border-radius: 0.5rem; } a.btn--orange { color: #fff; background-color: #eb6100; border-bottom: 5px solid #b84c00; } a.btn--orange:hover { margin-top: 3px; color: #fff; background: #f56500; border-bottom: 2px solid #b84c00; } a.btn--shadow { -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, .3); box-shadow: 0 3px 5px rgba(0, 0, 0, .3); }

2025年12月24日

【てくさぽBLOG】IBM watsonx OrchestrateでAIエージェント開発してみた(Part1)

こんにちは。てくさぽBLOGメンバーの高村です。 8月は「【てくさぽBLOG】IBM watsonx OrchestrateのADKを使ってみた」でADKの操作感や感想をご紹介しました。今回は、2025年6月のアップデート後のwatsonx OrchestrateのUIからエージェントを開発し、操作感や感想を2回に分けてご紹介いたします。なお、Part2ではエージェントのデモ動画もご紹介する予定ですのでぜひご期待ください! 目次 はじめに サンプルエージェントのシナリオ サンプルエージェント開発 さいごに お問い合わせ はじめに 6月のアップデートで、watsonx Orchestrateはメニュー構成・操作方法・機能名称が変更されました。例えば、従来「Skill」と呼ばれていたものが「Tool」に変更されています。Toolとは、AIエージェントが呼び出して実行するアクションの部品と考えて頂ければと思います。ユーザーがチャットへ自然言語で問い合わせると、AIエージェントは内容に応じて適切なツールを選択して実行します。これにより、生成AIによる要約や抽出などのテキスト処理だけでなく、外部システムやサービスと連携した処理も行うことができます。 その他の変更点については、「【イベントレポート】watsonx Orchestrate テクニカルワークショップ第一回 開催しました」内でもご紹介していますのをご参照ください。 サンプルエージェントのシナリオ サンプルエージェントのシナリオは、企画担当者が在庫商品を参照し、在庫情報に基づいて顧客へキャンペーンメールを送信する作業を想定しています。 通常は、担当者が在庫情報を確認するためにデータベースへログインし、目視でキャンペーン対象商品を選定したうえでメールの文面を作成することが想定されます。キャンペーンメール送信対象はSFAなどのシステムで確認し、メールツールを利用して送信します。振り返ると、データベース・SFA・メールツールと複数のシステムを利用し、対象商品の選定やメール内容を人力で考える必要があるため、作業は煩雑で時間と労力を要します。 watsonx Orchestrateを導入すると、AIエージェントが在庫情報と顧客情報の取得し、在庫の多い商品のキャンペーンメール文面をAIが作成し、メールの作成・送信までを一気通貫で実行することが可能です。 サンプルエージェントの開発 それではサンプルエージェントを開発します。開発ではIBM Cloud 上の watsonx Orchestrate、メールツール(Brevoに弊社アカウントを紐づけて利用)、SFA の Salesforce(弊社 Sandbox 環境)を利用します。 本記事Part1では図のピンクで囲った部分「Salesforceから顧客情報を取得」と「在庫情報の取得」をご紹介いたします。 watsonx Orchestrateへログイン・環境のご紹介 watsonx Orchestrateへのログイン方法は「【てくさぽBLOG】IBM watsonx Orchestrateを使ってみた(Part1)」をご参照ください。ログインすると下記のチャット画面に入ります。作成したAIエージェントをデプロイすると、このチャット画面から問い合わせをすることができます。 左上のメニューバーをクリックします。一番上の「Chat」をクリックすると前述のチャットインターフェース画面に遷移します。「Discover」をクリックするとwatsonx Orchestrateに事前定義されたエージェントやツールのカタログをみることができます。 「Discover」内の事前定義エージェント、ツールを簡単にご紹介します。TypeをAgentsに絞ります。事前定義エージェントとは、特定のシステムとの接続が定義されたエージェントが提供されており、環境接続設定を行うとすぐ利用することが可能です。(watsonx Orchestrateのプランによっては追加費用がかかるエージェントがございます。) TypeをToolsに絞ると特定システムで利用できるツールが提供されています。下記画面はSalesforceで利用できる事前定義ツールの一覧です。今回はSalesforceから顧客情報を取得するため「List accounts in Salesforce」と「List contacts in Salesforce」のツールを使用します。ツールの機能は下記になります。 List accounts in Salesforce:ユーザーの入力に基づき、Salesforceからアカウント情報を表示 List contacts in Salesforce:ユーザーの入力に基づき、Salesforce からアカウントの連絡先を表示 Salesforceとの接続設定 Salesforceの事前定義ツールを用いてエージェントが顧客情報を取得できるようにするため、はじめにSalesforceとの接続設定を行います。 1. Salesforce側設定(コンシュマー鍵と秘密鍵の生成) Salesforceへログインし、設定>外部クライアントアプリケーション>外部クライアントアプリケーションマネージャーをクリックします。コールバックURLは「https://ご使用リージョン/mfe_connectors/api/v1/agentic/oauth/_callback」と設定します。OAuth範囲は下記画面の通りを設定します。 コンシュマー鍵と秘密鍵をクリックし、生成されたコンシュマー鍵と秘密鍵をメモをしておきます。Salesforceの設定は以上です。 2. watsonx Orchestrate側設定(接続設定と接続確認) watsonx OrchestrateのメニューからManage>Connectionsをクリックします。 接続設定の一覧が表示されるのでSalesforceを探し、鉛筆マークをクリックします。 下記画面が表示されます。Draft環境、Live環境と環境を分けて設定することができます。今回はDraftで設定します。各項目には以下を値を入力します。 Server URL:Salesforce環境のURL TokenURL:Salesforce環境のURL/services/oauth2/token Authorization URL:Salesforce環境のURL/services/oauth2/authorize ClientID:Salesforceで取得したコンシュマー鍵 Client Secret:Salesforceで取得した秘密鍵 下にスクロールし、Credential typeを選択します。Member credentialsにするとユーザーは個人の認証情報を使用してアプリケーションにアクセスできます。ここではTeam credentialsにし、チームメンバーが資格情報を使用してアプリケーションにアクセスできるようにします。最後にConnectをクリックします。 Webブラウザが開き、Salesforceのログイン画面が表示されます。ユーザ名、パスワードを入力してログインします。 watsonx Orchestrateの画面に戻り、Connectedとなっていることを確認しSaveします。 下記の様にConnectされている状態で緑のチェックがついていることを確認します。 Salesforceとwatsonx Orchestrateの接続設定は完了です。 Salesforceの事前定義ツール構成 それではエージェントを作成し、Salesforceから顧客情報を呼び出すツールをエージェントに構成していきます。 メニューのBuildをクリックします。 Create agent +をクリックしてエージェント作成画面に入ります。 Nameには任意のエージェント名、Decriptionはエージェントの説明を入力します。最後にCreateをクリックします。 下記画面が表示されます。エージェントが使用するモデルを選択します。2025年12月時点はllama-3-2-90b-vision-instruct(Default)、llama-3-405b-instruct、GPT-OSS 120B-OpenAI(via Groq)が利用できます。Agent Development Kitからは外部のLLMを紐づけることも可能です。弊社環境はgpt-oss-120bを紐づけています。今回はGPT-OSS 120B-OpenAI(via Groq)を指定します。 下にスクロールします。Welcomeメッセージとクイックスタートプロンプトを設定することができます。今回はデフォルトのままにします。 Agent Styleを設定することができます。Agent styleとはユーザの要求に対してどのように理解、決定、タスクを完了するか定義するものです。現在は DefaultとReActの2種類から選択することができます。今回はDefaultを指定します。 なお、Voice modalityではユーザとのコミュニケーションに音声を利用することができますが、今回は利用しません。 KnowledgeはエージェントでRAGを実装することができます。後程設定します。 エージェントが使用するツールを設定します。Toolset欄のAdd tool+をクリックします。 以下画面が表示されるのでCatalogをクリックします。 Appsの中からSalesforceにチェックを入れます。右側にエージェントが使用できるSalesforceのツール一覧が表示されます。 List accounts in Salesforceを選択しAdd to agentをクリックします。同様にList contacts in Salesforceも追加します。 Toolsetの画面に戻ると以下の様にツールが登録されています。 Behaviorのセクションまで下にスクロールします。Behaviorではエージェントがユーザの要求に対してどのように反応し、応答するか振る舞いを定義します。以下のように振る舞いを定義します。 ここまで設定したところでエージェントの動きを確認します。検証ではデプロイはせず右画面のPreviewから確認したいと思います。 チャットに「アカウントリストを教えて」と入力します。しばらくするとエージェントが登録したList accounts in Salesforceを使用してSalesforceからアカウント情報を取得、回答してくれました。(企業名は検証用に疑似的に作成しています) 次に担当者の連絡先を知りたいので、チャットへ「D&Gソリューションのコンタクトリストを表示して」と問い合わせます。しばらくすると、エージェントが指定した企業名をキーに「List contacts in Salesforce」を実行し、担当者名と連絡先を回答してくれました。このように、ツール自体はSalesforceからアカウント情報やコンタクトリストを取得する機能ですが、チャットで指定した企業名をキーとして、エージェントが絞り込んで回答することができます。 Salesforceの事前定義ツールの構成は完了です。 Knowledgeの構成 エージェントが在庫データから情報検索できるようにKnowledgeを構成します。2025年12月時点、構成できるデータソースはwatsonx.dataのMilvus、Elasticserch、AstraDB、カスタムサービス、watsonx Orchestrateへ直接アップロードの6つです。ここではサンプルのCSVファイルを用意し、直接watsonx Orchestrateへアップロードします。 Knowledgeセクションまでスクロールし、Add source +をクリックします。 New knowledgeをクリックします。 Select sourceからUpload filesを選択してNextをクリックします。 CSVファイルをドラッグアンドドロップしてNextをクリックします。 NameにはKnowledgeの任意の名前を、Descriptionにはユーザーからどのような要求でKnowledgeを使用するかを入力します。最後にSaveをクリックします。 下記画面の通り、Knowledgeが作成されました。 PreviewからエージェントがKnowledgeを使用して回答できるか確認します。チャットから「在庫情報を表形式で回答して」と問い合わせると下記画面のようにKnowledgeのCSVファイルデータを参照して表形式で回答されました。 矢印をプルダウンすると参照先を確認することができます。 行数が多いため、「在庫の多い上位5件を表形式で回答して」と問い合わせます。しばらくすると数量の多い上位5件の商品を表形式で回答してくれました。在庫一覧の提示だけでなく、ユーザーの要求から、情報を絞り込んだ回答も可能であることが確認できました。 Knowledgeの構成は完了です。 さいごに Part1ではAIエージェントを作成し、Salesforce環境へ接続して事前定義ツールを用いて顧客情報を取得。さらに、在庫データをKnowledgeに構成してRAGを実装しました。 今回はSalesforceの事前定義ツールとして「List accounts in Salesforce」と「List contacts in Salesforce」を構成しました。各ツールはアカウントやコンタクト情報をリストする機能ですが、List accountsの結果をAIが受け取り、ユーザーが特定の企業を指定すると、その企業のコンタクト情報を回答できることが確認できました。また、Knowledgeでは在庫データを表形式で提示するだけでなく、在庫の多い上位5件の抽出などの絞り込みも可能で、エージェント的な振る舞いを確認できました。 Part 2では、在庫の多い商品を基にAIがキャンペーンメールを作成し、コンタクト宛に送信する機能をエージェントへ実装したいと思います! お問い合わせ この記事に関するご質問は以下の宛先までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術企画本部 E-mail:nicp_support@NIandC.co.jp     .bigger { font-size: larger; } .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #eb6100; transition: all 0.5s ease; } .btn_A a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .table { border-collapse: collapse; border-spacing: 0; width: 100%; } .td { padding: 10px; vertical-align: top; line-height: 1.5; } .tbody tr td:first-child { font-weight: bold; width: 20%; } .tbody tr td:last-child { width: 80%; } .ul { margin: 0 !important; padding: 0 0 0 20px !important; } .ol { margin: 0 !important; padding: 0 0 0 20px !important; } .tr { height: auto; } .table { margin: 0; } *, *:before, *:after { -webkit-box-sizing: inherit; box-sizing: inherit; } .html { -webkit-box-sizing: border-box; box-sizing: border-box; font-size: 62.5%; } .btn, a.btn, button.btn { font-size: 1.6rem; font-weight: 700; line-height: 1.5; position: relative; display: inline-block; padding: 1rem 4rem; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-transition: all 0.3s; transition: all 0.3s; text-align: center; vertical-align: middle; text-decoration: none; letter-spacing: 0.1em; color: #212529; border-radius: 0.5rem; } a.btn--orange { color: #fff; background-color: #eb6100; border-bottom: 5px solid #b84c00; } a.btn--orange:hover { margin-top: 3px; color: #fff; background: #f56500; border-bottom: 2px solid #b84c00; } a.btn--shadow { -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, .3); box-shadow: 0 3px 5px rgba(0, 0, 0, .3); }

back to top