オンプレミスのサーバを Systems Manager で管理する

これはメモです。その通りやってできなくても責任を持てませんし、固有名詞等は適当に直してみてください。

https://dev.classmethod.jp/cloud/aws/ec2-systems-manager-on-premises/

# Systems manager -> マネージドインスタンス ->

まずは、これを見て、アクティべーションを行う必要がある。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-managed-instance-activation.html
「アクティべーションの作成」をクリックする。
リージョンを選択する。

(オプション) [Activation description] フィールドに、このアクティベーションの説明を入力します。説明は省略可能です。多数のサーバーや VM を有効化する場合は、説明を入力することをお勧めします。 
ーーーーーーーーーーー
「VirtualBox CentOS7-home」と説明に入力する。
[インスタンス制限] に 1 （デフォルト）を入力する。
ーーーーーーーーーーー

[IAM ロール名] セクションで、サーバーや VM とクラウド内の AWS Systems Manager との通信を可能にするサービスロールオプションを選択します。

    [Use the system created default command execution role] を選択し、AWS で作成されたロールとマネージドポリシーを使用します。

    [必要な権限を備えた既存のカスタム IAM ロールを選択] を選択し、前に作成したオプションのカスタムロールを使用します。
ーーーーーーーーーーーー
IAM ロール
マネージドインスタンスの SSM エージェントと AWS の間で通信を有効にするには、IAM ロールを指定します。
必要な権限を備えたシステムのデフォルトコマンド実行ロールを作成
このオプションを選択した場合、AmazonEC2RunCommandRoleForManagedInstances という名前の新しいロールが作成されます。このロールでは、既存の AmazonSSMManagedInstanceCore & AmazonSSMDirectoryServiceAccess パブリック管理ポリシーが使用され、SSM サービスに AssumeRole 権限が与えられます。
ーーーーーーーーーーーー
選択されているところのままにしておく。

なお、オンプレミスの場合は、オンプレミス用のユーザを作成してポリシをアタッチする必要がある。
たとえば、onpremise というユーザを作成して、以下のポリシを割り当てる。

```
CloudWatchAgentAdminPolicy(これは外した方がよいだろう:いや、これ外したら、ssmのメトリクスに報告しなくなったからいるみたい)
CloudWatchAgentServerPolicy
AmazonSSMManagedInstanceCore
getWidgetMetricImageできるポリシも追加すること。
```
そして、credential.csv をダウンロードして、それを、オンプレミスマシンの /root/.aws/credentials に記述する。


[Activation expiry date] フィールドで、アクティベーションの有効期限日を指定します。
ーーーー
「アクティべーションの作成」をクリックする。
コードと id が返ったのを確認する。
新しいアクティベーションは正常に作成されました。 アクティベーションコードを以下に示します。このコードに再びアクセスすることはできないため、これをコピーし、安全な場所に保存してください。
次は、ここを見る。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-managed-linux.html

CentOS7 上で、以下のコマンドを実行して、SSM パッケージをインストールする。

```
# curl -OL https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
インストールする
# rpm -ivh amazon-ssm-agent.rpm
一度停止する。
# systemctl stop amazon-ssm-agent.service
# systemctl status amazon-ssm-agent.service
再起動後に有効にする。
# systemctl enable amazon-ssm-agent.service
登録する
# amazon-ssm-agent -register -code "<Activation-code>" -id "<ID>" -region "ap-northeast-1"
（表示）
INFO Successfully registered the instance with AWS SSM using Managed instance-id: <INSTANCE-ID>
もし、invalid activation のようになったら、もう一度アクティベーションを最初から作成してみる。
```
「マネージドインスタンス」をクリックするとサーバが登録されているのが確認できる。

サービスを立ち上げる。

```
# systemctl start amazon-ssm-agent.service
```

ちなみに、ICMP の IPV4 と IPV6 を開けておく。
AWS Systems Manager の画面で、「マネージドインスタンス」を確認すると、オンラインになっているのが確認できる。

次に、collectd パッケージをインストールする。

```
# yum install collectd
# systemctl enable collectd
# systemctl start collectd
# systemctl status collectd
```

次に、以下のページを参考にする。
`https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-premise.html`

