SlideShare a Scribd company logo
「書くべきは手順書ではなく
スクリプトです。」
定型業務をスクリプトで自動化して楽をしよう。
OSC2020 Online Fall
2020/10/23
有限会社サンビットシステム
佐々木伸幸
2
きょうお話すること
●
やらなきゃいけないことをやる
●
LOOP
– 課題はなにか
– 効率的な解決手順を考える
– 前の手順とつなげる
●
できた手順を実行する
●
それはスクリプトにまとめよう
●
具体的にどうやって考えればいいの?
3
やらなきゃいけないこと
●
XenServerベースのCloudStackで管理さ
れている200台のVMを
●
新しく作成したXenServerクラスタに移行
する。
4
やることには条件がある
●
VM1台について
●
ブートディスクは最大100GB
●
追加ディスクが最大5台、最大容量は1TB/台
●
メモリ構成、CPU構成は変更しない
– 1CPU+3GB, 3CPU+8GB, 10CPU+16GBの3種
●
DNS名、MAC、IPは変更しない
– CloudStack環境のネットワーク構成を移行しない
と、複数ホスト構成で動作していたものが動作し
なくなる可能性大
5
やることには条件がある
●
CloudStack環境について
●
WEBアクセス、APIアクセスは新しい環境の
Linuxから可能(但し許可されるのは1台)
●
ストレージは直接は見えないがCloudStack環
境ではLinuxからマウントしているらしい
(あとで効いてきます...)
●
VMのブートディスクをどうやって取り出すか
は、この時点では謎
●
VMのディスクイメージはVHD形式という噂
6
やることには条件がある
●
新しいXenServer環境について
●
XenServer7.6でクラスタ構成
●
200台のVMを十分収容可能なリソース
●
ストレージ回線帯域は25Gbps
●
CloudStackのホストへアクセスする回線帯域
は1Gbps。アクセスできるのは移行用サーバ1
台。
7
つまりこういうこと
VMを200台移行したい
8
CloudStack環境にあって
XenServer環境にないこと
●
テナント/仮想ルータ
●
グループに割り当てるリソース単位の概念
●
テナント毎に仮想ルータ
●
VLAN, DHCP, DNSなどは仮想ルータが管理
●
XenServerにはテナントの概念がない
●
移行する環境で何らかの形で作成が必要
– G/W装置でVLAN,DHCPを事前に設定
●
MACを変えなければIPは問題なし
– Xen環境のVLANは移行時に作成が必要
9
つまりこうしなきゃいけない
新しくVLANを作り
VMを結びつける必要CloudStackには
当然ある環境
10
最初の移行実験
●
GUIでCloudStackからVMを引っ張り出す
●
WEBインタフェースにあるもの
– テンプレートの作成
– テンプレートのエクスポート
●
ベースがXenなんだからxva形式でエクス
ポートできるんじゃないの?
●
CloudStackからだとできないらしい
●
テンプレートってなんだ?
11
移行を試しているのはここ
12
移行を試す
●
GUIで操作して移行する手順を考える
(概要を把握することが目標)
●
WEB-UIでCloudStackのVMを停止する
●
VMをテンプレート化する
●
テンプレートをエクスポートする
●
移行先のXenCenterでインポートする
13
試行の検討
●
VMはテンプレート化するとVMでなくなる
●
「テンプレート変換」でVMそのものでない
●
ダウンロードがむちゃくちゃ遅い
●
100GBで2時間半。1TBだと26時間!!
– 200台全部に1TBついてたら200日以上なの?
●
WEBサーバからダウンロードするのが遅い
– 回線ではなく、WEBサーバが遅いらしい
●
MACが変わる
●
全部移行してから手で変えるのかぁ...
14
もしこれを手順書にしていたら?
●
やることを手順に書くことはできる
●
ログインとか、この画面でこれを押せも含む
●
時間がかかりすぎ/待ち時間が多い
●
1台ずつしかできない
●
もっと効率的な方法はないものか??
●
すべての手順を操作しなければならない
●
間違う確率が高い、いや間違うでしょ
15
移行を試す(2)
●
GUIを操作しない方法を考える
(システムができることの調査)
●
CloudStack API
– テンプレート化以外にvhdをそのまま外部に出せる
機能がある
– コマンド発行して結果を取得できる
●
XenServer
– XML-APIがある
– xeコマンドでも全ての操作ができる
– VMの作成とデバイスの作成を独立でできる
●
後からVMとデバイスを結びつける
16
kick_api.sh
●
CloudStack APIを実行するスクリプト
●
例えばlistVirtualMachine
root # ./kick_api.sh command=listVirtualMachine zoneid=1 id=1000
<?xml version="1.0" encoding="ISO-8859-1"?>
<listvirtualmachinesresponse cloud-stack-
version="2.2.15.20121003223903">
<count>425</count>
<virtualmachine>
<id>1000</id>
<name>vm0014</name>
<displayname>vm0014</displayname>
<account>j21796</account>
<domainid>1</domainid>
<domain>ROOT</domain>
<created>2016-01-29T13:55:34+0900</created>
<state>Running</state>
...
17
CloudStackAPI
listVirtualMachineの情報
id VMのID
name VMの名前
state VMの状態(Runnning, Halted)
account VMの所有者ID
cpunumber 割当CPU数
memory 割当メモリ数(MiB)
ipaddress IPアドレス NICごとにある
netmask ネットマスク
gateway ゲートウエイ
networkid ネットワークのID
macaddress NICのMACアドレス
ディスクに関する情報がないですね。listVolumesに情報があるらしい
18
CloudStackAPI
listVolumesの情報
id volumeのID
name volumeの名前
type ディスクの種別(ROOT,Data)
deviceid デバイス番号 ≒ 接続順序
virtualmachineid 結びついているVMのID
vmstate 結びついているVMの状態
storage このvolumeがあるストレージ名
size サイズ(B)
state volumeの状態
(Allocated,Ready)
ディスク(volume)側に、結びついているVMのIDが入っている
複数ディスクがあっても結びつけやすい構造
19
listの結果こんな雰囲気
20
APIから取得した有効な情報
●
VMのCPU数、メモリ数
●
VMのNIC情報(MAC,IP)
●
VMに紐づくディスクファイル
●
ディスクファイルのメタ情報
●
アロケートサイズ、種別、接続順序
●
ファイル名、格納場所パス名の一部
●
ディスクのデータはどう取り出す?
21
CloudStackAPI
extractVolume
●
指定ディスクを外部に出せる形にする
●
事前にVMは止めておきます。
root # ./kick_api.sh command=extractVolume zoneid=1 id=2019
mode="HTTP_DOWNLOAD"
<?xml version="1.0" encoding="ISO-8859-1"?>
<extractVolumeresponse cloud-stack-
version="2.2.15.20121003223903">
<jobid>425</jobid>
<jobstatus>0</jobstatus>
…
</extractVolumeresponse>
●
ん?すぐ終わる
22
CloudStackAPI
AsyncJobってなに?
●
時間がかかる処理はjobidを返してすぐ終
わる。処理は非同期で動作している。
root # ./kick_api.sh command=extractVolume zoneid=1 id=2019
<?xml version="1.0" encoding="ISO-8859-1"?>
<extractVolumeresponse cloud-stack-
version="2.2.15.20121003223903">
<jobid>425</jobid>
<jobstatus>0</jobstatus>
●
非同期処理の終了はコマンドで問い合わせ
root # ./kick_api.sh command=queryAsyncJobResult jobid=425
<?xml version="1.0" encoding="ISO-8859-1"?>
<queryAsyncJobResultresponse cloud-stack-
version="2.2.15.20121003223903">
<jobid>425</jobid>
<jobstatus>1</jobstatus> <<ここが1になったら終了している
23
extractVolumeの終了結果
<?xml version="1.0" encoding="ISO-8859-1"?>
<extractVolumeresponse cloud-stack-
version="2.2.15.20121003223903">
<jobid>425</jobid>
<jobstatus>1</jobstatus>
<jobresult>
<volume>
<id>2019</id>
...
<state>DOWNLOAD_URL_CREATED</state>
…
<url>http:%2F%2F192.168.128.10%2Fuserdata%2F65ae79b7-c1d3-
49f7-8c85-2611e94ff1d1.vhd</url>
...
●
ダウンロード用のURLが返される
●
でもHTTPは遅いことが判明している
24
ファイルはどこにある?
●
移行前の管理用Linuxからストレージを
NFSマウントしているらしい
●
見せてもらうと、Primaryにあった!
●
/マウントポイント/volumes/ボリュームID/
uuid形式のファイル名.vhd
●
このファイルは24時間後に削除される設定
25
追加ディスクはどこにある?
●
移行前の管理用Linuxからストレージを
NFSマウントしているらしい
●
見せてもらうと、Secondaryに見えている
●
/マウントポイント/ディスククラスタ名/uuid
形式のファイル名.vhd
●
このファイルは実態がそのまま見えている
●
このストレージをXenServerから直接見れ
れば、HTTP転送をせずにインポートでき
そうなんだけどな...
26
クラスタ?
●
ストレージがクラスタ運用されていて、ど
のクラスタにどのボリュームを格納するの
か、をCloudStackが管理してるらしい
●
見る方法はあるのか
>mysqlに格納されている
– volumeid,クラスタ名,ファイル名がある
>ディスクファイルのパスを特定可能
●
物理ファイルが把握できたのでディスク
データを拾える目処は立った
– この時点ではXenServer側にディスクファイルを
転送する必要はある
27
ちなみにここまでの状態
extractVolumeしたあと
Linux移行用サーバに転送
Linux移行用サーバを
XenServerから
NFSマウントで参照
28
ネットワーク
●
移行先には仮想ルータがない
●
移行元VMのIPアドレス/MACは変えられない
●
VMが所属するネットワークとVLANは新規に
設計して実装するしかない
– VMとVLANの関係表となるはず
●
新たな設計情報を参照してXenServerにVLAN
を作成しておく
●
移行するときそのVLANにVMを結びつける
29
XenServerの操作
●
xapi
●
XenServerのapi
●
xeコマンドで操作可能
●
Nativeなapi操作ツールもあるようだが、それ
を習得するよりはxeコマンドのほうが資料も
多い
●
パスフレーズなしssh鍵認証で移行用サー
バからxeコマンドをリモート操作する
30
VMを作る
●
xe vm-install
●
返されるuuidがVMの識別子になる
[root #~] ssh root@192.168.10.20 xe vm-install 
new-name-label=vm0001 
sr-uuid=e3532491-ecc2-2ae6-a59f-88eddedb5dff 
memory=3221225472
template=552bce37-51b2-445d-84f2-5f33fa112d7e
3dc3e0dd-0309-85d9-84a8-88ffb76340bf
[root #~]
このあとの操作でVMを指定
するために必要
31
VMのリソースを設定する
●
xe vm-param-set
●
CPU数など、必要なパラメータを設定する
[root #~] ssh root@192.168.10.20 xe vm-param-set 
uuid=3dc3e0dd-0309-85d9-84a8-88ffb76340bf 
VCPUs-max=1
[root #~] ssh root@192.168.10.20 xe vm-param-set 
uuid=3dc3e0dd-0309-85d9-84a8-88ffb76340bf 
VCPUs-at-startup=1
32
VMのディスクを設定する
●
xe vdi-create, vbd-create
●
ディスクイメージを作成し、VMと紐付ける
[root #~] ssh root@192.168.10.20 xe vdi-create 
name-label=ROOT-8239 
sr-uuid=e3532491-ecc2-2ae6-a59f-88eddedb5dff 
virtual-size=107374182400 
device=0
eb2a2624-506b-44ca-a753-509030ce8ea4
[root #~] ssh root@192.168.10.20 xe vbd-create 
vm-uuid=3dc3e0dd-0309-85d9-84a8-88ffb76340bf 
vdi-uuid=eb2a2624-506b-44ca-a753-509030ce8ea4 
device=0 
type=Disk
400c035b-b830-7d8c-d091-c0f839de40e4
イメージを指定
するために必要
VBDはイメージと
VMを紐付ける
33
ディスクイメージを移行する
●
xe vdi-import
●
vdiにディスクイメージをインポートする
[root #~] ssh root@192.168.10.20 xe vdi-import 
uuid=eb2a2624-506b-44ca-a753-509030ce8ea4 
filename=/mount/280981ec-ad6e-4a1c-8554-4d05d39c3fa6.vhd 
format=vhd
インポート先のVDIextractVolumeした
イメージファイル
デフォルト値がvhdでない
ので指定しないと壊れます
34
VMが接続するネットワーク
●
xe network-create, pool-vlan-create
●
ネットワークを作りVLANに結びつける
[root #~] ssh root@192.168.10.20 xe network-create 
name-label=vlan1001
706b42d2-2834-11a3-54b6-c63aa4f257a0
[root #~] ssh root@192.168.10.20 xe pool-vlan-create 
network-uuid=706b42d2-2834-11a3-54b6-c63aa4f257a0 
pif-uuid=69cdcbc0-7397-4b85-39a4-a97169057ba5 
vlan=vlan1001
6b4c91c9-0b95-53d7-2cf8-879fc6591899
635cf8e1-ce7d-824e-9de6-179c91876ec9
df883341-a4fc-f7a4-2f32-13e67c3ea5cb
networkを指定
するために必要
networkを載せる
I/Fのuuidは先に
調べておく必要
poolのホスト毎
に作られる
35
VMが接続するネットワーク
●
xe vif-create
●
VMとネットワークを紐付ける
[root #~] ssh root@192.168.10.20 xe vif-create 
vm-uuid=3dc3e0dd-0309-85d9-84a8-88ffb76340bf 
network-uuid=706b42d2-2834-11a3-54b6-c63aa4f257a0 
mac=02:00:0d:6e:00:01 
device=0
installしたVM
元のMAC
作成したnetwork
36
手順のおさらい:事前準備
●
CloudStack上のVMリストを得る
●
CloudStack上のvolumeリストを得る
●
CloudStack上のvolumeidとクラスタの関
係表を得る
●
移行対象VMリストを得る
●
移行対象VMのVLAN情報を得る
●
移行対象VMとVLAN情報、MAC,IPを紐付
ける
37
手順のおさらい: CloudStack
●
VMを停止する
●
extractVolumeでイメージファイルを作成
する
●
作成したイメージファイルをXenServerが
参照できるところに配置する
●
追加ディスクがあればそのイメージファイ
ルもXenServerが参照できるところに配置
する
38
手順のおさらい: XenServer
●
VMをinstallする
●
VMにCPUなどのパラメータを設定する
●
移行元と同じサイズのVDIを作成する
●
VDIとVMを結びつける
●
VDIに移行元のデータをインポートする
39
手順のおさらい: XenServer
●
Networkを作成する
●
VLANを作成する
●
VLANをPIF(物理I/F)と結びつける
●
VMにVIFを作成する
●
VIFとNetworkを結びつける
40
もしこれを手順書にしていたら?
●
事前準備だけで大きめの物語になる。
●
このXMLのこのタグのこの値で、あのXMLの
このタグが同じところを見て...
●
XenServerが動的作成するuuidを次の手順
でどう使用するかを記述する必要がある
●
GUIより手順は複雑&動的になった
●
そして手順を操作しなければならない
●
もう、間違わずにはいられない!
41
もしこれを手順書にしていたら?
●
並列作業が難しい
●
GUI環境よりはマシ
●
でも200台。人海戦術でやる?
●
まだ時間がかかる処理の待ち時間が多い
●
extractVolume+scpは100GBで約4時間
●
移行は毎日17:00以降翌日12:00まで
深夜作業かよ...
●
データが5TB(1TB×5)あるやつ無理ぢゃね?
42
ところで...
●
CloudStack側のイメージファイルを
移行用サーバにコピーしていましたね?
●
割と大きな課題(時間がかかる,容量不足)
●
交渉
– CloudStackのストレージを直接見せてよ
– HTTPやscpが遅いことは知ってるでしょ
– ちょっと線引いて設定変更してもらえれば
●
NFSマウント キタ――(゚∀゚)――!!
43
移行環境改善!
この線追加
CloudStackのストレージを
XenServerが直接NFS参照
44
ストレージが直接見えると...
●
XenServerがvdi-importするときに直接
ファイルを読み込める
– volumeがブートディスクの場合
primaryのvolumes/vmid/
extractVolumeのファイル名.vhd
– volumeが追加ディスクの場合
volumeidとクラスタの関係表を参照し、
secondaryの/クラスタ/uuid.vhd
●
事前準備でパスが作れる!
●
但しROOTディスクはextractVolumeで動的生
成になるのでファイル名が不明
45
そして速度比較
1GB線
HTTP_DOWNLOAD
移行ホスト仲介
10GB線
NFS直接参照
XenServer直接マウント
ROOT 100GB
extractVolume
50分 50分
ROOT 100GB
ファイル転送
約3時間半 不要
ROOT 100GB
XenServerへのイ
ンポート
約2時間 約1時間半
DATA 1TB
extractVolume
不要 不要
DATA 1TB
ファイル転送
約26時間 不要
DATA 1TB
XenServerへのイ
ンポート
未検証
(ファイル転送時間を見
て萎える)
約10時間
(並行インポート可能)
46
スクリプトを書こう!
●
できることはわかった
要するに検証したコマンドを並べればいい
●
事前準備する
– VM, volume, networkの対応表
●
CloudStackからVMを抜き出す
– ROOTディスクのextractVolume
●
XenServerにVMを作る
– CPU, メモリの設定
– VDI作成、Network作成
●
移行元のデータをVDIにインポートする
47
気をつけるポイント
●
どうやったら効率的にできるか
●
判っていることは先にデータ化する
– listVirtualMachinesなどは一度取ればよい
●
ファイル化しておくとどこでもデバッグできる
– 新しく設計するもの(この例ではNetwork)は先に
データ化できる
●
データ化されたものを使いやすくまとめる
– VMに紐づくディスクの順序とか
●
何度も処理されるものは部品として書く
●
あとは手順通りに書く
48
事前準備
●
volumeidのリストを作る
my $volfile = 'listVolumes.xml'; # 先に取得したvolume情報
my %volumes; # vol情報を格納するハッシュ
my $vols = XML::LibXML->load_xml(location => $volfile);
foreach my $v ($vols->findnodes('//volume')) {
my $zoneid = $v->findvalue('./zoneid');
my $id = $v->findvalue('./id');
$volumes{$id}->{'id'} = $id;
$volumes{$id}->{'name'} = $v->findvalue('./name');
$volumes{$id}->{'vmid'} = $v->findvalue('./virtualmachineid');
$volumes{$id}->{'vmname'} = $v->findvalue('./vmname');
$volumes{$id}->{'storage'} = $v->findvalue('./storage');
$volumes{$id}->{'size'} = $v->findvalue('./size');
$volumes{$id}->{'deviceid'} = $v→findvalue('./deviceid');
}
49
事前準備
●
VMのリストを作る
my $vmfile = 'listVirtualMachines.xml'; # 先に取得したVM情報
my %vms; # vol情報を格納するハッシュ
foreach my $m ($vms->findnodes('//virtualmachine')) {
my $zoneid = $m->findvalue('./zoneid');
my $id = $m->findvalue('./id');
$machines{$id}->{'id'} = $id;
$machines{$id}->{'vmname'} = $m->findvalue('./name');
$machines{$id}->{'cpunumber'} = $m->findvalue('./cpunumber');
$machines{$id}->{'memory'} = int($m->findvalue('./memory')) *
1024 * 1024;
$machines{$id}->{'nicid'} = $m->findvalue('./nic/id');
$machines{$id}->{'mac'} = $m->findvalue('./nic/macaddress');
つづく
50
事前準備
●
VMのリストを作る
# volumeidのリストからこのvmのvolumeidをつなげる(複数あり)
my %va;
while( my ($volid,$v) = each(%volumes) ){
my $vmid = $v->{'vmid'};
# 順序がわかるようにデバイスIDをキーにしてハッシュにする
if ( $vmid eq $id ){
$va{$v->{'deviceid'}} = $v;
}
}
# デバイスID≒ディスク順なので順序通りvolumeがつながる
$machines{$id}->{'volumes'} = %va;
# このVMに割り当てるvlanを取得する
# %hostvlanは設計したvlanとvmの対応表
$machines{$id}->{'vlan'} = $hostvlans{$id}→{'vlan'};
} # VMのリストを作るforeachのおわり
51
事前準備
●
これで変数%machinesが完成
●
VMごとに情報がまとまっている
●
ディスクが順序通り結びつく
●
MACと移行前VLANの情報も持っている
●
設計した新VLAN情報も加える
●
この処理はinit()と名付けよう
52
$machinesはこれをデータ化したもの
53
よく使いそうな部品
●
CloudStack非同期処理の終了を待つ
sub waitAsyncJob
{
my ($jobid) = @_;
my ($xml, $status);
while(1){
$xml = XML::LibXML->load_xml(string =>
kickapi("queryAsyncJobResult","jobid=$jobid"));
my $node = $xml->findnodes('//jobstatus');
$status = $xml->findvalue('//jobstatus');
last if ($status != 0);
sleep(10);
}
if ($status != 1){ logprint("err"); return(undef); }
return($xml); # SUCCESS
}
54
CloudStackからVMを抜き出す
●
VMを停止する
sub stopVM
{
my ($zoneid, $vmid) = @_;
# kick_apiを利用して stopVirtualMachine を投げる
my $xml = XML::LibXML->load_xml(string =>
kickapi("stopVirtualMachine", "zoneid=$zoneid", "id=$vmid"));
my $jobid = $xml->findvalue('//jobid');
# stopVirtualMachineは非同期処理なので処理終了まで待つ
$xml = waitAsyncJob($jobid);
my $state = $xml->findvalue('//state');
if ($state =~ "Stopped"){
return(1); # 停止成功
}
return(0); # 結果を待ったが止まらなかった
}
55
CloudStackからVMを抜き出す
●
VMをextractVolumeする
sub extractVolume
{
my ($zoneid, $volid) = @_;
my $xml = XML::LibXML->load_xml(string =>
kickapi("extractVolume", "zoneid=$zoneid",
"mode=HTTP_DOWNLOAD", "id=$volid"));
my $jobid = $xml->findvalue('//jobid');
# extractVolumeは非同期処理なので待つ
$xml = waitAsyncJob($jobid);
my $state = $xml->findvalue('//state');
if ($state =~ "CREATED"){
return(1); # 取り出し成功
}
return(0); # 失敗している
}
56
XenServerにVMを作る
sub vminstall
{
my ($vmid) = @_;
my $cmd;
my @r;
# VLAN定義がない=対象でないか設計漏れ=どっちにしろ作らない
if (!defined($machines{$vmid}->{'vlan'})){ return(0);}
# VMを作成
my $newvm_uuid = undef;
$cmd = sprintf("ssh root@%s ". "xe vm-install".
" new-name-label=%s sr-uuid=%s memory=%s template=%s",
$opt{'targetserver'}, # XenServerへsshでリモートコマンド
$machines{$vmid}->{'vmname'}, $destsr_uuid,
$machines{$vmid}->{'memory'}, $tpl_uuid);
@r = execshell($cmd);
if ($r[0] =~ /^[0-9a-f]{8}/){
$newvm_uuid = $r[0]; # uuidが戻ってきたら覚える
}
つづく
57
XenServerにVMを作る
# メモリを割り当てる
$cmd = sprintf("ssh root@%s ".
"xe vm-memory-set uuid=%s memory=%d",
$opt{'targetserver'},
$newvm_uuid,
$machines{$vmid}->{'memory'});
# このコマンドは正常終了で何も返さないので文字が戻ると負け
@r = execshell($cmd);
if (defined($r[0])){
return(0); # 負け
}
つづく
58
XenServerにVMを作る
# CPU数を割り当てる
$cmd = sprintf("ssh root@%s ".
"xe vm-param-set uuid=%s VCPUs-max=%d",
$opt{'targetserver'},
$newvm_uuid, $machines{$vmid}->{'cpunumber'});
# このコマンドも正常終了で何も返さないので文字が戻ると負け
@r = execshell($cmd);
if (defined($r[0])){
return(0); # 負け
}
つづく
59
XenServerにVMを作る
# VLANが作成済かを調べ、なければ作る
my $newnetwork = undef;
my $vlanname = sprintf("vlan%d", $machines{$vmid}->{'vlan'});
$cmd = sprintf("ssh root@%s xe network-list name-label=%s",
$opt{'targetserver'}, $vlanname);
@r = execshell($cmd);
if ($r[0] =~ /^uuid.*: ([0-9a-f-]+)$/){
$newnetwork = $1; # もし既にあればそのuuidを使う
}
else {
# VLAN用のnetworkを作る
$cmd = sprintf("ssh root@%s xe network-create name-label=
%s",
$opt{'targetserver'}, $vlanname);
@r = execshell($cmd);
if ($r[0] =~ /^[0-9a-f]{8}/){
$newnetwork = $r[0]; # 新しく作ったらそれを使う
}
}
つづく (このあとVLANとvifを結びつけますが、省略します)
60
XenServerにVMを作る
# vdiを作成してvbdを接続する
my @keys = sort(keys($machines{$vmid}->{'volumes'}));
foreach my $k (@keys){
my $newvdi = undef;
my $newvbd = undef;
$cmd = sprintf("ssh root@%s ".
"xe vdi-create".
" name-label=%s sr-uuid=%s virtual-size=%s device=%s",
$opt{'targetserver'},
$machines{$vmid}->{'volumes'}->{$k}->{'name'},
$destsr_uuid,
$machines{$vmid}->{'volumes'}->{$k}->{'size'},
$machines{$vmid}->{'volumes'}->{$k}->{'deviceid'});
@r = execshell($cmd);
if ($r[0] =~ /^[0-9a-f]{8}/){
$newvdi = $r[0]; # VDIのuuidが作られる
}
つづく
61
XenServerにVMを作る
# vbdを作成し、VMとVDIを結びつける
$cmd = sprintf("ssh root@%s ".
"xe vbd-create".
" vm-uuid=%s vdi-uuid=%s device=%s type=Disk",
$opt{'targetserver'},
$newvm_uuid, $newvdi,
$machines{$vmid}->{'volumes'}->{$k}->{'deviceid'});
@r = execshell($cmd);
if ($r[0] =~ /^[0-9a-f]{8}/){
$newvbd = $r[0]; # VBDのuuidが作られる
}
} # VMごとのディスク数分foreach
} # vminstall() の終了
62
ROOTディスクのインポート
# ルートディスクのインポート
sub importroot
{
my ($vmid,$dev) = @_;
my $cmd;
my @r;
my $volid = $machines{$vmid}->{'volumes'}->{$dev}->{'id'};
my $uuid = $machines{$vmid}->{'volumes'}->{$dev}->{'vdi-uuid'};
my $size = $machines{$vmid}->{'volumes'}->{$dev}->{'size'};
my $name = $machines{$vmid}->{'volumes'}->{$dev}->{'name'};
my $zoneid = $machines{$vmid}->{'zoneid'};
# 実はここでextractVolumeをする
if (!extractVolume($zoneid,$volid)){
return(0);
}
つづく
63
ROOTディスクのインポート
# extractVolumeしたイメージをインポートする
$cmd = sprintf("ssh root@%s ".
"xe vdi-import ".
"uuid=%s filename=%s format=vhd",
$opt{'targetserver'},
$uuid, $path);
@r = execshell($cmd);
if ($r[0] =~ /Error/){
return(0); # 実行後の文字列にErrorがあると失敗
}
return(1);
} ### importroot()の終了
64
DATAディスクのインポート
# 追加ディスクのインポート
sub importdisk
{
my ($vmid,$dev) = @_;
my $cmd;
my @r;
# folderのパスをマウントポイントに合わせる
$folder =~ //(w+)$/;
$folder = $1;
# コピー元ファイル名をフルパスで作る
my $path = "$datamount/$folder/$filename.vhd";
$cmd = sprintf("ssh root@%s "."xe vdi-import ".
"uuid=%s filename=%s format=vhd",
$opt{'targetserver'},$uuid, $path);
@r = execshell($cmd);
if ($r[0] =~ /Error/){ return(0); } # Errorが返ったら失敗
return(1); # インポート成功
}
65
並列処理を考える
●
1VMに最大で6つのディスクがある
●
1TBインポートは最大10時間程度かかる
●
直列処理していたのでは間に合わない
●
移行リソースは十分にある
●
ROOTディスクのextractは、追加ディスクイ
ンポートと平行するほうが時間効率高い
66
組み合わせる
#!/usr/bin/perl
my $vmid = shift(@ARGV); # 引数はVMID
init(); # 初期化して
stopVM($vmid); # 移行元のVM止めて
vminstall($vmid); # XenServerにVMを作る。あとはインポート
# 対象VMに接続しているディスク分ループ
my $vols = $machines{$vmid}->{'volumes'};
while( my ($dev, $v) = each(%$vols) ){
# forkして接続しているディスクを並列処理
my $r;
my $pid = fork();
if ($pid){ next; } # 親プロセスは次のディスクへ
# インポート処理は子プロセスが行う
if ( $v->{'type'} eq "ROOT" ){ $r = importroot($vmid,$dev); }
else { $r = importdisk($vmid,$dev); }
exit($r);
}
67
直列処理 vs 並列処理
68
もしこれを手順書にしていたら?
●
手順書に書くことは、移行スクリプトの起
動操作と起動確認、移行後の確認のみ。
●
移行開始時間になったら移行スクリプトを叩
けばよい。正常に開始されればあとは放置。
●
移行検証時、10台くらい並行動作しても動作
システムに大きな問題は発生しなかった
– 10台/日なら200台も20日で終わる。
– 人海戦術不要/夜間作業不要。
69
スクリプト化の効果
●
きちんとデバッグしておけば失敗しない
●
操作を人任せにできる。
●
もし想定外のエラーが起こってもその対処に
集中できる
●
時間が長いとか量が多いものほど効果が高い
●
動的なデータが多いほど効果が高い
●
書き方によってはすごい時間短縮
●
言葉で説明するより正確
●
時刻付きログを仕込めば結果確認も簡単
70
実際の作業時間
●
予定では調査から移行完了まで4ヶ月
>納期は全く問題なし
●
調査からスクリプト完成まで2ヶ月
●
移行作業に2ヶ月
●
作業者は1名。
●
9:30-10:00に前日の確認
●
17:00-18:00に当日分の移行スクリプト起動
●
問題がなければその他の時間は別作業
≒日に2時間のみの稼働で移行完了
71
書くべきは、手順書よりも、
スクリプト
●
自分が使いやすいスクリプト処理系の使い
方を身に着けておきましょう。
●
上手なデータ化もスクリプトを書く上で有
効です。
●
達成する目的を十分に理解把握する能力、
それをスクリプト化したほうが効率が良い
のかを判断できる能力は必要です。
普段から書き慣れておきましょう。
●
スクリプトを上手に使って、サボれる/////////でき
るITエンジニアを目指しましょう。
72
有限会社サンビットシステム
• 1998年8月設立 
• 2009年より札幌市豊平区平岸
• 今年のフレーズ: オープンソースの活用で社会貢献
●
港営業務システム「あまつみ®」の開発・運用
●
ITインフラ構築、ITシステム設計支援
●
ソフトウエア受託開発,パッケージ開発
●
IT教育など

More Related Content

What's hot

SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターMasayuki Ozawa
 
PowerDNSのご紹介
PowerDNSのご紹介PowerDNSのご紹介
PowerDNSのご紹介
Akira Matsuda
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
Insight Technology, Inc.
 
キャッシュ・権威 兼用型浸透問題への対処
キャッシュ・権威 兼用型浸透問題への対処キャッシュ・権威 兼用型浸透問題への対処
キャッシュ・権威 兼用型浸透問題への対処
hdais
 
cassandra 100 node cluster admin operation
cassandra 100 node cluster admin operationcassandra 100 node cluster admin operation
cassandra 100 node cluster admin operation
oranie Narut
 
MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間
hiroi10
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio KumazawaInsight Technology, Inc.
 
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
hiroi10
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewMasayuki Ozawa
 
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
Takeshi Kuramochi
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
Craft works
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
Insight Technology, Inc.
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなこと
Hiroaki Sano
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
yoyamasaki
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
Uptime Technologies LLC (JP)
 
Cassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考えるCassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考えるKazutaka Tomita
 
[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用
Kosuke Kida
 

What's hot (20)

SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンター
 
PowerDNSのご紹介
PowerDNSのご紹介PowerDNSのご紹介
PowerDNSのご紹介
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
 
キャッシュ・権威 兼用型浸透問題への対処
キャッシュ・権威 兼用型浸透問題への対処キャッシュ・権威 兼用型浸透問題への対処
キャッシュ・権威 兼用型浸透問題への対処
 
cassandra 100 node cluster admin operation
cassandra 100 node cluster admin operationcassandra 100 node cluster admin operation
cassandra 100 node cluster admin operation
 
MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
 
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
 
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなこと
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
Cassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考えるCassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考える
 
[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用
 

Similar to 書くべきは手順書ではなくスクリプトです。定型業務をスクリプトで自動化して楽をしよう

NCstudy 2.5
NCstudy 2.5NCstudy 2.5
NCstudy 2.5
Yuichi Saotome
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなしOonishi Takaaki
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
Shinya Okano
 
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows AzureB 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
GoAzure
 
流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術
流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術
流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術
Go Kawakami
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
infinite_loop
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
Takanori Sejima
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用
Tetsu Yama
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編
gree_tech
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Kentaro Matsui
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
Takanori Sejima
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
Dai Utsui
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
sandai
 
OSC2014広島 CloudStackの歩き方【完全版】
OSC2014広島 CloudStackの歩き方【完全版】OSC2014広島 CloudStackの歩き方【完全版】
OSC2014広島 CloudStackの歩き方【完全版】
Midori Oge
 
Google Product
Google ProductGoogle Product
Google Product
Daisuke Sugai
 
OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer
softlayerjp
 
Mvp road show_0830_rev1
Mvp road show_0830_rev1Mvp road show_0830_rev1
Mvp road show_0830_rev1
Takano Masaru
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI
 
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
Supership株式会社
 

Similar to 書くべきは手順書ではなくスクリプトです。定型業務をスクリプトで自動化して楽をしよう (20)

NCstudy 2.5
NCstudy 2.5NCstudy 2.5
NCstudy 2.5
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows AzureB 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
 
流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術
流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術
流行りのSaaSで本当に365日幸せ?クラウド時代の賢いNotes活用術
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
OSC2014広島 CloudStackの歩き方【完全版】
OSC2014広島 CloudStackの歩き方【完全版】OSC2014広島 CloudStackの歩き方【完全版】
OSC2014広島 CloudStackの歩き方【完全版】
 
Google Product
Google ProductGoogle Product
Google Product
 
TopSE.20121119
TopSE.20121119TopSE.20121119
TopSE.20121119
 
OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer
 
Mvp road show_0830_rev1
Mvp road show_0830_rev1Mvp road show_0830_rev1
Mvp road show_0830_rev1
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
 

Recently uploaded

ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
Osaka University
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
Shinichi Hirauchi
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
Takuya Minagawa
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
Seiya Shimabukuro
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
ssuserfcafd1
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 

Recently uploaded (15)

ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 

書くべきは手順書ではなくスクリプトです。定型業務をスクリプトで自動化して楽をしよう