2023年08月

25

【てくさぽBLOG】IBM Cloud Schematicsを使ってPower Virtual Serverをプロビジョニングしてみた

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

今回は IBM Cloud Schematics(以下 Schematics)を利用して IBM Power Virtual Server のプロビジョニングを検証してみました。

IBM Cloud Schematics とは、Infrastructure as a Code(以下 IaC)を提供する IBM Cloud のマネージドサービスです。
IaC や Schematics などについてご存じでない方もいらっしゃると思いますので、順番にご紹介します。

IaCとは?

IaC はインフラストラクチャの設定や管理をコードで行うアプローチです。
具体的には、サーバーやネットワークなどのインフラストラクチャをコードで定義し、必要な時に実行し展開・変更することができます。

IaC を利用するメリットとしては以下が挙げられます。

  • 構築・管理の効率化:
    インフラストラクチャをコードとして管理することで構築・管理を自動化することができます。またコードを再利用することもできるため、複数の環境に対して同じ構成やリソース追加を効率的に構築することができます。
  • 共有の容易化:
    IaC は通常、ソースコード管理システム(Githubなど)を使用してコードを管理します。これにより、チームメンバーとの共有・変更の管理が容易になります。
  • 人為的ミスの削減:
    人為的なミスのリスクが減り、変更の管理やインフラストラクチャの状態の監視も容易になります。

以下はコードが実行される流れを表した図です。
作業者がコードを作成し、そのコードを Gitリポジトリなどにアップロードすると構成管理ツールによってコードが実行され、自動的に環境が構築される流れになります。

コードが実行される流れ

IaC を実現するためには構成管理ツールを利用します。
代表的なツールとしては「Terraform」「Ansible」「chef」などがあります。
以下に簡単にご紹介します。

  • Terraform:
    インフラストラクチャのコードを記述することで、インフラストラクチャの作成、構成、および変更を自動化します。Terraform は主に IaaS に焦点を当てており、インフラストラクチャの構成及び状態の管理に使用されます。
  • Ansible:
    構成管理、アプリケーションのデプロイ、タスクのオーケストレーションなど、幅広い自動化タスクに使用されるツールです。主に構成管理とアプリケーションのデプロイに使用されます。
  • Chef:
    Chefサーバーとクライアントを使用して設定を管理します。主にシステム設定やソフトウェアの導入などの自動化に使用されます。

ツール毎に得意とする分野があり、使用目的や環境に応じて使い分けられています。
これからご紹介する Schematics は上記の Terraform や Ansible の機能を統合し、IBM Cloud環境での IaC を実現するマネージドサービスです。

Schematicsとは?

Schematics は IBM Cloud のサービスの一つとして提供されるマネージドサービスです。

Schematics自体は無償サービスで、プロビジョニングしたリソースに対し費用が発生します。
2023年8月時点で、Schematics自体のリソースは北アメリカやヨーロッパなど一部の地域に作成されます。
ただし IBM Cloud のリソースを作成する場合は、Schematics のロケーションに関係なくどこでも作成することができます。

Schematics は大きく分けて3つの機能を利用することができます。

  • Schematicsワークスペース:
    Terraform の機能を利用し、IBM Cloud環境へのリソースのプロビジョニングと構成の管理の自動化を行います。
  • Schematicsアクション:
    Ansible as a Service機能を利用し、構成の管理及びアプリケーションを IBM Cloud環境にデプロイします。
  • Schematics Blueprints(2023年8月現在ベータ版):
    定義したインフラコードをモジュールとして取り扱い、組み合わせることで大規模環境をデプロイします。

Schematicsワークスペースと Schematicsアクションの使い分けとしては、リソースのプロビジョニングは Schematicsワークスペースを利用し、ソフトウェアのデプロイや設定管理には Schematicsアクションを利用することが推奨されています。

Schematicsワークスペースと Schematicsアクションの使い分

今回の検証では、Schematicsワークスペースを利用した Power Virtual Server のプロビジョニングをご紹介いたします。

検証の概要

Schematicsワークスペースの利用シーンとしては、複数の区画をプロビジョニングしたり、構成変更や別環境へ同一構成をプロビジョニングすることなどが考えられます。

今回の検証では Power Virtual Server を東京リージョンにプロビジョニングし、メモリ容量を変更を行います。
また、大阪リージョンにも同じ区画をプロビジョニングしていきます。

なお、事前に Power Virtual Server のワークスペースを東京と大阪に作成しておきます。
ワークスペースの作成方法につきましては「【やってみた】IBM Power Virtual ServerのAIX環境とIBM Cloud Object Storageを接続してみた -Part1-」の「2) IBM Power Virtual Serverの作成」をご参照ください。

以下は検証の構成図です。
コードは Github のプライベートリポジトリに配置します。外部のソースコード管理ツールを使用したくない場合は IBM Cloud Toolchain の Gitlab を利用することも可能です。

検証の構成図

Githubの設定

プライベートリポジトリの作成

Github の使用は初めてなので、アカウントやリポジトリ作成方法は Web で検索しました。
以下の画面は Github のトップ画面です。デザインがカッコいいですね。

Github のトップ画面

アカウントを作成し、ダッシュボード画面に入ります。
コードは外部公開しない想定のため、プライベートリポジトリを使用します。
任意のリポジトリ名を入力、[Private] を選択し [Create a new repository] をクリックします。

