linuxのホスト作る時は、amazonlinuxかubuntu使ってる。

redhatでホスト作る場面は今のところないけど、試験作成ではalmalinuxで使う。

amazonlinuxはdnfとか使えるから、redhat系を常用してる人には優しいかも。

使い始めの設定

ec2-linuxを使い始めるための設定でいっつもやってる内容のメモ。

ホスト名を変更設定

名前が勝手につくからaws-ec2のホスト名変える。

ファイアウォールを無効化

セキュリティグループで歯止めするからファイアウォールは使わん。

もし設定されてたら停止かアンインストール。

タイムゾーンを日本に変更

毎回ググるけどosによってどれかをやってる。

時刻同期サーバを設定

昔はntpd使ってた。

最近はchrony使う。

aws内部にntpサーバあるから解説にある設定そのまま実施。amazonlinuxやったら最初から設定できてたはず。

ルート以外のドライブあるときはフォーマットしてマウント

フォーマットして使う。windowsホストから見えるようにしとくと楽になるからsambaで共有してること多い。

ec2ホストに権限つける

IAMでロール作って、cloudwatchに書き込みする権限をつける。

ec2-linux

aws cliインストール

インストールしとく。

CloudWatchAgentインストール

こっちもインストールしとく。そういえばubuntuで入れたことないな。

CloudWatchログ保管設定

amazonlinux2023でやったこと。

エージェントをインストールする。

sudo dnf install amazon-cloudwatch-agent

設定ファイルのconfig.jsonを作る。

エージェントの設定のため、ウィザード使う。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

設定けっこう長い。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
[gvisadmin@ip-172-16-20-137 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
1 ⭐️linuxなので1を選択
Trying to fetch the default region based on ec2 metadata...
2023/12/12 06:36:33 I! imds retry client will retry 1 times
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1 ⭐️ec2なので1を選択
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
1 ⭐️実行ユーザはrootで1を選択
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2 ⭐️cloudwatchに飛ばすだけでstatsDデーモン不要のため2を選択
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2 ⭐️cloudwatchに飛ばすだけなので不要のため2を選択
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
2 ⭐️cloudwatchに飛ばすだけでメトリクス不要なので2を選択
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2 ⭐️設定ファイルはこれから作るので2を選択
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
1
Log file path:
/var/log/audit/audit.log ⭐️OSのログファイルを指定
Log group name:
default choice: [audit.log]
bastion-/var/log/audit/audit.log ⭐️awsコンソールで表示するグループ名を指定
Log stream name:
default choice: [{instance_id}]
bastion-/var/log/audit/audit.log ⭐️awsコンソールで表示するストリーム名を指定
Log Group Retention in days
1. -1
2. 1
3. 3
4. 5
5. 7
6. 14
7. 30
8. 60
9. 90
10. 120
11. 150
12. 180
13. 365
14. 400
15. 545
16. 731
17. 1096
18. 1827
19. 2192
20. 2557
21. 2922
22. 3288
23. 3653
default choice: [1]:
1 ⭐️無期限として「1. -1」を指定
Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
2 ⭐️他に指定ログないので2を指定
Do you want the CloudWatch agent to also retrieve X-ray traces?
1. yes
2. no
default choice: [1]:
2 ⭐️X-ray traceは不要なので2を指定
Existing config JSON identified and copied to:  /opt/aws/amazon-cloudwatch-agent/etc/backup-configs
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully. ⭐️ここに保存されるだけでまだ使えん
Current config as follows:
{
        "agent": {
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/audit/audit.log",
                                                "log_group_name": "bastion-/var/log/audit/audit.log",
                                                "log_stream_name": "bastion-/var/log/audit/audit.log",
                                                "retention_in_days": -1
                                        }
                                ]
                        }
                }
        }
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2 ⭐️ssmは不要なので2を指定
Program exits now.
[gvisadmin@ip-172-16-20-137 ~]$

できたファイルを設置先にコピーする。

1
2
3
4
5
6
7
[gvisadmin@ip-172-16-20-137 ~]$ sudo cp -p /opt/aws/amazon-cloudwatch-agent/bin/config.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
[sudo] password for gvisadmin:
[gvisadmin@ip-172-16-20-137 ~]$
:(中略)
[root@ip-172-16-20-137 ~]# ls -l /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
-rw-r--r--. 1 root root 342 Dec 12 06:41 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
[root@ip-172-16-20-137 ~]#

CloudWatchエージェントを起動

エージェントのサービスを有効にして起動する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@ip-172-16-20-137 audit]# systemctl status amazon-cloudwatch-agent.service
○ amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; disabled; preset: disabled)
     Active: inactive (dead) ⭐️最初は動いてへん
[root@ip-172-16-20-137 audit]#

[root@ip-172-16-20-137 audit]# systemctl enable amazon-cloudwatch-agent.service ⭐️サービスを有効にしとく
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service → /etc/systemd/system/amazon-cloudwatch-agent.service.
[root@ip-172-16-20-137 audit]# systemctl start amazon-cloudwatch-agent ⭐️サービス起動
[root@ip-172-16-20-137 audit]# systemctl status amazon-cloudwatch-agent.service
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; preset: disabled)
     Active: active (running) since Tue 2023-12-12 06:55:01 UTC; 1s ago ⭐️動いた
   Main PID: 469197 (amazon-cloudwat)
      Tasks: 7 (limit: 1061)
     Memory: 106.8M
        CPU: 267ms
     CGroup: /system.slice/amazon-cloudwatch-agent.service
             mq469197 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/a>

Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal systemd[1]: Started amazon-cloudwatch-agent.service - Amazon Clo>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: D! [EC2] Found active net>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: 2023/12/12 06:55:01 I! im>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: I! Detected the instance >
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: 2023/12/12 06:55:01 Readi>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: 2023/12/12 06:55:01 I! Va>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: I! Detecting run_as_user.>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: I! Trying to detect regio>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469203]: 2023/12/12 06:55:01 Confi>
Dec 12 06:55:01 ip-172-16-20-137.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[469197]: I! Detecting run_as_user.>

