記錄AWS相關資訊

前言

因為目前有使用到aws的服務,所以將相關的問題和資訊留下來,以免忘記。

1
2
3
4
5
6
7
8
9
10
11
12
13
ubuntu@ip-172-30-20-5:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 476M 0 476M 0% /dev
tmpfs 98M 764K 98M 1% /run
/dev/xvda1 7.7G 1.2G 6.6G 15% /
tmpfs 490M 0 490M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/loop0 33M 33M 0 100% /snap/snapd/11588
/dev/loop1 56M 56M 0 100% /snap/core18/1997
/dev/loop2 34M 34M 0 100% /snap/amazon-ssm-agent/3552
tmpfs 98M 0 98M 0% /run/user/1000ba

設定ubuntu相關

以下是有關設定ubuntu的相關資訊

設定vim

建立 vim 設定檔 .vimrc

1
2
3
4
5
6
7
$ cd ~
$ vim .vimrc # 建立新的vim設定檔


set cursorline
set tabstop=4
set shiftwidth=4

增加openfiles

查看當前打開檔案數

1
lsof | wc -l

Modify /etc/systemd/user.conf and /etc/systemd/system.conf with the following line (this takes care of graphical login):

兩個都要修改

1
DefaultLimitNOFILE=65535

Modify /etc/security/limits.conf with the following lines (this takes care of non-GUI login):

加入兩行

1
2
* hard nofile 65535
* soft nofile 65535

查看命令

1
ulimit -a

重新開機

加入swap

因為連入一個vscode,會造成CPU100%,所以來加大一下swap

參考資料

在開始之前,先下個 free 指定,檢查一下現在的 記憶體 和 SWAP 大小(使用 -h 自動轉換成容易閱讀的單位)

1
2
3
4
$ free -h
total used free shared buff/cache available
Mem: 978M 136M 511M 760K 330M 704M
Swap: 0B 0B 0B

接下來,先把 swapfile 關掉

1
$ sudo swapoff /swap.img

然後建立新的 swapfile

1
2
3
4
$ sudo rm /swap.img                    # 刪掉舊的
$ sudo fallocate -l 2G /swap.img # 建立新的
$ sudo ls -lh /swap.img # 顯示資訊
-rw-r--r-- 1 root root 1.0G Jun 9 16:06 /swap.img

改權限

1
2
3
$ sudo chmod 600 /swap.img        # 更改權限
$ ls -lh /swap.img # 顯示資訊
-rw------- 1 root root 1.0G Jun 9 16:06 /swap.img

格式化

1
sudo mkswap /swap.img

啟用 swap.img

1
sudo swapon /swap.img

檢查一下

1
2
3
$ cat /proc/swaps
Filename Type Size Used Priority
/swap.img file 1048572 0 -2

設定 /etc/fstab(如果本來沒有的話),請新增下面那一行

1
/swap.img none swap sw 0 0
1
2
3
4
5
6
7
8
9
10
11
12
ubuntu@ip-172-30-20-5:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 476M 0 476M 0% /dev
tmpfs 98M 764K 98M 1% /run
/dev/xvda1 7.7G 3.2G 4.6G 42% /
tmpfs 490M 0 490M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/loop0 56M 56M 0 100% /snap/core18/1997
/dev/loop1 34M 34M 0 100% /snap/amazon-ssm-agent/3552
/dev/loop2 33M 33M 0 100% /snap/snapd/11588
tmpfs 98M 0 98M 0% /run/user/1000

有安裝docker

1
2
3
4
5
6
7
8
9
10
11
12
ubuntu@nvt-temp-ec2:~$ sudo df -h
Filesystem Size Used Avail Use% Mounted on
udev 476M 0 476M 0% /dev
tmpfs 98M 780K 98M 1% /run
/dev/xvda1 7.7G 4.1G 3.7G 53% /
tmpfs 490M 0 490M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/loop1 56M 56M 0 100% /snap/core18/1997
/dev/loop0 34M 34M 0 100% /snap/amazon-ssm-agent/3552
/dev/loop2 33M 33M 0 100% /snap/snapd/11588
tmpfs 98M 0 98M 0% /run/user/1000

清理 systemd 的 journal 檔案

指令看目前使用的空間

1
du -d 0 -h /var/log/journal/

固定節省一些磁碟空間,可以在/etc/systemd/journald.conf

1
2
3
4
sudo vim /etc/systemd/journald.conf

SystemMaxUse=100M
SystemMaxFiles=21

記得重啟 systemd-journald 服務

1
sudo systemctl restart systemd-journald.service

logrotate 設定

Log rotate 設定檔在 /etc/logrotate.d/

分割設定: 在/etc/logrotate.d/目錄下生成該tool檔案hslogrotate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo vim /etc/logrotate.d/hslogrotate

