Cloud Custodian 是一款開源的雲端資源管理工具,能協助企業有效實施 FinOps 策略,降低雲端成本並提升資源使用效率。它透過定義策略(Policy)來監控和管理雲端資源,涵蓋 AWS、Azure 和 GCP 等主流平台。Cloud Custodian 支援多種運作模式,包含定期執行、事件觸發和即時監控,可根據企業需求彈性組態。除了成本最佳化,Cloud Custodian 也能提升安全性,例如自動刪除未加密的 EBS 磁碟區或停止未使用的 EC2 執行個體,降低潛在風險。此外,Cloud Custodian 還能自動化標記資源,方便追蹤和管理,並支援通知機制,讓管理者即時掌握資源狀態變化。
Cloud Custodian 實務操作與應用
Cloud Custodian 是一款強大的開源工具,用於管理和監控雲端資源。本文將介紹其基本操作、進階功能以及在不同雲端平台上的應用。
基本操作與報告生成
Cloud Custodian 的基本操作包括執行策略(policy)和生成報告。以下是一個簡單的例子,展示如何使用 c7n
命令執行策略並生成報告:
# 執行策略並生成報告
$ c7n report -s output --format simple policies/ec2-ebs-nonencrypted.yml \
--no-default-fields --field id=InstanceId --field type=InstanceType \
--field ip=PrivateIpAddress
內容解密:
此命令的作用是執行 ec2-ebs-nonencrypted.yml
策略,並生成一個簡單的報告。報告中包含了 EC2 例項的 ID、型別和私有 IP 地址。
--no-default-fields
引數用於移除預設欄位。--field
引數用於新增自定義欄位,例如id=InstanceId
表示將InstanceId
對映到id
欄位。
輸出的報告如下:
id type ip
------------------- -------- ------------
I-02178... t2.micro 10.41.55.34
I-0d93... t2.micro 10.41.55.27
I-0bbf... t2.micro 10.41.55.107
CloudTrail 模式與 Lambda 函式
Cloud Custodian 支援 CloudTrail 模式,可以透過 AWS Lambda 函式觸發策略執行。以下是一個範例策略,用於在建立 EC2 例項時自動新增標籤:
# CloudTrail 觸發的 Lambda 策略
policies:
- name: ec2-tag-new
resource: aws.ec2
description: |
自動標記新建立的 EC2 例項
mode:
type: cloudtrail
tags:
billing: lob-cc
env: sandbox
owner: jimmyray
role: <ROLE_NAME_OR_ARN>
events:
- RunInstances
actions:
- type: tag
tags:
billing: lob-cc
env: sandbox
owner: jimmyray
內容解密:
此策略定義了一個名為 ec2-tag-new
的 Cloud Custodian 策略,用於在建立新的 EC2 例項時自動新增標籤。
mode.type: cloudtrail
表示此策略由 CloudTrail 事件觸發。events: RunInstances
指定了觸發策略的事件為RunInstances
,即建立 EC2 例項的操作。actions
部分定義了策略執行的動作,此處為新增標籤。
策略驗證與佈署
在佈署策略之前,可以使用 c7n validate
命令驗證策略檔案的正確性:
# 驗證策略檔案
$ c7n validate policies/cloudtrail/ct-ec2-tag-new-instance.yml
驗證透過後,可以使用 c7n run
命令佈署策略到 AWS 環境中:
# 佈署策略到 AWS 環境
$ c7n run -s output policies/cloudtrail/ct-ec2-tag-new-instance.yml
內容解密:
佈署過程中,Cloud Custodian 會在 AWS 賬戶中建立一個 Lambda 函式和相關的 EventBridge 規則,用於監聽 CloudTrail 事件並觸發策略執行。
資源清理
完成測試後,可以使用 mugc.py
指令碼清理由 Cloud Custodian 建立的 AWS 資源:
# 清理 AWS 資源
$ python3 mugc.py -c policies/cloudtrail/ct-ec2-tag-new-instance.yml --present
內容解密:
此命令會刪除由 ct-ec2-tag-new-instance.yml
策略建立的 Lambda 函式和 EventBridge 規則,確保資源被正確清理。
多雲支援
除了 AWS,Cloud Custodian 也支援 Azure 和 GCP 平台。在這些平台上,可以使用類別似的機制實作根據事件的策略執行。例如,在 Azure 上,可以使用 Azure Event Grid 和 Azure Functions;在 GCP 上,可以使用 API Audit Log Events 和 Cloud Functions。
使用 Cloud Custodian 實作 FinOps
前言
在雲端運算的世界中,成本管理是一個重要的課題。FinOps(Financial Operations)是一種結合財務管理和 DevOps 實踐的方法,旨在最佳化雲端資源的使用並降低成本。Cloud Custodian(c7n)是一個開源工具,可以幫助實作 FinOps 的目標。
FinOps 的定義
FinOps Foundation 將 FinOps 定義為財務營運和 DevOps 的結合。它強調在雲端工程過程中早期匯入成本管理的概念,而非僅在雲端成本過高時才進行處理。
FinOps 的文化意義
FinOps 不僅是一種技術實踐,也是一種文化變革。它需要將成本意識(Cloud Cost Consciousness, CCC)融入組織文化中,讓團隊在建立和管理雲端資源時能夠意識到成本的重要性。
使用 Cloud Custodian 實作 FinOps 控管
Cloud Custodian 可以透過多種模式執行,以實作 FinOps 控管。其中一個常見的浪費情況是雲端運算資源被過度組態但未充分利用。以下是一些使用 c7n 政策來減少運算浪費的範例:
檢查未充分利用的 EC2 例項
policies:
- name: underutilized-ec2-instances
resource: aws.ec2
filters:
- type: metrics
name: CPUUtilization
statistic: Average
days: 30
value: 5
op: le
actions:
- type: stop
force: true
內容解密:
此政策選取過去 30 天內平均 CPU 使用率小於或等於 5% 的 EC2 例項,並將其停止以節省成本。
resource: aws.ec2
指定了要管理的資源型別為 EC2 例項。filters
部分使用 CloudWatch 指標來篩選例項。type: metrics
表示使用 CloudWatch 指標進行篩選。name: CPUUtilization
指定要檢查的指標是 CPU 使用率。statistic: Average
表示計算平均值。days: 30
指定檢查的時間範圍為過去 30 天。value: 5
和op: le
表示篩選出 CPU 使用率小於或等於 5% 的例項。
actions
部分定義了對篩選出的例項執行的動作。type: stop
表示停止例項。force: true
表示強制停止例項。
自動化標記和清理資源
另一個常見的浪費情況是資源未被正確標記,導致難以追蹤和清理。以下是一個自動化標記資源的範例:
policies:
- name: tag-resources
resource: aws.ec2
filters:
- or:
- "tag:billing": absent
- "tag:env": absent
- "tag:owner": absent
actions:
- type: tag
tags:
billing: lob-cc
env: sandbox
owner: jimmyray
內容解密:
此政策選取未被正確標記的 EC2 例項,並為其新增必要的標籤。
filters
部分檢查例項是否缺少特定的標籤。actions
部分為篩選出的例項新增標籤。
隨著雲端運算的不斷發展,FinOps 和 Cloud Custodian 的應用將變得越來越重要。未來,我們可以期待看到更多關於如何使用 c7n 來實作 FinOps 的最佳實踐和案例研究。同時,隨著雲端服務提供商不斷推出新的服務和功能,c7n 也將不斷演進,以支援更多的資源型別和更複雜的管理需求。
Cloud Custodian 工作流程
graph LR; A[開始] --> B[定義政策]; B --> C[選擇資源]; C --> D[套用篩選條件]; D --> E[執行動作]; E --> F[結果輸出]; F --> G[結束];
圖表翻譯: 此圖表示 Cloud Custodian 的工作流程。首先定義政策,然後選擇要管理的資源,接著套用篩選條件,最後執行相應的動作並輸出結果。
雲端資源管理最佳化:利用 Cloud Custodian 實踐 FinOps 策略
在現代雲端運算環境中,如何有效管理與最佳化資源使用已成為企業的重要課題。Cloud Custodian 作為一個強大的開源工具,能夠幫助企業實施 FinOps(Financial Operations)策略,以降低成本、提升資源利用率並增強安全性。本文將探討如何利用 Cloud Custodian 制定各種 FinOps 策略,以最佳化 AWS 與 Azure 等雲端平台上的資源使用。
CPU 使用率過低的 EC2 例項管理
針對 CPU 使用率長期偏低的 EC2 例項,Cloud Custodian 可以制定精確的策略進行自動化管理。以下是一個典型的策略範例:
policies:
- name: ec2-cpu-metrics
resource: aws.ec2
filters:
- type: metrics
name: CPUUtilization
days: 14
value: 5.0
missing-value: 0
op: lte
actions:
- stop
- type: tag
tags:
c7n-status: cpu-underutilized
- type: notify
to:
- event-user
- resource-creator
- jimmyray@example.com
owner_absent_contact:
- backup@example.com
template: policy-template
transport:
type: sqs
region: us-east-1
queue: c7n-message-queue
內容解密:
- 策略目的:針對過去 14 天內平均 CPU 使用率低於 5% 的 EC2 例項採取行動。
- 主要動作:
- 停止例項運作
- 新增標籤標記狀態
- 透過 SQS 佇列傳送通知給相關人員
- 通知機制:
- 通知物件包括事件使用者、資源建立者和特定信箱地址
- 若資源擁有者無法聯絡,則通知備用聯絡人
大型計算例項的主動管理
對於大型計算例項,企業可以制定主動檢測與管理的策略。以下是一個根據 CloudTrail 事件的策略範例:
vars:
large-instance-types: &large-instance-types
- m7i.8xlarge
- m7i.12xlarge
- m7i.16xlarge
- m7i.24xlarge
- m7i.48xlarge
policies:
- name: ec2-stop-larges
resource: aws.ec2
mode:
type: cloudtrail
tags:
billing: lob-cc
env: sandbox
owner: jimmyray
role: <ROLE_NAME_OR_ARN>
events:
- RunInstances
filters:
- type: value
key: InstanceType
value: *large-instance-types
op: in
actions:
- stop
- type: tag
tags:
c7n-status: ec2-too-large
內容解密:
- 策略核心:監控特定大型例項型別的建立事件。
- 關鍵過濾條件:
- 例項型別必須在預定義的大型例項列表中。
- 執行動作:
- 自動停止符合條件的例項。
- 新增自定義標籤以記錄處理狀態。
RDS 資料函式庫例項最佳化
針對 RDS 例項的最佳化同樣重要,以下是兩個針對不同場景的策略:
低利用率 RDS 例項檢測
policies:
- name: rds-underutilized
resource: aws.rds
filters:
- type: value
value-type: age
key: InstanceCreateTime
value: 14
op: gt
- type: metrics
name: CPUUtilization
statistics: average
days: 14
value: 10
missing-value: 0
op: lte
actions:
- stop
未使用的 RDS 例項檢測
policies:
- name: rds-unused
resource: aws.rds
filters:
- type: value
value_type: age
value: 14
op: gte
- type: metrics
name: DatabaseConnections
days: 14
value: 0
missing-value: 0
op: eq
內容解密:
- 低利用率檢測:
- 篩選出已存在超過 14 天且平均 CPU 使用率低於 10% 的 RDS 例項。
- 未使用檢測:
- 篩選出已存在至少 14 天且過去兩週無任何資料函式庫連線的 RDS 例項。
虛擬磁碟與負載平衡器最佳化
未使用的 EBS 磁碟區清理
policies:
- name: ebs-volumes-avail-14
resource: aws.ebs
filters:
- Attachments: []
- type: value
key: CreateTime
value_type: age
op: gte
value: 14
actions:
- snapshot
- delete
未使用的 Azure 磁碟檢測
policies:
- name: azure-disk-orphan
resource: azure.disk
filters:
- type: value
key: managedBy
value: null
空閒的 ELB 負載平衡器檢測
policies:
- name: els-no-instances
resource: aws.elb
filters:
- Instances: []
- type: value
key: CreateTime
value_type: age
op: gte
value: 1
圖表翻譯:
此圖示呈現了不同雲端資源最佳化策略之間的關聯性與執行流程。
graph LR A[開始] --> B{資源型別} B -->|EC2| C[CPU利用率檢查] B -->|RDS| D[資料函式庫連線檢查] B -->|EBS| E[掛載狀態檢查] C -->|低利用率| F[停止例項] D -->|無連線| G[停止資料函式庫] E -->|未掛載| H[快照並刪除] F --> I[通知相關人員] G --> I H --> I
圖表翻譯:
此圖表展示了根據不同雲端資源型別(EC2、RDS、EBS)的最佳化流程。系統會根據各資源的特定指標(如 CPU 利用率、資料函式庫連線數、掛載狀態)進行檢查,並對不符合預期的資源採取相應的最佳化措施(如停止執行個體、停止資料函式庫、建立快照並刪除),最後通知相關人員。
非工作時間自動排程管理
為了進一步最佳化資源使用,企業可以實施根據時間的自動化管理策略:
policies:
- name: offhour-pm-stop
resource: aws.ec2
mode:
type: periodic
schedule: rate(1 hour)
role: <ROLE_NAME_OR_ARN>
tags:
billingc7n-status:: lob-cc custodian_downtime envdowntime : sandboxopt-out : false owner : jimmyray- "tagdowntime": absent : aws : autoscaling : groupName actions:- stop- name : offhour-am-start resource : aws.ec2 mode:type : periodic schedule : rate(1 hour) role:<ROLE_NAME_OR_ARN> tags : billing : lob-cc env : sandbox owner : jimmyray filters:- type : offhour tag : custodian_downtime default_tz : et offhour : offhour17 : opt-out17 : false- "tagfalse": absent : aws : autoscaling : groupNameactions :- start
圖表翻譯:
此圖表說明瞭根據時間的自動化管理流程,展示瞭如何在特定時間自動停止或啟動 EC2 例項。
graph LR A[開始] --> B{當前時間} B -->|上班前| C[啟動EC2] B -->|下班後| D[停止EC2] C --> E[檢查AutoScaling標籤] D --> E E -->|未標註opt-out| F[執行操作]