クラウドアシスタントを使ってみる #1 基本動作編

この記事は Alibaba Cloud の日本サイト の環境(ドキュメントやアカウント、そのアカウントでの検証結果)に基づいて記載しています。 日本サイトと国際サイトでは各プロダクトごとに提供機能が一部異なることがあります(そのほとんどは国際サイトの方が日本サイトよりも多機能になっている)。記事の内容は適宜最新化する予定です。

今日は時間があまり無いので軽い内容とします。  ちょっと前(2018年12月28日)に機能が提供されたクラウドアシスタンスの使い方です。

そもそも”クラウドアシスタント”とはどのような機能でしょうか。

一言でいえば、ECSインスタンスに対してAlibaba Cloud コンソールから任意のコマンドをリモートから実行できる機能となります。 サーバにログインしなくとも任意の処理を実行できます。 即時実行も可能ですし、スケジュール実行も可能です。複数のECSインスタンスに命令することも可能です。

実際にクラウドアシスタントを使ってみます。

まずはAlibaba Cloud コンソールにログインし、ECSの管理画面にアクセスします。 そして、左のメニューにある”クラウドアシスタント”をクリックします。

コマンド名には任意のコマンド名、いわゆるバッチの名前、を入力し、コマンド内容に実際に実行したいコマンドを指定します。

今回の対象のECSインスタンスはAliyun Linuxです。 

今回は以下のコマンドを実行するようバッチを作ってみます。

  • ”hostname”で対象のインスタンス名のホスト名を出力
  • ”df -m”でパーティション情報を出力
  • ”ifconfig -a”でインターフェース情報を出力 

バッチが出来上がりました。

それでは実行してみます。 ”実行”をクリックします。

コマンド実行の画面がポップアップするのでインスタンスを指定し、”実行”をクリックします。

完了すると、実行レコードに結果が表示されます。 結果を見るために”結果確認”をクリックします。

また、ウィンドウをポップアップされるので”実行完了~”をクリックします。

結果が表示されました。 想定通りの結果ですね。

まずは基本的な使い方は確認出来ました。 しかし、コマンドの実行ユーザ(ID)はだれなのか疑問がわきます。 確認してみましょう。

”id”コマンドでシェルの実行ユーザを確認する新しいバッチを作成します。

作成したバッチを実行した結果は以下。 ”uid=-0”ということでrootユーザであることが確認出来ました。

また新たな疑問が沸き上がります。 どうやって実行しているのかと。

とりあえず、Aliyun Linuxにログインし、/var/logあたりにログが無いか確認します。 普通に考えると/var/log/secureあたりに実行の痕跡が残りそうなものです。  うーん、直近の変更はlastlogやwtmpだけで特に見当たりません。

[root@sun log]# cd /var/log
[root@sun log]# ls -lt | head -5
total 2292
-rw-r–r–. 1 root root 291708 Feb 27 22:26 lastlog
-rw-rw-r–. 1 root utmp 16512 Feb 27 22:26 wtmp
-rw——-. 1 root utmp 1909248 Feb 27 22:25 btmp
-rw——- 1 root root 2147 Feb 24 21:53 yum.log

パケットキャプチャしてみます。 クラウドアシスタントからバッチを実行するとECSインスタンス側では以下の処理シーケンスが実行されています。

  1. ntpで時刻同期
  2. ntpのIPアドレスのDNS逆引き
  3. ” ap-northeast-1.axt.aliyun.com. ”のAAAA(IPv6)の正引き
  4. ECSインスタンスから”100.100.0.76”へのhttps接続 (太字部分)

推測するに、TCP/IPとは別の次元でECSインスタンスへ何らかの命令が送られて、それを起点にNTP時刻同期とそのあとに ”100.100.0.76” にhttps接続し、そこで実行コマンドの情報をもらい、最終的にそのコマンドを実行しているように見えます。 

テストするまではAlibaba Cloud側からECSインスタンスへ命令をTCP/IPで送っていると想像していたのですが、実態は異なるようです。