ダッシュボード画面

プライベートリポジトリが作成できました。
作成したリポジトリにコードを配置していきます。

プライベートリポジトリ

コードの作成

Power Virtual Server をプロビジョニングするためのコードですが、こちらの Github に「サンプルコード」が公開されています。5つのコードファイルがありますが全て使用します。
以下各コードファイルの説明です。

  • README.md:Readmeファイル
  • main.tf   :インフラ定義を記述するファイル
  • provider.tf :対象のクラウドなどの情報を記述するファイル(リージョンなども記述)
  • variable.tf :変数を記述するファイル
  • versions.tf :使用するモジュールとバージョンの組み合わせを記述

プライベートリポジトリの画面に戻り、[Add file] から [Create new file] をクリックします。

プライベートリポジトリ画面

ファイル名を入力し、サンプルコードをコピー&ペーストします。最後に [Commit change] をクリックします。

サンプルコードをコピー&ペースト

5つのコードファイルを作成しました。

5つのコードファイル

コードの編集

検証では以下構成の Power Virtual Server をプロビジョニングしていきます。

  • リージョン:東京
  • インスタンス名:test_AIX
  • OS:AIX V7.3
  • CPUタイプ:Uncapped Shared
  • CPU:0.25
  • メモリ:2GB
  • ストレージタイプ:Tier3
  • 外部ディスク名:dg
  • 外部ディスクサイズ:1GB
  • NW名:pvs_test_nw

サンプルコードのままでは上記の構成を作成することはできないため、変数ファイル「variable.tf」を編集する必要があります。
main.tf、provider.tf は variable.tf の値をみて動きますので特に編集は不要です。versions.tf は変更無し、README.md は適宜編集します。

以下は variable.tf の内容です。
各パラメータの説明は割愛いたしますが、ピンク字①~③の値の確認方法は下にご紹介します。

