OCI学習#8 Run Command(Instance)#2

## 概要
インスタンスに対してOCIコンソール上からRun Commandを使用してコマンド実行を実施。
今回はバケット内にスクリプトを配置、出力結果もバケットに出力。
下記OCIドキュメントを参照しながら設定を実施。
[インスタンスでのコマンドの実行](https://docs.oracle.com/ja-jp/iaas/Content/Compute/Tasks/runningcommands.htm?Highlight=Run%20command)

## 目的
OCI資格取得に向けた学習の一環として、単に知識を暗記するだけでなく、
実際にOCI環境に触れて実践的な経験を積むことで、将来の設計や構築の場面で
自信を持って対応できるスキルを習得する。

## OCI学習記事まとめ
Part1
1.[OCI学習#1 ネットワーク設定](https://qiita.com/nonZy/items/adbbf47646a28e59fe36)
2.[OCI学習#2 インスタンス作成、接続](https://qiita.com/nonZy/items/b821d419c03ca7c7cd7c)
3.[OCI学習#3 Block Volume追加](https://qiita.com/nonZy/items/5053c853c77cfb68bc51)
4.[OCI学習#4 Object設定、アクセス](https://qiita.com/nonZy/items/abb5717666d8f74eb690)
5.[OCI学習#5 ネットワークパスアナライザ](https://qiita.com/nonZy/items/641de2daca61af29e7df)

Part2
6.[OCI学習#6 ネットワークパスアナライザ#2](https://qiita.com/nonZy/items/a6e3a83c5d934a8877c2)
ネットワークパスアナライザの使用
7.[OCI学習#7 Run Command(Instance)#1](https://qiita.com/nonZy/items/1db4f83ed6fc37744751)
Run commandの実行

## 実施手順
### スクリプト作成
Oracle Linux 8.10のインスタンスに対してRun Commandを実行。
下記をテキストファイル"script.txt"に保存する。
いたってシンプルなホスト名、ユーザ名、IPアドレスを確認するコマンドを実行します。

:::note warn
注意
テキストファイル保存時は改行コードをLFにしないと、出力結果がエラーとなります。
:::

```
echo "$ uname -n"
uname -n

echo "$ whoami"
whoami

echo "$ ip address show"
ip address show

exit 0
```
### Bucket作成
1.[オブジェクト・ストレージ]-[バケット]をクリック
2.[バケットの作成]をクリック
![81.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/17fc8a98-42cf-43ef-a9b0-c7787cde5eb6.png)

Run Command用のテキストファイルを配置するためだけのバケットなので
バケット名以外全てデフォフォルト値で設定。
![82.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/47b84da8-0b47-4650-81de-5079a225cd45.png)

### Objectアップロード
1.[オブジェクト・ストレージ]-[バケット]-[対象のバケット]をクリック
2.[アップロード]をクリック
![83.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/50a16e32-4c7b-476d-9c72-5284a00b007c.png)

作成したテキストファイル"script.txt"をアップロード。
![84.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/90afc980-44bb-4c6e-80c4-2934014f409c.png)

### ポリシー設定
1.[アイデンティティ]-[ポリシー]-[ポリシーの作成]をクリック
動的グループに対してポリシーを設定します。
```
Allow dynamic-group RunCommandDynamicGroup to read objects in compartment ABC where all {target.bucket.name = '<bucket_with_script_file>'}
Allow dynamic-group RunCommandDynamicGroup to manage objects in compartment ABC where all {target.bucket.name = '<bucket_for_command_output>'}
```

### コマンド作成、実行
1.[コンピュート]-[インスタンス]-[対象インスタンス]-[実行コマンド]をクリック
2.[コマンド作成]をクリック
今回はバケット内のテキストファイルを指定して、バケット内に実行結果を出力するので下記を選択。
- オブジェクト・ストレージ・バケットからインポート
- オブジェクト・ストレージ・バケットに出力

![85.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/7fe4d2d4-b5f7-46aa-91e2-c6d57a665e89.png)

### 実行確認
・実行直後
![86.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/625a5fd3-f1d6-4948-b3a4-fd95b8c2a68b.png)

・実行完了後
![87.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/ee81d5f9-b0e5-4fdb-9938-c23a1fe15f52.png)

・実行詳細
![88.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/e81b5c6e-9315-4c93-93f0-11746e96cf22.png)

・出力されたファイル
```
$ uname -n
vm02
$ whoami
ocarun
$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:00:17:03:3c:ef brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet 10.0.1.12/24 brd 10.0.1.255 scope global dynamic ens3
       valid_lft 76957sec preferred_lft 76957sec
    inet6 fe80::17ff:fe03:3cef/64 scope link 
       valid_lft forever preferred_lft forever
```

## まとめ
インスタンスのRun Command実行ですが、OCIコンソール上で複数のインスタンス同時一斉実行などが
簡単にできれば便利だなと感じました。
もしかしたら出来るのかもしれませんが...。