[root@sun ~]# tcpdump | grep -v ssh
22:38:31.881504 IP sun.ntp > 120.25.115.20.ntp: NTPv4, Client, length 48
22:38:31.881645 IP sun.46767 > 100.100.2.138.domain: 63993+ PTR? 20.115.25.120.in-addr.arpa. (44)
22:38:31.881700 IP sun.45591 > 100.100.2.136.domain: 33439+ PTR? 20.115.25.120.in-addr.arpa. (44)
22:38:32.263513 IP 100.100.2.138.domain > sun.46767: 63993 NXDomain 0/0/0 (44)
22:38:32.263535 IP 100.100.2.136.domain > sun.45591: 33439 NXDomain 0/0/0 (44)
22:38:47.892516 IP sun.ntp > 120.25.115.20.ntp: NTPv4, Client, length 48
22:38:54.300374 ARP, Request who-has sun tell gateway, length 28
22:38:54.300395 ARP, Reply sun is-at 00:16:3e:00:28:3a (oui Unknown), length 28
22:39:03.882501 IP sun.ntp > 120.25.115.20.ntp: NTPv4, Client, length 48
22:39:12.331715 IP sun.49659 > 100.100.2.138.domain: 19701+ AAAA? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.331886 IP 100.100.2.138.domain > sun.49659: 19701* 0/1/0 (120)
22:39:12.331940 IP sun.34812 > 100.100.2.136.domain: 37497+ AAAA? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.332018 IP 100.100.2.136.domain > sun.34812: 37497* 0/1/0 (120)
22:39:12.332049 IP sun.49765 > 100.100.2.138.domain: 46649+ A? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.332135 IP 100.100.2.138.domain > sun.49765: 46649* 1/0/0 A 100.100.0.76 (63)
22:39:12.332194 IP sun.45458 > 100.100.0.76.https: Flags [S], seq 3051707937, win 29200, options [mss 1460,sackOK,TS val 303284123 ecr 0,nop,wscale 6], length 0
22:39:12.333919 IP 100.100.0.76.https > sun.45458: Flags [S.], seq 1236162335, ack 3051707938, win 29200, options [mss 1440,nop,nop,sackOK,nop,wscale 7], length 0
22:39:12.333932 IP sun.45458 > 100.100.0.76.https: Flags [.], ack 1, win 457, length 0
22:39:12.334211 IP sun.45458 > 100.100.0.76.https: Flags [P.], seq 1:518, ack 1, win 457, length 517
22:39:12.335819 IP 100.100.0.76.https > sun.45458: Flags [.], ack 518, win 237, length 0
22:39:12.336978 IP 100.100.0.76.https > sun.45458: Flags [P.], seq 1:3494, ack 518, win 237, length 3493
22:39:12.336986 IP sun.45458 > 100.100.0.76.https: Flags [.], ack 3494, win 566, length 0
22:39:12.341561 IP sun.45458 > 100.100.0.76.https: Flags [P.], seq 518:644, ack 3494, win 566, length 126
22:39:12.343507 IP 100.100.0.76.https > sun.45458: Flags [P.], seq 3494:3545, ack 644, win 237, length 51
22:39:12.343628 IP sun.45458 > 100.100.0.76.https: Flags [P.], seq 644:821, ack 3545, win 566, length 177
22:39:12.360559 IP 100.100.0.76.https > sun.45458: Flags [P.], seq 3545:4446, ack 821, win 245, length 901
22:39:12.360636 IP sun.45458 > 100.100.0.76.https: Flags [P.], seq 821:852, ack 4446, win 612, length 31
22:39:12.360681 IP sun.45458 > 100.100.0.76.https: Flags [F.], seq 852, ack 4446, win 612, length 0