--------
Systems Manager Run Command またはコマンドラインを使用して CloudWatch エージェントを開始できます。
SSM Agent を使用してオンプレミスサーバーで CloudWatch エージェントを開始するには
    Open the Systems Manager console at https://console.aws.amazon.com/systems-manager/
.
In the navigation pane, choose Run Command.
-or-
If the AWS Systems Manager home page opens, scroll down and choose Explore Run Command.
[Run command (コマンドの実行)] を選択します。
[Command document] リストで、[AmazonCloudWatch-ManageAgent] の横のボタンを選択します。
[Targets] 領域で、エージェントをインストールしたインスタンスを選択します。
[Action] リストで、[configure] を選択します。
[Mode] リストで、[onPremise] を選択します。
[Optional Configuration Location (オプションの設定場所)] ボックスで、ウィザードで作成して Parameter Store に保存したエージェント設定ファイルの名前を入力します。
[Run] を選択します。
エージェントが、設定ファイルで指定した設定で開始されます。

```
aws ssm send-command --document-name "AmazonCloudWatch-ManageAgent" --document-version "4" --targets '[{"Key":"InstanceIds","Values":["i-03ab9086afe41e441"]}]' --parameters '{"action":["configure"],"mode":["ec2"],"optionalConfigurationSource":["ssm"],"optionalConfigurationLocation":[""],"optionalRestart":["yes"]}' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region ap-northeast-1


aws ssm send-command --document-name "AmazonCloudWatch-ManageAgent" --document-version "4" --targets '[{"Key":"InstanceIds","Values":["i-03ab9086afe41e441"]}]' --parameters '{"action":["configure"],"mode":["ec2"],"optionalConfigurationSource":["ssm"],"optionalConfigurationLocation":[""],"optionalRestart":["yes"]}' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region ap-northeast-1


aws ssm send-command --document-name "AmazonCloudWatch-ManageAgent" --document-version "4" --targets '[{"Key":"InstanceIds","Values":["i-03ab9086afe41e441"]}]' --parameters '{"action":["configure"],"mode":["ec2"],"optionalConfigurationSource":["ssm"],"optionalConfigurationLocation":[""],"optionalRestart":["yes"]}' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region ap-northeast-1
```
--------


要すれば、これで、先程の端末に、CloudWatch がインストールできるということ。
コマンド xxxxx が正常に送信されました、と出力されているのが確認できる。
「コマンドのステータス」が「進行中」になっている事が確認できる。
Run コマンドのコマンド履歴で、インストールが成功しているのがわかる。

なお、オンプレミスのマシンからコマンドによりインストールするには、以下のページから curl -OL <パッケージ名> でダウンロード後、rpm -ivh <パッケージ名> でインストールすべし。

`https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html`

```
# cd /opt/aws/amazon-cloudwatch-agent
# ls
(表示)
LICENSE NOTICE RELEASE_NOTES THIRD-PARTY-LICENSES bin doc etc logs var
```

ちなみに、IAM でオンプレミス用のユーザを作成しておく必要がある。
次に、一度、手動で初期化しておくのがよい。
なお、config-wizard を起動しても、以下のポリシが設定されていないとエラーになるので、テンポラリに設定をしていなければいけない。config-wizard が終了したら、設定を外すこと。
CloudWatchAgentAdminPolicy

```
# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
```

以下のリンクに書いてある通りにやればよいと思われる。
`http://blog.serverworks.co.jp/tech/2020/01/28/cloudwtach-agent-ssm-centos/`

ところで、オンプレミスのマシンの場合には、aws-cli コマンドがない。要すれば、aws のパッケージをインストールしなければいけない。

オンプレミスのマシンに aws-cli をインストールするには、以下を参考にする。
`https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html`

ちなみに、この過程で、credentials を聞かれるはず。
適当に other にして、id も key も空欄でとりあえず進めて構わない。
次に、以下のファイルを編集する。
`/etc/.aws/credentials`
このファイルは、デフォルトの credentials ファイル。
ここに、IAM で作成してダウンロードしておいた csv ファイルの中身を記述する。

ちなみに、オンプレミスマシンの場合は、既に [default]　が入っているようである。
以下のように、cloudwatch専用であることを明言して、csv ファイルの中身を記述する。

