作者:SRE運(yùn)維博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/241022203423/
相關(guān)話題:https://www.cnsre.cn/tags/aws/
運(yùn)維人員必備的 Mac Zsh 配置技巧
作為一名運(yùn)維工程師遇伞,我們在日常工作中經(jīng)常需要與 AWS 打交道兰珍。為了提高工作效率藕溅,我在 Mac 的 Zsh 中配置了一些實(shí)用的函數(shù)和別名。今天杯矩,我想分享這些配置栈虚,并通過實(shí)際演示,幫助大家更好地理解和使用它們菊碟。
一节芥、簡化 EC2 實(shí)例類型查詢
1.1 使用 ec2spot
快速篩選 Spot 實(shí)例
當(dāng)我們需要根據(jù)價格和配置選擇合適的 EC2 Spot 實(shí)例時,可以使用以下別名:
alias ec2spot='ec2-instance-selector -o table-wide --cpu-architecture x86_64 --sort-by spot-price'
演示:
在終端中輸入:
ec2spot --vcpus 4 --memory 16
這將列出所有具有 4 個 vCPU 和 16 GB 內(nèi)存的實(shí)例類型逆害,并按照 Spot 價格排序头镊,方便我們選擇性價比最高的實(shí)例。
1.2 使用 ec2type
函數(shù)查看實(shí)例詳細(xì)信息
有時候魄幕,我們需要深入了解某個實(shí)例類型的配置細(xì)節(jié)相艇。ec2type
函數(shù)可以幫助我們快速獲取這些信息。
ec2type() {
if [ -z "$1" ]; then
echo "Usage: ec2type <instance-type>"
return 1
fi
aws ec2 describe-instance-types \
--instance-types "$1" \
--query 'InstanceTypes[0].[InstanceType, VCpuInfo.DefaultVCpus, MemoryInfo.SizeInMiB, InstanceStorageInfo, NetworkInfo.NetworkPerformance, ProcessorInfo.SupportedArchitectures]' \
--output table
}
演示:
在終端中輸入:
ec2type t3.large
輸出:
-------------------------
| DescribeInstanceTypes |
+--------------+----------------------+
| InstanceType| t3.large |
| DefaultVCpus| 2 |
| SizeInMiB | 8192 |
| NetworkPerformance| Up to 5 Gigabit|
| SupportedArchitectures| ["x86_64"] |
+--------------+----------------------+
通過這個輸出纯陨,我們可以清楚地看到實(shí)例的 CPU坛芽、內(nèi)存、網(wǎng)絡(luò)性能和支持的架構(gòu)等信息翼抠。
二咙轩、便捷的 SSM 會話管理
2.1 使用 ssm
函數(shù)快速連接實(shí)例
AWS Systems Manager(SSM)允許我們在不使用 SSH 密鑰的情況下安全地連接 EC2 實(shí)例。下面的 ssm
函數(shù)簡化了這一過程:
function ssm() {
local instance_id=$1
aws ssm start-session --target "$instance_id" --region cn-north-1
}
演示:
在終端中輸入:
ssm i-0abcdef1234567890
這將啟動與指定實(shí)例的 SSM 會話阴颖,方便我們進(jìn)行遠(yuǎn)程管理活喊。
2.2 使用 ec2
函數(shù)交互式選擇并連接實(shí)例
為了更方便地查找并連接運(yùn)行中的 EC2 實(shí)例,我們可以使用 ec2
函數(shù):
function ec2() {
local search_term=$1
# 查詢運(yùn)行中的實(shí)例并顯示實(shí)例ID和Name標(biāo)簽
local instances
instances=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--region cn-north-1 \
--query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value[]]' \
--output text | grep -i "$search_term")
if [[ -z "$instances" ]]; then
echo "未找到與搜索詞匹配的運(yùn)行實(shí)例: $search_term"
return 1
fi
# 顯示匹配的實(shí)例列表并編號
echo "匹配的實(shí)例:"
local i=1
while read -r line; do
echo "$i. $line"
((i++))
done <<< "$instances"
# 提示用戶選擇
local instance_number
read -p "請輸入實(shí)例編號以通過 SSM 連接: " instance_number
# 獲取實(shí)例 ID
local instance_id=$(echo "$instances" | sed -n "${instance_number}p" | awk '{print $1}')
if [[ -z "$instance_id" ]]; then
echo "無效的選擇量愧。"
return 1
fi
echo "正在連接實(shí)例 ID: $instance_id"
ssm "$instance_id"
}
演示:
在終端中輸入:
ec2 web-server
假設(shè)我們有以下運(yùn)行中的實(shí)例:
匹配的實(shí)例:
1. i-0abcdef1234567890 Web-Server-1
2. i-0abcdef1234567891 Web-Server-2
然后钾菊,輸入實(shí)例編號:
請輸入實(shí)例編號以通過 SSM 連接: 1
系統(tǒng)將連接到 i-0abcdef1234567890
實(shí)例。
三偎肃、輕松管理 S3 的 s3
函數(shù)
s3
函數(shù)提供了對 S3 的常用操作煞烫,包括上傳、下載累颂、刪除和生成簽名 URL滞详。
function s3() {
local operation="$1"
shift 1 # 移除第一個參數(shù),剩下的參數(shù)重新編號
case "$operation" in
up) # 上傳文件
local bucket_name="$1"
local local_file_path="$2"
if [[ -z "$bucket_name" || -z "$local_file_path" ]]; then
echo "用法: s3 up <bucket_name> <local_file_path>"
return 1
fi
if [[ ! -f "$local_file_path" ]]; then
echo "本地文件 $local_file_path 不存在紊馏。"
return 1
fi
local object_key="$(basename "$local_file_path")"
aws s3 cp "$local_file_path" "s3://$bucket_name/$object_key" --region cn-north-1
echo "文件已上傳到 s3://$bucket_name/$object_key料饥。"
;;
down) # 下載文件
local s3_path="$1"
local local_file_path="$2"
if [[ -z "$s3_path" ]]; then
echo "用法: s3 down <bucket_name>/<object_key> [local_file_path]"
return 1
fi
local bucket_name="${s3_path%%/*}"
local object_key="${s3_path#*/}"
if [[ -z "$bucket_name" || -z "$object_key" ]]; then
echo "請?zhí)峁┯行У?S3 路徑,例如:my-bucket/path/to/object.txt"
return 1
fi
if [[ -z "$local_file_path" ]]; then
local_file_path="$(basename "$object_key")"
fi
aws s3 cp "s3://$bucket_name/$object_key" "$local_file_path" --region cn-north-1
echo "文件已下載到 $local_file_path瘦棋。"
;;
del) # 刪除文件
local s3_path="$1"
if [[ -z "$s3_path" ]]; then
echo "用法: s3 del <bucket_name>/<object_key>"
return 1
fi
local bucket_name="${s3_path%%/*}"
local object_key="${s3_path#*/}"
if [[ -z "$bucket_name" || -z "$object_key" ]]; then
echo "請?zhí)峁┯行У?S3 路徑稀火,例如:my-bucket/path/to/object.txt"
return 1
fi
aws s3 rm "s3://$bucket_name/$object_key" --region cn-north-1
echo "文件 s3://$bucket_name/$object_key 已刪除。"
;;
url) # 生成限時5分鐘的簽名URL
local s3_path="$1"
if [[ -z "$s3_path" ]]; then
echo "用法: s3 url <bucket_name>/<object_key>"
return 1
fi
local bucket_name="${s3_path%%/*}"
local object_key="${s3_path#*/}"
if [[ -z "$bucket_name" || -z "$object_key" ]]; then
echo "請?zhí)峁┯行У?S3 路徑赌朋,例如:my-bucket/path/to/object.txt"
return 1
fi
local signed_url
signed_url=$(aws s3 presign "s3://$bucket_name/$object_key" --expires-in 300 --region cn-north-1)
echo "文件 s3://$bucket_name/$object_key 的限時5分鐘公網(wǎng)訪問"
echo "你可以使用以下命令通過 wget 下載文件:"
echo "wget -O $(basename "$object_key") \"$signed_url\""
;;
*)
echo "無效的操作凰狞。用法:"
echo " s3 up <bucket_name> <local_file_path> # 上傳文件"
echo " s3 down <bucket_name>/<object_key> [local_file_path] # 下載文件"
echo " s3 del <bucket_name>/<object_key> # 刪除文件"
echo " s3 url <bucket_name>/<object_key> # 生成限時5分鐘的公網(wǎng)URL"
return 1
;;
esac
}
3.1 上傳文件到 S3
演示:
s3 up my-bucket /path/to/file.txt
輸出:
文件已上傳到 s3://my-bucket/file.txt。
3.2 從 S3 下載文件
演示:
s3 down my-bucket/path/to/file.txt /local/path/file.txt
輸出:
文件已下載到 /local/path/file.txt沛慢。
3.3 刪除 S3 中的文件
演示:
s3 del my-bucket/path/to/file.txt
輸出:
文件 s3://my-bucket/path/to/file.txt 已刪除赡若。
3.4 生成限時訪問的簽名 URL
演示:
s3 url my-bucket/path/to/file.txt
輸出:
文件 s3://my-bucket/path/to/file.txt 的限時5分鐘公網(wǎng)訪問
你可以使用以下命令通過 wget 下載文件:
wget -O file.txt "https://s3.cn-north-1.amazonaws.com.cn/my-bucket/path/to/file.txt?AWSAccessKeyId=..."
四、總結(jié)
通過這些實(shí)用的 Zsh 配置团甲,我們可以大大提升在命令行中操作 AWS 資源的效率逾冬。不再需要繁瑣的命令輸入,也不必記住復(fù)雜的參數(shù)。只需簡單的函數(shù)調(diào)用身腻,我們就能完成日常的運(yùn)維任務(wù)产还。
如果你也有自己的小妙招,歡迎分享出來嘀趟,一起交流脐区,共同進(jìn)步!
讓我們一起高效運(yùn)維她按,享受命令行的樂趣吧牛隅!
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4855142804875926"
crossorigin="anonymous"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-4855142804875926"
data-ad-slot="5670838583"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
作者:SRE運(yùn)維博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/241022203423/
相關(guān)話題:https://www.cnsre.cn/tags/aws/