22:39:12.360944 IP sun.41497 > 100.100.2.136.domain: 40684+ AAAA? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.361102 IP 100.100.2.136.domain > sun.41497: 40684* 0/1/0 (120)
22:39:12.361142 IP sun.57768 > 100.100.2.138.domain: 41574+ AAAA? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.361206 IP 100.100.2.138.domain > sun.57768: 41574* 0/1/0 (120)
22:39:12.361236 IP sun.36074 > 100.100.2.136.domain: 11401+ A? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.361302 IP 100.100.2.136.domain > sun.36074: 11401* 1/0/0 A 100.100.0.76 (63)
22:39:12.361344 IP sun.45460 > 100.100.0.76.https: Flags [S], seq 1817514416, win 29200, options [mss 1460,sackOK,TS val 303284131 ecr 0,nop,wscale 6], length 0
22:39:12.362356 IP 100.100.0.76.https > sun.45458: Flags [F.], seq 4446, ack 852, win 245, length 0
22:39:12.362362 IP sun.45458 > 100.100.0.76.https: Flags [.], ack 4447, win 612, length 0
22:39:12.362365 IP 100.100.0.76.https > sun.45458: Flags [.], ack 853, win 245, length 0
22:39:12.363216 IP 100.100.0.76.https > sun.45460: Flags [S.], seq 802760647, ack 1817514417, win 29200, options [mss 1440,nop,nop,sackOK,nop,wscale 7], length 0
22:39:12.363221 IP sun.45460 > 100.100.0.76.https: Flags [.], ack 1, win 457, length 0
22:39:12.363493 IP sun.45460 > 100.100.0.76.https: Flags [P.], seq 1:518, ack 1, win 457, length 517
22:39:12.365221 IP 100.100.0.76.https > sun.45460: Flags [.], ack 518, win 237, length 0
22:39:12.366375 IP 100.100.0.76.https > sun.45460: Flags [P.], seq 1:3494, ack 518, win 237, length 3493
22:39:12.366382 IP sun.45460 > 100.100.0.76.https: Flags [.], ack 3494, win 566, length 0
22:39:12.370598 IP sun.45460 > 100.100.0.76.https: Flags [P.], seq 518:644, ack 3494, win 566, length 126
22:39:12.372585 IP 100.100.0.76.https > sun.45460: Flags [P.], seq 3494:3545, ack 644, win 237, length 51
22:39:12.372699 IP sun.45460 > 100.100.0.76.https: Flags [P.], seq 644:830, ack 3545, win 566, length 186
22:39:12.385831 IP 100.100.0.76.https > sun.45460: Flags [P.], seq 3545:3779, ack 830, win 245, length 234
22:39:12.385889 IP sun.45460 > 100.100.0.76.https: Flags [P.], seq 830:861, ack 3779, win 612, length 31
22:39:12.385930 IP sun.45460 > 100.100.0.76.https: Flags [F.], seq 861, ack 3779, win 612, length 0
22:39:12.387687 IP 100.100.0.76.https > sun.45460: Flags [F.], seq 3779, ack 861, win 245, length 0
22:39:12.387698 IP sun.45460 > 100.100.0.76.https: Flags [.], ack 3780, win 612, length 0
22:39:12.387740 IP 100.100.0.76.https > sun.45460: Flags [.], ack 862, win 245, length 0
22:39:12.389463 IP sun.39990 > 100.100.2.138.domain: 53410+ AAAA? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.389550 IP 100.100.2.138.domain > sun.39990: 53410* 0/1/0 (120)
22:39:12.389590 IP sun.36974 > 100.100.2.136.domain: 27206+ AAAA? ap-northeast-1.axt.aliyun.com. (47)
22:39:12.389729 IP 100.100.2.136.domain > sun.36974: 27206* 0/1/0 (120)

仕組みを調べるために公式ドキュメントを確認することにします。

URLはこちら

ドキュメントを見る限り” aliyun_assist.rpm”が実体のようです。 探してみます。見つかりません。。。

[root@sun ~]# rpm -qa | grep aliyun*
[root@sun ~]#

ゆるく検索してみます。 ”ali”で始まるrpmを探してみます。しかし、”aliyun_assist.rpm”はインストールされていないようです。

[root@sun ~]# rpm -qa | grep ali
alinux-logos-70.0.6-3.1.al7.noarch
kernel-alinux-4.4.95-2.al7.x86_64
kernel-alinux-headers-4.4.95-2.al7.x86_64
alinux-release-17.01-1.5.al7.x86_64
kernel-alinux-4.4.95-1.al7.x86_64
libpwquality-1.2.3-4.1.al7.x86_64

実行中のプロセス(デーモン)を見てみます。 ”aliyun-service”というそれっぽいのが見つかりました。 これがクラウドアシスタントに関係しているのでしょうか?

[root@sun ~]# ps -ef |grep ali
root 1 0 0 Feb13 ? 00:00:04 /usr/lib/systemd/systemd –switched-root –system –deserialize 21
root 1002 1 0 Feb13 ? 00:07:05 /usr/sbin/aliyun-service
root 30985 30927 0 22:51 pts/0 00:00:00 grep –color=auto ali

本日は時間が無くなりました。 クラウドアシスタントは問題なく実行できることが確認出来ましたが、どこでどうやって実行されているか謎が残りました。

謎はクラウドアシスタントを使ってみる #2 仕組み解明編で解明できましたので興味があれば読んでみてください。

以上