```
[AmazonCloudWatchAgent]
aws_access_key_id = xxxxxxxx
aws_secret_access_key = xxxxxxxx
region = ap-northeast-1
```

インスタンスに、このロールを与える。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance-fleet.html#install-CloudWatch-Agent-iam_permissions-fleet

これで手動でやってみる。
https://qiita.com/t_okkan/items/9bec49fa5be76de4e5ef
/var/log/messages や、httpd の error log を S3 に転送もしてみるのは、以下でできそう。
https://dev.classmethod.jp/cloud/aws/cloudwatchagent-nocli-install/
実際に書き出してみると、こんな感じ。
--------

```
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"logs": {
		"logs_collected": {
			"files": {
				"collect_list": [
					{
						"file_path": "/var/log/messages",
						"log_group_name": "messages",
						"log_stream_name": "{hostname}"
					},
					{
						"file_path": "/var/log/secure",
						"log_group_name": "secure",
						"log_stream_name": "{hostname}"
					},
					{
						"file_path": "/var/log/httpd/ssl_error_log",
						"log_group_name": "ssl_error_log",
						"log_stream_name": "{hostname}"
					}
				]
			}
		}
	},
	"metrics": {
		"metrics_collected": {
			"collectd": {
				"metrics_aggregation_interval": 60
			},
			"cpu": {
				"measurement": [
					"cpu_usage_idle"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				],
				"totalcpu": true
			},
			"disk": {
				"measurement": [
					"used_percent"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"net": {
				"measurement": [
					"bytes_sent",
					"bytes_recv",
					"packets_sent",
					"packets_recv"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"statsd": {
				"metrics_aggregation_interval": 60,
				"metrics_collection_interval": 10,
				"service_address": ":8125"
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
```

--------
設定ファイルをSystem Managerで作成し終えると、あとはエージェントをインストールしたインスタンスで設定ファイルを指定してAgentを実行するのみです。

以下のコマンドの意味だけど、最新の ssm のパラメーターを取得する、という意味。
これをやらないといけなくて、ssm の設定がこのコマンドにより、/etc/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ 配下に実行権限付きのファイルとして保存される。

たまにやるとよいかも。

CloudWatch Agentの起動は以下のコマンドで行います。

```
$ /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m <ec2|onPremise> -c ssm:CloudWatchAgentParemeter（AWS Systems Manager-パラメータの名前）-s
```

-a fetch-configオプションでSystem Managerのパラメーターストアから設定ファイルを読み込むように指定し、-cオプションで設定ファイルを指定しています。指定方法は、ssm:"パラメーター名"となります。
（参考）
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html

今回、パラメーター名は、moodle35-template-test-1　とした。

うまくいった。

```
Valid Json input schema.
I! Detecting runasuser...
No csm configuration found.
Configuration validation first phase succeeded
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded
```

起動したようなら、以下のコマンドによりログを確認する。

```
# tail -f /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
```

次のようになっていれば、大丈夫。

```
...(snip)...
I! Agent Config: Interval:1m0s, Quiet:false, Hostname:"<マシン名>", Flush Interval:1s
```

それでは、cloudwatch のページに行き、メトリクスに書き込んでいるかを確認する。


cloudwatch が立ち上がる時、以下の表示が出て、実はうまくいっていないということがある。
なぜ？

```
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json does not exist or cannot read. Skipping it.
```

出来た。問題は、時間が UTC になっているところ。

オンプレには、証明書をインストールしなければいけないっぽい。

cloudwatch の時刻表示が utc になっているのは、これで直る？
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/change_dashboard_time_format.html

ここを見てみる。
https://dev.classmethod.jp/articles/cloudwatch-agent-on-premise-windows/
https://qiita.com/murata-tomohide/items/3e66d63b21c08d6481a2
this plugin should be used on EC2 only cloudwatch
アマゾンの説明ページ
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html
IAMユーザの作り方
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html
[小ネタ] CloudWatch メトリクスのグラフをローカルに保存しちゃうぞ！
https://dev.classmethod.jp/articles/clw_metrics_graph_export/