ログ出とる。

ec2-linux

CloudWatchログの保管設定

ec2-windowsでもやったけど、保管期間設定しとかんと溜まり続ける。

aws

3年ぐらいとか設定でええ。

aws

CloudWatchメトリクス取得設定

踏み台として稼働させることのほうが多いから、メトリクス設定はあんまりやらん。

設定したいときは、さっきのエージェント設定ウィザードの質問でyesを答える。

Do you want to monitor any host metrics? e.g. CPU, memory, etc.

そうやなければ、作ったconfig.json ec2-windowsで使った設定ファイル をマージして使えばええ。

EFSマウント

EFS はフルマネージドのファイルシステムなんやて。

たまに使う。

ebs/s3/efsって性質違うけど、できること似てるから混同するなぁ。

EFSをec2-linuxホストにマウントできる。長いコマンドラインやけど、EFSのコンソール画面で接続文字列提供してくれる。

mount -t nfs4 -o accesspoint=fsap-xxx,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=100,retrans=2,noresvport fs-xxx.efs.ap-northeast-1.amazonaws.com:/ /GVIS-efs

つないでdfしたらこう見える。サイズが8.0Eって書いてある。

ec2-linux

初めて見たけど、8エクサバイトって、800京バイト=8000ペタバイト=800万テラバイトやな。

サイズどのぐらい

800万テラってどのぐらいやねん。8TBのディスクが100万個ってイメージ湧きにくい。

ちょっとアホな想像。

buffaloの外付け8TB-HDD が税込定価で1個5万円ほど。厚さ39mm。

単純計算で500億円分の回転ディスクがあるってことか。

1箇所に置いてるわけないやろけど、かさばるやろなぁ。電力も放熱もツライやろなぁ。

厚さ39mmを100万個積み上げたとしたら、3900万mm=390万cm=39000m=39km、大阪からやったら阪神高速の湾岸線通ってポートアイランドまで行ける距離。

実容量で800万テラバイトやから、冗長ディスク含んだらもっといっぱいディスクあることになるやんなぁ。

ハードディスクコントローラとかどうしてるんやろ。

8TBのディスク故障率が1年で1%やとしても、100万の1%=1万÷365=27.397ぐらいやから毎日27〜28個ずつ壊れてくんか。

大阪からポートアイランドまでに敷き詰めたディスクを、毎日27〜28個ずつ特定して交換するなんてゾッとする。

市販品使ってるわけないやろし、運用設計でええ方法編み出しるんやろけど、維持たいへんやろな。

windowsホストから見えるか

EFSつけたマウントポイントをsambaで共有したら、なんとec2-windowsホストからも使える。

net useでドライブ接続してドライブのプロパティ見たら800万テラバイトちょっと切ってる。数値が表示されるまでworkingって状態が5分続いた。

ec2-linux

「大きなファイルを保管利用できてええなぁ」って思うけど、費用が青天井になってまうから怖い。

「売るほどある」っちゅうのはこういうことやな。

ただ、ec2-windowsホストからドライブ共有先のEFSにdjangoのソース置いてvscodeでgitの履歴見ようとしたら、表示終わるまでカクンカクン動いてしもて、更新数見えるまで1時間ですまへんぐらい待たされた。

やり方あるかもしれんけど、使い物にならんかったから即日利用とりやめ。

ec2-linux

定期的なバックアップとして、tar.gzで固めたファイルを保管するのはええけど、小さいファイルの大量処理はうまいこといかんな。

docker設定

amazonlinux2023でもdockerは動く。

1つか2つぐらいやったらec2-linuxホストにサービス設定してもええけど、dbとかアプリとかを個別にチマチマ入れるの面倒やし、compose.yaml書いてたらそのまま使えるからdocker使うのやめられへん。

試験構築したときメモリ16GBぐらい欲しかったから、 マシンタイプ t3.xlargeを設定。

docker.serviceのバージョン見てるとubuntu版よりは少しだけ古いし、コマンドラインでdocker compose使ったらcompose.yamlに書いたサービス名の補完ができんかった(見つけられんだけやったかもしれんけど)。

xrdpコンテナ 作って動かしたり、 jupyterコンテナ djangoコンテナ mariadbコンテナ も同じように動かせる。

dockerイメージを ECR のレジストリに保管するためのセキュリティグループの設定難しかったけど、 ECS で動かしたことあったな。

ECSはkubernetesと比べたら、なんちゃってコンテナクラスタで、慣れたら構築早いんかもしれん。

少しは楽に動かせるかもしれんけど、独特の設定必要やし覚えにくい。

自分はdocker/minikube/microk8sの順に覚えたから、ECSやなくて EKS のほうがスンナリ入れるんかもな。

すぐに使う場面なさそうや。