運(yùn)維人員必備的 Mac Zsh 配置技巧

作者: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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酌泰,隨后出現(xiàn)的幾起案子媒佣,更是在濱河造成了極大的恐慌,老刑警劉巖陵刹,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件默伍,死亡現(xiàn)場離奇詭異,居然都是意外死亡授霸,警方通過查閱死者的電腦和手機(jī)巡验,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碘耳,“玉大人显设,你說我怎么就攤上這事⌒帘妫” “怎么了捕捂?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斗搞。 經(jīng)常有香客問我指攒,道長,這世上最難降的妖魔是什么僻焚? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任允悦,我火速辦了婚禮,結(jié)果婚禮上虑啤,老公的妹妹穿的比我還像新娘隙弛。我一直安慰自己,他們只是感情好狞山,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布全闷。 她就那樣靜靜地躺著,像睡著了一般萍启。 火紅的嫁衣襯著肌膚如雪总珠。 梳的紋絲不亂的頭發(fā)上屏鳍,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音局服,去河邊找鬼钓瞭。 笑死,一個胖子當(dāng)著我的面吹牛腌逢,可吹牛的內(nèi)容都是我干的降淮。 我是一名探鬼主播超埋,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼搏讶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霍殴?” 一聲冷哼從身側(cè)響起媒惕,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎来庭,沒想到半個月后妒蔚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡月弛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年肴盏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帽衙。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡菜皂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厉萝,到底是詐尸還是另有隱情恍飘,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布谴垫,位于F島的核電站章母,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏翩剪。R本人自食惡果不足惜乳怎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望前弯。 院中可真熱鬧蚪缀,春花似錦、人聲如沸博杖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剃根。三九已至哩盲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背廉油。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工惠险, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抒线。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓班巩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘶炭。 傳聞我的和親對象是個殘疾皇子抱慌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容