現在のAWSだと、「発信元」-「イメージAPI」をクリックして、コピペして、json ファイルを作成する。それをサーバに上げる。そして、このコマンドを定期的に実行すれば画像をダウンロードできる（タイムスタンプとか適当につければよい）webページを作成して、この png を貼っておき、定期的にリフレッシュすればよいでしょう。

```
# aws cloudwatch get-metric-widget-image --metric-widget file://metrics_moodle-workplace2_12h.json --output-format "png" --output text --query MetricWidgetImage | base64 --decode > metrics_moodle-workplace_12h.png
```

ところで、これをスクリプトで回すことも考えられるが、他人のサーバ上で、やっている事がわかるのは気持ち悪い。
なので、Lambda でできることに越したことはない。以下を参考にしてみよう。

`https://aws.amazon.com/jp/blogs/devops/building-an-amazon-cloudwatch-dashboard-outside-of-the-aws-management-console/`

日本語のサイトがあるが、これが使えないか。

`http://blog.serverworks.co.jp/tech/2017/02/16/apigateway-lambda-cloudwatch-alarm/`

いや、もっとよい方法があった。Lambda から boto3 を使えるし、これがいいかな。
`https://hacknote.jp/archives/51333/`

いやいや、ssm の run command の方が柔軟性がありそうだ。
`https://hacknote.jp/archives/37181/`

そして、run command では、bash で直接書くのではなく、yaml で書いた方がよいだろう。
`https://qiita.com/myoshioka/items/c9294fc8f02d8578dff4`

うーん、この荒らしい方法がハマっているのかもしれない。
`https://dev.classmethod.jp/articles/systems-manager-change-calendar-release/`

なんか、aws コマンドがない言われる。
`https://qiita.com/debari/items/1030c214d0e4e86b2fce`

いろいろやってみたけど、ssm のメンテナンスウィンドウを活用するのが一番良い、というか、他のやり方が上手くいかない。
定期的に実行するには、以下の設定にすればよい。

```
Cron/Rate 式
cron(*/5 * * * ? *)
```

そして、ターゲットを目的の一つのインスタンスにして、ドキュメントは、ドキュメント:AWS-RunShellScript にする。

かんじんのスクリプトをどこに記述するのか、なかなか分からなかったが、以下のところに書けばよい。その他は、よしなに設定すること。
この json ファイルの元ををどうやって作ったかというと、グラフを作って、そこのソース（グラフ用だったか）をコピーすれば、それ自体が、json ファイルとなっている。

パラメーター
Commands
(Required) Specify a shell script or a command to run.


```
#!/bin/bash

cat << 'EOF' > /tmp/tmp.json
{
    "view": "timeSeries",
    "stacked": false,
    "metrics": [
        [ "CustmeMetrics Sample", "disk_used_percent", "path", "/", "InstanceId", "i-xxxxxx", "ImageId", "ami-xxxxxx", "InstanceType", "t2.small", "device", "xvda1", "fstype", "xfs" ],
        [ ".", "cpu_usage_idle", "InstanceId", "i-xxxxxx", "ImageId", "ami-xxxxxx", "cpu", "cpu0", ".", "." ],
        [ ".", "cpu_usage_iowait", ".", ".", ".", ".", ".", ".", ".", "." ],
        [ ".", "cpu_usage_user", ".", ".", ".", ".", ".", ".", ".", "." ],
        [ ".", "cpu_usage_system", ".", ".", ".", ".", ".", ".", ".", "." ],
        [ ".", "mem_used_percent", ".", ".", ".", ".", "InstanceType", "t2.small" ],
        [ ".", "swap_used_percent", ".", ".", ".", ".", ".", "." ]
    ],
    "width": 1514,
    "height": 250,
    "start": "-PT12H",
    "end": "P0D",
    "timezone": "+0900"
}
EOF
aws cloudwatch get-metric-widget-image --metric-widget file:///tmp/tmp.json --output-format "png" --output text --query MetricWidgetImage | base64 --decode > /tmp/metrics_moodle-workplace_12h.png
rm -f /tmp/tmp.json
```


得られた画像が、5分毎に、/tmp に上書きされていく。それを、どう見せるかという話だが、document root のあるディレクトリにおいて、digest 認証で守ればよいのではないか。

digest 認証について
https://qiita.com/miyazawa214/items/45c5e6a5109dc9e12e65