/tmp/*.log {
daily
dateext
dateformat -%Y-%m-%d
missingok
rotate 15
compress
notifempty
copytruncate
delaycompress
su root root
}

logrotate命令格式

logrotate [OPTION…]

1
2
3
4
5
-d , --debug:debug模式,測試配置文件是否有錯誤
-f , --force:強制轉儲文件
-m , --mail=command:壓縮的日志後,發w奠日志到指定郵箱。
-s , --state=statefile:使用指定的狀態文件。
-v , --verbose:顯示轉儲過程

要測試寫好的設定檔可以用以下命令:

1
sudo /usr/sbin/logrotate -d /etc/logrotate.d/hslogrotate

要執行寫好的設定檔

1
sudo /usr/sbin/logrotate -vf /etc/logrotate.d/hslogrotate

log的寫法有兩種一種是清除檔案重新一個新檔

1
root python3.6 /usr/share/nginx/0_0/schedule/event_gop_to_mp4.py >> /tmp/cron_event_gop_to_mp4.log 2> /tmp/cron_event_gop_to_mp4.log

log的寫法有兩種一種是append檔案

1
root python3.6 /usr/share/nginx/0_0/schedule/event_gop_to_mp4.py >> /tmp/cron_event_gop_to_mp4.log 2>&1

修改主機名稱

例如,把主機名稱修改成 ubuntu-bionic-x64:

1
sudo hostnamectl set-hostname nvt-temp-ec2

時候終端機還看不出變化,我們可以用 hostnamectl status 檢查有沒有修改成功

修改完後沒有作用需要修改下面的檔案的值

1
# sudo vim /etc/cloud/cloud.cfg

在裏面修改preserve_hostname: true

Docker 容器設置日誌輪替

默認的日誌驅動程式

我們可以為容器配置不同的日誌記錄驅動程式,默認情況下容器的 stdoutstderr 會被寫入到 /var/lib/docker/containers/[container-id]/[container-id]-json.log 的 json 文件。如果一直無人理會,這個文件最終會佔用大量的磁盤空間,如下圖所示:

img

手動清除日誌

若果這個 json 日誌文件佔用了大量的磁盤空間,我們可以使用下面的命令清除它。

1
truncate -s 0 <logfile>

或者我們可以考慮設置一個 cronjob 來定期清除這些 json 日誌文件,但從長遠來看,最好還是設置日誌輪替。

配置默認的日誌驅動程式

默認的日誌驅動程式可以通過在 /etc/docker/daemon.json 中定義。如果該文件不存在,可以建立該文件。

1
2
3
4
5
6
7
8
sudo vim /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "10"
}
}

json-file 作日誌記錄驅動程式還有幾個其它選項,我們甚至可以更改為其他日誌記錄驅動程式,如 syslog 。有關更多信息,請參閱 Docker Docs - Configure logging drivers

執行以下命令來重新加載更新後的 daemon.js 。新的配置將在重新啟動後適用於所有新建立的容器。

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

為個別容器配置日誌驅動程式

如果您不想作全局配置,也可以在個別容器級作日誌驅動程式改動。

建立空的檔案

這是為了有時空間不足時,可以先來佔一塊檔案到時可以來刪除救系統

參考資料

1
dd if=/dev/zero of=./dd_100M bs=1M count=100

空間不足

參考資料

1
2
3
4
5
6
7
8
# 一般來說,使用 apt 內建的清理功能即可。autoclean 是清除快取。
sudo apt autoclean

# autoremove 則會連不需要的套件也自動移除掉。
sudo apt autoremove

# 如果還有一些檔案存於其中,像是 linux-aws-headers-x.xx.x-xxxx 這一類的,可以透過 purge 參數來手動刪除。
sudo apt purge linux-aws-headers-4.15.0-1051

設定定義private IP

因為自已有規劃好的pirvate IP,自已的subnet要先切好,就可以指定自已的private IP如下圖所示在Step3

AWS的Instance不可終止的設定

可以看到下圖的圖片在aws的停止instance(個體)有下面的選項,不要選終止執行個體,那會將你的服務器刪除並且不能還原你的服務器的資料也消失

所以為了防止不小心來執行這個指令,所以需要設定來防止發生,如下圖所示先選擇要改的服務器,在選擇動作執行個體設定變更終止保護

接下來如下圖來處理

註冊

在aws上的註冊,他是綁定信用卡的,所以要小心以免被扣錢。有一點要小心,就是在註冊時的電記,如果你是幫客戶註冊時,先留自已的手機,在驗證碼時,也是一樣的手機,不然會收不到簡訊驗證碼或是一些問題,此時只能使用aws的人工驗證,時效性會慢很多。在完成驗證碼和建立完服務後,可將電話修改回客戶的。

建立一台服務器

在服務中,選擇EC2建立一台EC2如下圖所示

選完後,接下來選擇啟動執行個體來啟動一個服務器如下圖所示

接下來選擇os的映像檔,如下圖所示

只能選擇免費

接來是很重要的一步,因為它關係著EC2啟動後,你能不能連進去的問題;這一頁的設定是屬於防火牆之類的設定,它可以控制那些IP、Port可以進出,所以我們先在這邊設定My IP(參考上圖紅框)可以連入,這樣我們才能在EC2啟動後連入進行操控。

在 EC2 中對於不同的實例可以搭配不同的安全設定
在這邊預設有用來連線到主機的 SSH 22 Port
如果要架設網站則會需要用到 HTTP 80 Port

在新增實例的步驟中,可以選擇「Create a new security group」
由「Add Rule」來新增所需要用到的 Port
或是也可以在完成新增實例後,到管理控制台編輯 Security Group
例如事後發現需要使用 Gmail 寄信的功能
就必須再新增一個 SMTPS 465 Port,Source 選 Anywhere

Key Pair 連線密鑰

Amazon EC2 主機必須要用特製的 Key Pair 來登入
上個步驟按下「Launch」後,如果是第一次新增實例
則會跳出 Create a new key pair 的視窗
此時為 key pair 取一個簡單的名字
按下「Download Key Pair」後則會自動下載一個 .pem

Launching 正式啟動

到這邊就完成新增實例的設定精靈
不過還必須替虛擬機器指定一個位址

登入建立好的服務器

查看服務器的列表從服務->EC2來找到需要的服務器,他會顯示IP和DNS,如下圖所示

在登入我是使用MobaXterm_Personal來登入,只要將pem檔加入就可以登入,帳號是ubuntu,如下圖所示

參考資料

https://akuma1.pixnet.net/blog/post/291725322-%ef%bc%88%e4%ba%8c%ef%bc%89ec2%ef%bc%88elastic-compute-cloud%ef%bc%89%ef%bc%8d%ef%bc%8daws%e7%b6%93%e9%a9%97%e6%95%99%e5%ad%b8

https://diary.taskinghouse.com/posts/310691-ssh-connection-amazon-ec2/

IAM

因為本來是使用root的權限來登入,一直到有一台客戶修改了密碼,所以登不進去以為被駭客入侵,所以決定來研究一下AWS的I AM的權限控制。先來選擇功能

會進入IAM的頁面,可以來編輯之登入的網址,不然預設是一串數字按下”編輯“,可以設定別名

先來建立群組

建立管理者

選擇建立管理者

輸入相關資訊

加入上面建立的群組,之後檢視

使用同一個image

因為服務器在建一是差不的,加上有一些已建立好的設定檔,所以需要在原來建立好的image檔上來安裝,所以來記錄一下不用每次都重新來安裝元件

前提是有一個已經安裝好的的服務器

先來建立image檔如下圖

輸入image的記錄如下圖

接下來建立新的EC2如下圖

增加EBS

在aws可以追加容量

https://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html

在連線到機器上
若要驗證每個磁碟區的檔案系統,請使用 df -hT 命令

1
df -hT

檢查磁碟區是否有必須擴展的分割區
請使用 lsblk 命令來顯示連接到執行個體區塊型儲存設備的相關資訊。

若要擴展根磁碟區上的分割區,請使用下列 growpart 命令。請注意,裝置名稱與分割區號碼之間有一個空格

1
2
sudo growpart /dev/xvda 1

因為是ext4 檔案系統

1
sudo resize2fs /dev/xvda1

掛載S3

如何掛載AWS S3 到AWS EC2

  • 在IAM操作
  • 建立一個使用者如nvts3
  • 建立一個使用者群組s3group可以AmazonS3FullAccess
  • 在S3操作
  • 建立一個nvts3儲存貯體
  • 建立policy
  • 到ec2操作

先設定AWS的S3

在IAM操作如下圖所示

建立一個group

如下的設定加入一個群組名和可以儲取s3

建立一個使用者和加上面設定的群組

如下的步驟

在S3上來操作如下圖所示

建立一個bucket

如下

編輯policy來儲取設定的s3

policy如下可以產生

修改一下json的Principal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"Version": "2012-10-17",
"Id": "Policy1625467201758",
"Statement": [
{
"Sid": "Stmt1625467197511",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::1111999999:user/userer"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::nvts3temp"
}
]
}

ec2的操作

在需要連接的ec2需要作此套件

先安裝需要用到的組件

1
sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config

正式安裝 s3fs

1
2
3
4
5
6
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh
./configure
make
sudo make install

必須修改 /etc/fuse.conf,移除 user_allow_other 前面的 # 註解

1
2
3
echo AK----------Z:6/E30ph324j19jvuB-------cEIla8cMeqt > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
chown -R ubuntu:root ~/.passwd-s3fs

掛載

1
2
3
4
cd ~
mkdir s3mnt
#將 bucket 掛載到指定的資料夾
s3fs nvts3temp /home/ubuntu/s3mnt/ -o allow_other -o passwd_file=~/.passwd-s3fs

缷載

1
umount -l /home/ubuntu/s3mnt

自動掛載

1
2
sudo vim /etc/fstab
nvts3temp /home/ubuntu/s3mnt fuse.s3fs _netdev,passwd_file=/home/ubuntu/.passwd-s3fs,allow_other 0 0

參考資料

如何掛載 AWS S3 到 AWS EC2 Instance - 掛載及卸載部份

利用S3fs在Amazon EC2 Linux实例上挂载S3存储桶

透過s3fs將s3 bucket掛載到linux系統

Router 53

在註冊完網域後,可以來註冊一下來連接網域和IP

如下來選擇

選擇要處理的Domain name,進入

會顯示下面的畫面

可以選擇Create record來加入A和IP