// Service / Account
variable “ibm_cloud_api_key” {
description = “API Key”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<①
variable “region” {
description = “Reigon of Service”
type = string
default = “tok
}
variable “zone” {
description = “Zone of Service”
type = string
default = “tok04
}
variable “cloud_instance_id” {
description = “Cloud Instance ID of Service”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<②// Image
variable “image_name” {
description = “Name of the image to be used”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<③// Instance
variable “instance_name” {
description = “Name of the instance”
type = string
default = “test_AIX
}
variable “memory” {
description = “Instance memory”
type = number
default = 2
}
variable “processors” {
description = “Instance processors”
type = number
default = 0.25
}
variable “proc_type” {
description = “Instance ProcType”
type = string
default = “shared
}
variable “storage_type” {
description = “The storage type to be used”
type = string
default = “tier3
}
variable “sys_type” {
description = “Instance System Type”
type = string
default = “s922
}// SSH Key
variable “ssh_key_name” {
description = “Name of the ssh key to be used”
type = string
default = “ssh_20230719
}
variable “ssh_key_rsa” {
description = “Public ssh key”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<公開鍵を入力// Network
variable “network_name” {
description = “Name of the network”
type = string
default = “pvs_test_nw
}
variable “network_type” {
description = “Type of a network”
type = string
default = “pub-vlan”
}
variable “network_count” {
description = “Number of networks to provision”
type = number
default = 1
}// Volume
variable “volume_name” {
description = “Name of the volume”
type = string
default = “dg
}
variable “volume_size” {
description = “Size of a volume”
type = number
default = 1
}
variable “volume_shareable” {
description = “Is a volume shareable”
type = bool
default = false
}
variable “volume_type” {
description = “Type of a volume”
type = string
default = “tier3
}

ピンク字①~③の値の確認方法は以下です。

①APIキー

APIキーの作成方法は「APIキーの作成方法」(IBMサイト)をご参照ください。
作成したAPIキーを控えます。

②クラウドインスタンスID

IBM Cloudリソースリストから Power Virtual Server のワークスペースを選択すると GUID が表示されるので控えます。

クラウドインスタンスID

③イメージID

IBM Cloud Shell からコマンドを実行してブートイメージのイメージIDを取得します。
Cloud Shell は管理コンソール画面の右上のアイコンから入ります。

イメージID

Cloud Shell で以下コマンドを実行します。


$ ibmcloud pi servicelist  <ワークスペースのcrnが表示されます
$ ibmcloud pi service-target crn:XXXXXXXX <表示された対象ワークスペースのcrnを入力します
$ ibmcloud pi images <イメージIDが表示されるのでIDを控えます


以下は出力結果画面です。
マスキングが多く申し訳ございませんが、ご参考ください。

出力結果画面

これでコードの編集が完了しました。
サンプルコードが提供されているので、variable.tf の変数を編集すれば目的のコードを作ることができますね。

トークンの取得

Schematics から Github のプライベートリポジトリにアクセスする際にパーソナルアクセストークンが必要となるため、Github からパーソナルアクセストークンを取得します。
メニューから [Settings] をクリックします。

パーソナルアクセストークン取得

左側メニューの [<>Developer settings] をクリックします。

<>Developer settings

[Tokens(classic)] をクリックします。

Tokens(classic)

[Generate new token(classic)] をクリックします。

Generate new token(classic)

[Note] に適宜入力し、[Expiration] を30日に設定し、”Select scopes” では [repo] にチェックを入れます。画面を下にスクロールし、[Generate token] をクリックします。

Generate token

パーソナルアクセストークンが作成できました。
後程Schematicsワークスペースの作成で必要になるためメモ帳などに控えておきます。

パーソナルアクセストークン作成完了

リポジトリーのURL取得

プライベートリポジトリのURLを取得します。
リポジトリ画面に戻り [<>Code] をクリックし、[HTTPS] を選択して URL を控えておきます。

プライベートリポジトリのURL取得

これで Github の設定は完了しました。

Schematicsワークスペースの設定・プランの実行

Schematicsワークスペースの作成

Schematicsワークスペースから Power Virtual Server をプロビジョニングにしてみましょう。

IBM Cloud のカタログから “Schematics” を選択します。

Schematics

Schematics のホーム画面に入りました。
[ワークスペースの作成+] をクリックします。

ワークスペースの作成+

ワークスペース作成画面です。
[GithubのURL] にはプライベートリポジトリの URL、[パーソナル・アクセス・トークン] には Github で作成したトークンを入力します。[完全リポジトリーの使用] のチェックボックスはデフォルトままにします。[Terraformバージョン] は最新バージョンを指定して [次へ] をクリックします。

ワークスペース作成画面

[ワークスペース名] に任意の名前を入力し、[ローケーション] を北アメリカ/ロンドン/フランクフルトの中から選択し、[次へ] をクリックします。

ワークスペース名/ローケーション

設定値が表示されるので確認し、[作成] をクリックします。

設定値

約1分程でワークスペースが作成できました。
variable.tf の変数が読み込まれ、ワークスペースの変数に表示されています。

ワークスペース作成完了

[README] を選択すると、README.md が読み込まれていることがわかります。

README

Power Virtual Serverのプロビジョニング

右上の [プランの生成] をクリックし、コードのチェックを行います。

プランの生成

プランの生成が成功すると、[ジョブ] 画面に以下のように表示されます。

ジョブ

ちなみに失敗時は以下の画面が表示されます。
失敗した場合はエラーメッセージから原因を確認します。
ここでは記載しませんが、何回かプランの生成に失敗しコードを修正しました。

失敗時

コードを修正した場合は、[最新をプル] をクリックすると最新の状態にすることができます。

最新をプル

話がそれましたが、プランを適用してプロビジョニングを実行します。
[プランの適用] をクリックします。

プランの適用

進行状況は [ジョブ] から確認できます。

進行状況

適用が進んでいますね。

適用

約15分程でプランの適用が完了しました。

プランの適用完了

Power Virtual Server のワークスペースを確認すると、指定通りのインスタンスが作成されていました。

Power Virtual Server のワークスペース

指定通りのインスタンス

構成変更

Schematicsワークスペースにてメモリ容量を2GBから4GBへ変更します。
Github のコード編集ではなく、ワークスペースから変数を上書きすることができます。
ワークスペースの変数画面から [memory] の編集アイコンをクリックします。

memory

値を [4] にして [保存] をクリックします。
なお、デフォルト値に戻したいときは [デフォルトの使用] にチェックを入れて保存します。

デフォルトの使用

メモリの変数がデフォルトは2、オーバーライド値が4になりました。

メモリの変数/オーバーライド値

プランの生成、適用を行い正常に行われたことを確認します。

プランの生成、適用を行い正常に行われたことを確認

Power Virtual Server を確認するとサイズ変更が実行されていました。

サイズ変更

数分後、メモリが2GBから4GBに変更されたことを確認できました。

メモリ変更

大阪リージョンへプロビジョニング

東京リージョンに作成した区画と同じ構成を大阪リージョンに作成します。
リソース変更手順と同様にワークスペースの変数を編集します。
[region] を選択して [編集] をクリックします。

region

大阪リージョンの [osa] を入力して [保存] をクリックします。

osa

同様に、zone, cloud_instane_id, image_name の変数を大阪リージョンの値に上書きします。

zone / cloud_instane_id / image_name

変数の上書きをした後、プランの生成を行ったところ生成が失敗してしまいました。
ログをみると、イメージを Get できない内容のエラーが出力されています。

生成が失敗

しかし、変数のオーバーライド値には大阪リージョンの値を入力しています。Github のコードを編集して Schematicsワークスペースを更新してみましたが、同様のエラーで失敗しました。
プラン適用時に環境変数が残ってしまっているのかも?と考え、新たに大阪リージョンの用の Schematicsワークスペースを作成し、変数は大阪リージョンの値を登録しました。

大阪リージョンの用の Schematicsワークスペースを作成

プランの生成・適用を行ったところ、無事成功しました。
変数の値は間違っていないようです。

成功

大阪のワークスペースを確認すると、指定した構成で作成されていました。
Schematicsワークスペースはリージョン毎に分けた方が良いのかもしれません。

指定した構成で作成

以上で検証は完了です。

コード作成の経験がない私でも、Schematicsワークスペースから Power Virtual Server をプロビジョニングすることができました。
サンプルコードはカスタマイズや修正を行えば実行できたので、作業の難易度はそこまで高くありませんでした。

さいごに

いかがでしたでしょうか。

Schematicsワークスペースを利用して Power Virtual Server のプロビジョニング、構成変更、別環境へ同一構成のプロビジョニングを行いました。
コード作成はスキルが必要と思われる方も多いかと思いますが、サンプルコードが提供されているため初心者でも取り掛かりやすいと思います。

検証では1区画のみの作成でしたが、複数区画作成する場合は GUI で作業するよりもコードを定義し Schematicsワークスペースから実行した方が工数・ミスを削減できるのではと感じます。
また、ワークスペース上で変数のデフォルト値が保持されているため、デフォルト値に戻したい場合はクリック一つで設定を戻すことができ、デフォルト値がわからなくなるといったミスを防ぐことができます。

別環境へのプロビジョニングでは変数を上書きしてもプランを適用できなかったため、別リージョン専用のワークスペースを作成しました。
明らかな原因を突き止めることができなかったのですが、環境ごとに Schematicsワークスペースを分けた方が運用面では管理がしやすいですね。

また今回は検証しませんでしたが、ベータ版の Schematics Blueprints は定義したコードをモジュールとして取り扱い・組み合わせることで大規模環境をデプロイすることができる機能です。
例えば本番環境と同一構成を別リージョンに作成したい場合、通常は一つ一つリソースをプロビジョニングし別環境にも同じ作業を行います。
コードを定義し Schematics Blueprints を使用すればコードを組み合わせて環境をデプロイできるため、作業工数の削減が期待できます。

システムの構築は設計から始まり、構築、試験の実施、運用手順書の作成など多くの過程があり、長い時間と労力が必要です。
昨今 Schematics をはじめとする IaC の実現ツールが徐々に広まりつつありますが、これからは従来の構築作業がコードとツールを利用した作業や運用に移行していくかもしれません。

最新情報

2023年8月23日に Terraform バージョン0.x が2023年9月末で営業活動終了、2024年9月末にサポート終了されることが発表されました。
既存でバージョン0.xをご利用されている場合は2024年9月末までにバージョン1.x以上にアップグレードする必要があります。

Schematics に限らず、IBM Cloudサービスの営業活動終了/サポート終了などは定期的に発表されますので、留意してご利用いただくことが重要です。

お問い合わせ

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

エヌアイシー・パートナーズ株式会社
E-Mail:nicp_support@NIandC.co.jp

 

その他の記事

2025年10月10日

現地からお届け!【参加レポート】IBM TechXchange 2025 Orlando

公開日:2025-10-10 こんにちは。 現在エヌアイシー・パートナーズ 技術企画本部のメンバーで、アメリカのオーランドで開催されている「IBM TechXchange 2025」に参加しています。 (現地時間:2025年10月9日、日本時間:2025年10月10日時点) 本記事では 現地からの速報 として、このイベントの概要や見どころ、最新情報をお伝えいたします。 目次 イベント概要 IBM Techxchange 2025 主要メッセージ - 1. Anthropicとのパートナーシップ発表 - 2. コード開発AI Agent「Project Bob」 - 3. AI基盤のための「Project Infragraph」 AI Accelerator “Spyre” Observability さいごに お問い合わせ イベント概要 IBM TechXchange は世界各国のIBMファンが集う年に1度の技術者向けイベントで、今年は3回目となりました。 年々規模も参加者も拡大しており、IBM TechXchange 2025 では、1,800以上の技術者向けセッションがあり、その中で400以上のハンズオンラボやデモが展開されています。 今年はアメリカのフロリダ州にあるオーランドの Orange Country Convention Center にて10月6日から10月9日の4日間で開催中で、日本から100名近くの方々が参加しています。 今年のテーマは「we are GO / Explore Build Launch 」です。 IBM Techxchange 2025 主要メッセージ TechXchange 2025の基調講演では、AIエージェントを活用・展開するために必要となる4つの要素を紹介していました。 この4つの要素のうちEcosystem・Developer Tools・AI infrastructure managementについてお伝えします。 Ecosystem IBMが単独でAIエージェントを開発・展開するのではなくパートナーシップやIBMパートナーがAIエージェントを開発・運用することでOpenな展開をしていくという方針となります。 この方針を実現するためにAgent Connectプログラムを展開しており、多数のAIエージェントを早期に提供することを目指しています。 Developer Tools Developer Toolsとしてドメインエージェントの提供があります。 ドメインエージェントとは、業務特化型のエージェントを指します。例えば購買業務に特化したエージェントであったり、人事業務に特化したエージェントです。 AI infrastructure management AIを利用する上で必要となる基盤の管理を指します。これを実現するためにProject “Infragraph” というプロジェクトでソリューション提供を目指しています。   他にも、TechXchangeでは様々な新しい発表がありました。その発表の中から今後大注目となる3点について共有します。 1.  Anthropicとのパートナーシップ発表 既に日本でもニュースとなっているので認識されている方も多いと思いますが、Anthropicとのパートナーシップの発表がありました。 IBMはAIのガバナンス、セキュリティ、オブザーバビリティ分野でソリューションを提供しており、これがIBMの強みとなっています。Anthropicとの協業は、この強みを背景とした補完的なパートナーシップであると思われます。 このパートナーシップの目的は、LLMであるClaudeをIBMソリューションに組み込むことだけではありません。企業ユースでAIエージェントを開発・運用する時に検討が必要となる要素を体系化した「Architecting secure enterprise AI agents with MCP」をIBMが作成し、Anthropicがそれを検証する協業も行っています。 このガイドを参照してAIエージェントを開発することで、今後拡大が見込まれるAIエージェントを安全かつ安心して活用できるベースとすることができます。 2.  コード開発AI Agent「Project Bob」 統合開発環境(IDE)をエージェント型で提供する「Project Bob」が発表されました。 このニュースと共にかわいらしいマスコットのBobもお披露目になりました。 Project Bobを利用することで、コードをバージョンアップするための設計、テストの自動化、本番運用、コンプライアンス維持と開発のライフサイクル全体をAIエージェントを用いて自動化することができます。 Project Bobは、発表と共にPublicプレビュー段階に入りました。 開発者のワークフロー負荷を軽減してくれるProject Bob の提供開始が楽しみですね! 3.  AI基盤のための「Project Infragraph」 HashiCorpが主体となって開発している基盤自動化のためのプロジェクトです。 詳細は不明ですが、以下の実現を目指しています。 サイロを横断した統合インサイト クラウドインフラストラクチャーリソースを単一のビューで把握できます。 実用的なインテリジェンス コストの最適化、ガバナンスの強化、リスクの軽減に役立つコンテキストを提供します。 自動化の基盤 インフラストラクチャークラウド全体にわたる、次世代のインテリジェントなAI駆動型運用を実現します。 AI Accelerator “Spyre” IBM Spyre Accelerator はエンタープライズワークフロー向けのAIソリューションを提供し、AIサービスを簡単にインストール・構成・移動できる統合された推論プラットフォームとアクセラレートされたインフラストラクチャーを備えています。 Spyreのユースケースとしては、IT運用、開発、ERP、銀行・金融、ヘルスケア、保険、公共分野など、様々な業界でデジタルアシスタント、データ・コンテンツ管理、ディーププロセス統合などのプリビルドAIサービスを提供します。 Observability AI Firstとして各種機能提供、Intelligent、Integrated experienceとしてUIやDataレイヤーの統合がされるという情報が共有されました。 またAIキーワードとしてはLLMやAIのワークロードをInstanaでObservabilityする機能が2025 4Qのロードマップとして示されました。 さいごに 2日目の夜のお楽しみとして「Evening Entertainment at Universal Orlando Resorts Islands of Adventure」が開催されました。 世界各国から集まった技術者とともに過ごした Universal Orlando Resorts Islands of Adventure での一夜は格別な体験となりました。 さて、本日、来年のTechXchangeがアメリカ ジョージア州の「アトランタ」で開催されることが正式に発表されました。 次回のイベントにも期待が高まります! お問い合わせ エヌアイシー・パートナーズ株式会社 技術企画本部 E-mail:voice_partners@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年10月06日

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

公開日:2025-10-06 こんにちは。てくさぽブログメンバーの高村です。 2025年9月24日に第2回「watsonx Orchestrate テクニカルワークショップ」を開催しました。 第一回(7月開催)では、アップデートされた watsonx Orchestrate の基本的な使い方をご紹介しました。詳しくは、ブログ記事「【イベントレポート】watsonx Orchestrate テクニカルワークショップ第一回 開催しました」をご覧ください。 今回の第二回では、Agent Development Kit(以下、ADK) を用いた、Pythonによるエージェント開発のハンズオンを実施しました。 また、第1回同様、ハンズオン終了後にはグループに分かれてワークショップを行いました。参加者様同士が、日々の業務で抱えている課題を洗い出し、AIを活用して解決できる方法についてディスカッションし、その結果を発表する時間を設けました。参加者同士のコミュニケーションも活発に行われ、有意義な時間となりました。 それでは、当日の様子をご紹介します。 目次 watsonx Orchestrate概要 watsonx Orchestrateハンズオン- Agent Development Kitを用いたエージェント開発 ワークショップ まとめ お問い合わせ watsonx Orchestrate概要 このセッションでは、watsonx Orchestrate概要、ユースケース、ご提供プランをご紹介しました。 watsonx Orchestrateでは、ユーザーの目的や業務に合わせたエージェント開発が可能です。開発方法としては、ローコード と コーディング の両方が提供されており、ニーズに応じて選択できます。 今回のハンズオンで使用して頂く Agent Development Kit(ADK) および watsonx Orchestrate Developer Edition は、コーディングによるエージェントやツールの開発を支援するための環境です。Toolは Python または OpenAPI 定義によって開発でき、高度な実装やデバッグも柔軟に行えます。 watsonx Orchestrateのご提供プランは、Essentials Agentic、Standard Agentic、Premium Agenticの3種類があり、特に最近ご質問の多いEssentialsとStandardの規模感と費用感についても目安をご紹介させて頂きました。 watsonx Orchestrateハンズオン – Agent Development Kitを用いたエージェント開発 ハンズオンでは、ADK と watsonx Orchestrate Developer Edition を使い、実際にエージェント開発を体験していただきました。 参加者には事前に IBM Technology Zone(以下、Techzone) の ADK 環境を予約していただき、VSCode がインストールされた環境で開発を進めました。VSCode上でADKを利用し、完成したエージェントを watsonx Orchestrate Developer Edition にインポートして動作確認を行う流れです。 実施内容 Tool・Agent の作成 watsonx Orchestrate Developer Editionで Agent の動作確認 Knowledge を使用する Agent の作成 内部基盤モデルの追加 Flow の作成 実施した内容の中でTool、エージェントの作成とwatsonx Orchestrate Developer Editionで エージェントの動作確認について簡単にご紹介します。 作成して頂いたエージェントは、入力フレーズを造語「ザルガリ語」に翻訳し、その文字数をカウントした後、ジョークを回答します。 まずADKから①Tool(translateToZargari)と②Tool(word_length)をPythonで定義してwatsonx Orchestrate Developer Editionへインポートします。下記画面ショットのサンプルはtool() 関数を利用することでエージェントが使用可能なツールとして定義します。 次にエージェントをyaml形式で定義し、watsonx Orchestrate Developer Editionへインポートします。下記がエージェントのサンプルです。エージェントのスタイル、基盤モデルの指定、振る舞い、使用するtoolを定義します。 最後にwatsonx Orchestrate Developer Editionでエージェントの動作確認を行います。下記画面ショットがwatsonx Orchestrate Developer Editionのホーム画面です。watsonx Orchestrate Developer Editionは本製品とほぼ同等の機能を利用することができます。 Previewでエージェントの動作確認を行い、想定通り入力フレーズがザルガリ語に翻訳され、文字数をカウント、ジョークが生成されることを確認しました。 Tool、エージェントの作成、エージェントの動作確認のハンズオンは以上です。その他のハンズオンについて詳しく知りたい方は、ブログの最後に記載している「お問い合わせ」までお気軽にご連絡ください。 ワークショップ ワークショップでは2チームにわかれて日々の業務やお客さまの業務で困っていることを洗い出し、AIでの解決方法を考えるブレインストーミングを行いました。 以下のステップで進行しました 個人作業:「時間がかかっていること」「困っていること」「やりたいのにできていないこと」を3つ挙げ、ポストイットに記入し、AIでの解決可能性を考える チーム作業:模造紙にポストイットを貼りながらカテゴリー分け、AI活用のアイデアをディスカッション。 チームで話あったことを発表 当日挙がった意見を抜粋してご紹介します。 「検索業務に関して検索結果が多すぎて回答にたどり着くまで時間がかかる」 「顧客からの質問に対する回答探しに手間取る」 「同じ質問に対して効率化できないか」 AI活用について RAGを取り入れる方法 予め質問と回答を用意しチャットボットで回答させるなど工夫が必要 といった意見が出ました。 その他、コード開発でのレビューや修正にAIを活用すること、複雑な社内手続きをスムーズにするためにAIエージェントを導入する可能性についても、意見が挙がりました。 AIでどのように解決できるか、具体的な方法まで議論が進んでいない項目もありましたが、参加者同士で現在の課題や困りごとを共有いただけたことは大きな収穫でした。 今回の意見交換が、社内の「クライアントゼロ化」や日々の業務改善の検討につながる一歩となり、今後の改善活動に活かしていただけると幸いです。 まとめ 第2回 watsonx Orchestrate テクニカルワークショップ では、ADKと watsonx Orchestrate Developer Edition を用いてコードベースのエージェント開発を体験していただきました。 後半のワークショップでは、日々の業務課題から、AI活用について活発な意見交換が行われ、技術的な学びと参加者間の交流の場となりました。 今後も、製品を実際に体験できるハンズオンと、参加者同士が交流・情報共有を行えるワークショップを継続的に開催してまいります。次回もぜひご参加いただけますと幸いです。 お問い合わせ エヌアイシー・パートナーズ株式会社技術企画本部E-mail:voice_partners@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年09月30日

日本アイ・ビー・エム様主催「Women in Tech Japan 夏の会」イベント開催レポート

公開日:2025-09-30 こんにちは。エヌアイシー・パートナーズ 村上です。 2025年8月20日に、IBM様が主催されている女性エンジニア中心のコミュニティ 「Women in Tech Japan」の夏の会のイベントが開催され、弊社エヌアイシー・パートナーズは会場提供(@NI+Cガーデン)という形でご協力させていただきました。 本ブログでは、イベントの様子とそこで感じ得た学びについてご報告させていただきます。 目次 Women Tech in Japanについて 「キャリアを考える」セッションから得た学び 夏のビール会! 今後の活動 さいごに お問い合わせ Women Tech in Japanについて 「Women in Tech Japan」は、2024年10月にラスベガスで開催された「TechXchange」をきっかけに発足しました。 女性エンジニアが、他社の女性エンジニアとキャリアやワークライフバランスについて語り合うことを目的としています。 日本では海外に比べてまだまだ女性エンジニアが少なく、働き方やキャリアプランを参考にするロールモデルが少ない状況ですが、女性エンジニアが輝いているIBM様がこのコミュニティをリードしてくださり、沢山の発見や学びを培う機会を作ってくださっています。 Women in Tech Japanは男性の参加も大歓迎とされていらっしゃいます。 夏の会のイベント当日は、性別や年齢、所属企業を問わず、多様なバックグラウンドを持つ方々が参加されました。 「キャリアを考える」セッションから得た学び イベントのハイライトの一つは、「キャリアを考える」をテーマにした日本アイ・ビー・エム 大久保そのみ様のセッションでした。 大久保様は国家資格キャリアコンサルトとしても活躍していらっしゃいます。 セッションから得る学びは人によって違うと思いますが、私は下記のような学びを得ましたのでご紹介です。 キャリアの選択肢は一つではなく、個々のライフスタイルや目標に合わせて柔軟に設計していくことが大切- 5年後の私が当たり前のようにイメージできなくてもいい(来年の自分を思い描く) 限られた時間をどう有効に使うかを考え実践する - 例えば・・「やりたいと思っているのに出来ていないこと」に踏み出す! 毎日をできるだけポジティブエネルギーで満たしてみたいと思うようになれた - ネガティブなことへの向き合い方を見直す 参加者の皆さまとは、その後の懇親会で本セッションの意見交換をさせていただくことができました。 大久保様、大変有意義なセッションをありがとうございました! 夏のビール会! 夕方からはNI+Cガーデンに設置しているビールサーバーをご利用いただき「夏のビール会」と称して参加者の皆さんと懇親会を行いました。 美味しい食事とクラフトビールを囲み、参加者の皆さんの会話も弾み、和やかな雰囲気となりました。 セッションでは聞けなかったキャリアの話や、日頃のちょっとした悩みを相談したりと、あっという間に時間が過ぎていきました。 このような素晴らしい機会を企画してくださった日本アイ・ビー・エムの皆様に、心より感謝申し上げます。 今後の活動 「Women tech in Japan」は、今後は下記のような継続的な活動が予定されています。 TechXchange フロリダ・オーランド にて「Empowering Women in Tech with AI」セッション(2025年10月7日)IBM TechXchange 2025 We are GO/(IBMサイト) TechXchange Japan での活動紹介(2025月12月3日)IBM TechXchange Summit Japan 2025(IBMサイト) さいごに 昨今、IT業界に限らず、共通のカテゴリーを持つ人々が集まるコミュニティが数多く存在しています。 初めてのコミュニティへの参加には、誰もが多少なりともハードルの高さを感じるかもしれません。 私自身もそうでしたが、もし少しでも興味があるなら、ぜひ一歩踏み出して参加してみることをお勧めします。 きっと、新しい出会いや、新しい発見があり、多くの経験を得ることができると思います! この度は、IBM様が主催された素晴らしいイベントに貢献できたことを、大変光栄に思います。 弊社としましては、今後もこのようなコミュニティの活動に積極的に参加・支援させていただき、女性エンジニアがさらに活躍できる社会の実現に貢献していきたいと考えております。 お問い合わせ エヌアイシー・パートナーズ株式会社E-mail:voice_partners@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年09月30日

【てくさぽBLOG】InstanaとTurbonomicを連携したリソース最適化検証

公開日:2025-09-30 こんにちは、てくさぽBLOGメンバーの和田です。 昨今、システムの複雑化やハイブリッドクラウドなど複数環境の運用などで運用にかかる負荷が増加しております。しかし従来の運用管理ツールだけで解決するのは難しくなってきています。そんな中、運用の高度化・効率化のため、アプリケーションパフォーマンス管理、アプリケーション・リソース管理、そしてAIの技術を採用した「AIOps」製品が注目を集めています。 弊社はIBMのAIOps製品の拡販に注力しており、かつ、私たち自身で製品のことを知りパートナー様に商材をご紹介したいと考えていることより、IBMのAIOps製品を組み合わせて社内検証を実施しましたので、今回から3回にわけてご紹介したいと思います。 まず1回目はInstanaとTurbonomicを組み合わせてリソース最適化の検証を実施しましたので、その内容と結果、苦労した点などをご紹介します。 目次 InstanaとTurbonomicの概要と連携させることで可能になること 検証内容 検証結果 苦労した点 さいごに お問い合わせ InstanaとTurbonomicの概要と連携させることで可能になること Instanaは、アプリケーションモニタリングの分野で高い評価を得ているツールです。 アプリケーション呼び出し時のコールリスエストのトレーシングやCPU、メモリといったメトリクス情報収集を通じて、アプリケーション・インフラの状況をリアルタイムで可視化します。特に自動化された監視設定や障害発生した際の関連情報を分析し一目で原因を特定できます。 Turbonomicは、インフラリソースおよびアプリケーションの効率的な配置・利用を最適化するプラットフォームです。 リソースの過剰利用や不足をリアルタイムで把握し、必要な改善アクションを推奨または自動実行します。 詳細な機能についてはそれぞれBLOGで紹介しておりますので下記をご確認ください。 Instana Turbonomic 連携させることで得られる効果 InstanaとTurbonomicを連携させることで、以下の効果が得られます。 リアルタイムモニタリングの強化: Instanaを通して詳細なリソース使用状況を把握し、Turbonomicがそれを基に適切なリソース割当を推奨。 自動リソース最適化: 必要に応じてTurbonomicが推奨するアクションをInstanaから直接実行可能。 アプリケーションとインフラの統合可視化: 両製品の連携により、アプリケーションのパフォーマンスだけでなく、それを支えるインフラ(仮想マシン、コンテナ、クラウド)の状態までを統合的に可視化できます。 検証内容 今回の検証では、以下の環境・シナリオを設定しました。 環境構成 Turbonomic: IBM Cloudのベアメタルサーバ(Hyper-V)上にデプロイ。 本環境で使用するAWSアカウントをターゲット追加。 Instana: SaaS形式で利用。 監視対象: AWS EC2インスタンスA(instana03、インスタンスタイプ:m7a.medium)にInstana agent導入。 アプリケーション: AWS EC2インスタンスAにサンプルwebアプリケーションのRobot Shopを導入。 Instana上ではInstana03_robot-shopとして登録。 【参照】GitHub 負荷ツール: AWS EC2インスタンスBにJMeterを導入。構成については下記の通り。 検証内容 EC2インスタンスBのJmeterからEC2インスタンスA上のアプリケーションへ同時多発webアクセスを行いリソース使用率の負荷をかける。 負荷は下記図の通りスレッド数5000、ramp-up期間は1秒、持続時間は3600で設定 Turbonomicがリソース使用率を検知し、インスタンスタイプ変更のアクションが推奨されることを確認する。 Instanaで推奨されるアクションを実行し、実際にEC2インスタンスAのリソースが拡張されるかを確認をする。 インスタンスタイプ変更後も同量の負荷をかけ続けリソース使用率が問題ないか確認する。 検証結果 検証開始前のTurbonomicの状況です。 左側の仮想マシンの箇所は緑となっておりインスタンスタイプは赤枠で囲われているm7a.mediumとなっています。 また、Instana上ではインスタンスタイプ変更のアクションは表示されていません。 この状態から負荷を掛けていきます。 負荷を掛けていくことで、下記図の通り、検証開始前は安定したリソース使用率でしたが、負荷をかけることで仮想CPUや仮想メモリへの負荷を確認できます。 また、点線で囲んでいる部分についてはTurbonomicが推測する今後のリソース使用率になります。左側の仮想マシンという部分についても赤くなっております。 Turbonomicが不足するリソースを検出し、最適なインスタンスへの変更を推奨しています。 Turbonomicで推奨されたアクションがInstanaで推奨アクションとして表示されます。 Instana上でアクションを実行します。 実行後Turbonomic上でインスタンスタイプが変更されていることを確認できます。 また、インスタンスタイプ変更後も負荷を掛け続けた結果、インスタンスタイプ変更後にリソース使用率が低下していることを確認できました。 ※★のタイミングでインスタンスタイプを変更しています。 この結果、リソースの過不足を迅速に解消し、安定したアプリケーション運用が可能であることを確認しました。 検証の結果以下を確認することができました。 負荷シミュレーション時、EC2インスタンスAのCPU使用率やメモリ使用率の上昇を可視化。 InstanaにTurbonomicの推奨アクションが表示され、Instana上でアクションを実行することでインスタンスタイプが変更され、負荷が下がる過程を可視化。 インスタンスタイプ変更後も同量の負荷をかけつづけリソース使用率が問題ないことを確認。 苦労した点 今回の検証を進める中で以下のような課題に直面しました。 TurbonomicがデプロイされているISOイメージから仮想サーバを作成する方式なのですが、Hyper-V用ISOイメージがなく、VMware用のISOイメージから作成しようとしても失敗したためIBMサポートへ問い合わせを行いました。 仮想サーバをデプロイしたあとTurbonomicコンソールへアクセスしようとしたところ、Hyper-V内のネットワーク設定が誤っておりインターネットからアクセスができませんでした。 TurbonomicからAWSアカウントのターゲット追加する際にDNS設定が正しく設定されていなかったため、正常に追加登録が完了しませんでした。 InstanaとTurbonomicをスムーズに連携させるための設定確認とチューニングに時間を要しました。特にInstana側からTurbonomic側への設定追加の際に、設定項目がドキュメントからは読み取れず、設定内容が間違っていたためサポートへ問い合わせを行い解決しました。 負荷テストを行う際に最初はWebアプリケーションに付随するスクリプトで実施していましたが、インスタンスタイプ変更に伴う再起動が発生するためJMeterで実行するワークロード設計に工夫が必要でした。 Turbonomic上で推奨アクションがあらかじめ表示されている場合、負荷をかけることで推奨アクションが更新されると想定していましたが、更新されなかったため想定していた挙動となりませんでした。 インスタンスAに負荷を与えても推奨アクションが表示されなかったため、ポリシーの設定変更に時間を要した。特に観測期間を短くし、積極性をあげることで短い期間内での負荷に敏感になるように設定しました。 観測期間の最低値が7日間のため、一度推奨アクションが表示されるまで負荷を掛け続けインスタンスタイプを変更しないでおくと、推奨アクションが継続して表示されてしまい、推奨アクションが表示されなくなるまで時間がかかってしまいました。 さいごに InstanaとTurbonomicを連携させ、AWS EC2インスタンスのリソース最適化の自動化を検証しました。 今回の検証ではTurbonomicをオンプレミスに導入しましたが、SaaSでの提供もありますので今回の検証で苦労したTurbonomicの構築といった手間を省略することも可能です。 InstanaとTurbonomicを連携させることで、操作時にコンソールを移動せずとも実行は一つのコンソールで実施できるようになります。リソース不足の解消やアプリケーション性能の安定化とともに、現場での手動作業を削減できによる運用の高度化・効率化が期待されます。 お問い合わせ エヌアイシー・パートナーズ株式会社 E-mail:voice_partners@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