最初に IAM ユーザを作成した時にダウンロードした csv ファイルで確認できたIDとSECRET_KEY を /root/.aws/credentials に設定するのを忘れずに。

ちなみに、以下のようなポリシを IAMユーザ- onmise に与えている。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:GetDashboard",
                "cloudwatch:GetMetricWidgetImage",
                "cloudwatch:GetInsightRuleReport",
                "cloudwatch:DescribeAlarms"
            ],
            "Resource": "arn:aws:cloudwatch::*:dashboard/*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:DescribeInsightRules",
                "cloudwatch:GetMetricData",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:GetMetricWidgetImage",
                "cloudwatch:DescribeAnomalyDetectors"
            ],
            "Resource": "*"
        }
    ]
}
```

ちなみに、この一連の動作を再起動後も実行させるには、systemd のサービス化しておきたいところ。
以下のようなサービスを考えてみる。

```
#/etc/systemd/system/amazon-cloudwatch-agent-ctl.service

[Unit]
Description=Amazon CloudWatch Agent Ctl
After=network.target

[Service]
Type=simple
## ssm のパラメータから取ってくるところを見せないほうがいいとすれば、下の方がいいでしょう。
#ExecStart=/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m <ec2|onPremise> -c ssm:<ssm のパラメータストアにある名前>
ExecStart=/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -pidfile /opt/aws/amazon-cloudwatch-agent/var/amazon-cloudwatch-agent.pid
KillMode=process
Restart=on-failure
RestartSec=60s

[Install]
WantedBy=multi-user.target
```

```
# systemctl list-unit-files --type=service | grep amazon-cloudwatch-agent-ctl
amazon-cloudwatch-agent-ctl.service                              disabled
```

では、有効化して立ち上げておく。

```
# systemctl enable amazon-cloudwatch-agent-ctl
# systemctl start amazon-cloudwatch-agent-ctl
# systemctl status amazon-cloudwatch-agent-ctl
```

もし、ssm のパラメータストアでメトリクスを追加したり変更したならば、以下のコマンドで上記サービスを再起動すれば、新しいパラメータを引っ張ってくるはず。

```
# systemctl restart amazon-cloudwatch-agent-ctl
```
status でもわかりますが、コマンドは ssm からメトリクスパラメータを次のファイルにダウンロードするので、開いて内容を確認してみるとよい。というか、他人のサーバで実行する場合は、ssm のパラメータをダウンロードするのではなく、toml ファイルを直接編集した方がよい。


```
# less /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml 
```

いやいや、そんなことをしなくてもよかった。
実は、一回、AWS から設定をダウンロードしてきたら、以下のコマンドを実行しなければいけなかった。
このコマンドを実行すると、必要な設定が変わる、というか、このコマンドを実行しなければ変わらないようだ。

```
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
```

（引用：https://go-journey.club/archives/12931）

```
一度「/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s 」コマンドで設定を読み込む必要があります。

このコマンドで「/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml」と「/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json」が更新されます。
```

なお、config.json が鍵であることがわかった。これを使う、という config.json を取っておいて、それを指定して上記コマンドを実行すると、簡単になると考えられます。

また、collectd を起動すると、不要なログが大量に messages に出る件であるが、以下のハックがあり、それを実行したら止んだ。
`https://github.com/scylladb/scylla/commit/740d98901fd6aa79102a1aca4a7d11d188be8d14`

/etc/collectd.conf を編集した。

```
+ # dummy write_graphite to silent noisy warning
+ LoadPlugin network
+ <Plugin "network">
+         Server "127.0.0.1 65534"
+ </Plugin>
```


ーーーーーーーー
ここから調べて
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/download-CloudWatch-Agent-on-EC2-Instance-SSM-first.html
ここを見て
https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up.html#systems-manager-prereqs
ここに辿り着き（step3）
https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html
証明書がいる？
https://docs.aws.amazon.com/systems-manager/latest/userguide/hybrid-tls-certificate.html
ここからダウンロード？
https://www.amazontrust.com/repository/


コマンドで、値を取ってきたりしたい。できれば画像を取ってきて、たとえば、60秒ごとに置き換えたい。
https://htnosm.hatenablog.com/entry/2015/09/23/090000