星期六, 7月 25, 2020

使用 GCP Storage 資料移轉服務同步 AWS S3 資料小記

使用 GCP Storage 資料移轉服務同步 AWS S3 資料小記


在工作上因為有接觸比較多的雲端平臺, 所以今天來寫 GCP 的 Transfer Service


情境: 將 AWS 上面 S3 的資料透過 GCP Transfer Service 將資料同步到 GCP Cloud Storage



前置準備

  • AWS IAM 帳號

    • 可以設定只給 AmazonS3ReadOnlyAccess 政策

    • Access key ID 與 Secret access key


登入 GCP console


首先先建立實驗用的 Bucket

點選 Storage -- > 瀏覽器



點選 建立值區

輸入 名稱 / 選取資料的儲存位置 / 級別 / 存取權

點選 建立


  • 這邊要注意的是, 預設儲存位置是 Multi-region, 如果是實驗目的, 可以選取 Region(單一地區)比較省錢


點選 資料移轉 -- > 點選 Transfer Service | 雲端



點選 建立轉移作業



選取來源位置

選取 Amazon S3 Bucket

輸入 S3 Bucket 名稱在 S3:// 後

輸入 存取金鑰 ID

輸入 存取權密鑰


  • 上面的需求條件內有說明, 如果只需要同步 那就是具備讀取來源與寫入目的地的權限

  • 如果要刪除來源就要有刪除的權限

  • 也可以用篩選的方式來同步


選取目標的 GCP Cloud Storage Bucket

點選 繼續



選取立即執行(once) 或是 執行時間 (Daily)

點選 建立



  • 作業名稱會用雙邊的 bucket name 與轉移作業設定來命名


接下來就會開始作業以及顯示狀態

同步完成之後可以到 GCP 的 Cloud Storage 觀察

相關資訊也會在 Transfer Service 呈現



這樣就多學到一招同步的技巧

~ enjoy it



Reference:

星期日, 7月 19, 2020

GCP Billing export with Big Query 小記

GCP Billing export with Big Query 小記


今天要來寫將 GCP 的費用匯出到 Big Query 進行查詢


費用的概念, 在雲端與地端其實是很不一樣的

  • 地端

    • 前期需要投入一定量的資本額, 按照購入的設備規格, 決定日後服務的種類與規模

    • 後期費用爲固定維護費用與折舊, 依照業務改變決定是否購入新硬體. 後期費用對使用率感覺相對不明顯.

  • 雲端

    • 前期不需要投入資本額, 服務的種類或是規模隨服務量產生變化, 可採隨用即付或是等服務穩定之後使用 RI 方式或是其他方式節費

    • 後期費用因使用率會馬上感受到費用的變化

 

如果在專案的數量沒有很多的狀況下, 專案的費用是可以經由 portal 上的 Billing -- > Report 手動查詢, 或是等帳單來臨的時候來進行觀察.  可是如同剛剛描述的, 如果等到帳單出帳的時候, 再來進行檢討, 可能為時已晚.


手動查詢費用在專案少的時候可以人工來處理, 但是等到專案慢慢越來越多, 卻會佔掉很多時間.

所以另外一個好的方式就是將 billing 匯出到 Big Query 來查詢與分析


參考官方的文件


首先要建立專案與 Big Query Dataset


為了核算清楚, 會建議新建一個專案, 然後產生一個 Big Query 的 Dataset 來獨立管理

  • 因為帳單的資料沒辦法跨 Billing Account, 所以如果有多個 Billing Account 就要建立多個專案與 Big Query Dataset 來處理

  • 如果是透過 Partner, 那就要請 Partner 那邊有 Billing Account Administrator 角色的人幫忙進行匯出


建立的方式很簡單, 建立完新專案之後, 到 Big Query 介面, 選取左下角的專案名稱

點選 CREATE DATASET



輸入 Dataset 名稱

點選 Create dataset




第二個步驟就是將 Cloud Billing 導出到 Big Query


首先執行的人必須要有 Billing Account Administrator 角色

在 Portal 上面選取 Billing

點選 Billing export

點選 BIGQUERY EXPORT 分頁

選取剛剛建立的專案與 dataset

點選 SAVE


  • 設定完成之後大概一到兩天就會看到開始有費用的資料匯入到 dataset 裡面了



等到匯集一段時間的費用, 就可以開始來進行查詢與分析了

在查詢之前, 建議是先觀察一下有那些 Schema 可以使用

可以在 Big Query 介面, 點選 專案 -- > 點選 Dataset -- > 點選匯出的 table ( gcp_billing_export_v1XXXXXXXX ) 來觀察 



接下來就可以在 Query editor 的地方輸入查詢的語法來進行查詢了

以下進行兩個範例


========================================================


  -- 針對特定專案, 特定月份, 個別服務的費用, 不區分地區

SELECT

  invoice.month,

  project.name,

  service.description,

  SUM(cost) AS total_cost,

  -- ROUND() 手動調整成小數點後兩位

  ROUND(SUM(cost) + SUM(IFNULL((

        SELECT

          -- c.amount 是下面 credits 的加總

          SUM(c.amount)

        FROM

          -- credits 是優惠點數或是折扣, 使用 UNNEST 逐條列出, 定義為 c

          UNNEST(credits) c),

        0)),2) AS cost_after_credits

FROM

  -- 這邊接要分析的 專案名稱.資料庫名稱.資料表名稱

  `YOUR_PROJECT.YOUR_DATASET.gcp_billing_export_v1_XXXXX_YYYYY_ZZZZZ`

WHERE

  invoice.month = "202006"

  AND project.name = "maxtest2020"

GROUP BY

  invoice.month,

  project.name,

  service.description

ORDER BY

  cost_after_credits DESC ;


  • 上面 FROM 請換成 自己的專案.自己的DATASET.TABLE名稱

  • invoice.month 就輸入要查詢的月份

  • project.name 就輸入要查詢的專案


輸入查詢的語法後, 可以看一下語法是否正確

另外一個重點是, 查詢的資料大小, 因為這個也是關乎費用 :P



得到的結果範例如下




========================================================


  -- 取特定日期區間, 個別專案的總費用

SELECT

  project.name,

  SUM(cost) AS total_cost,

  -- 這邊使用 round() 取到小數點 2 位數, 之後可以考慮乘上匯率

  -- cost 要使用 sum 來進行加總

  ROUND(SUM(cost) + SUM(IFNULL((

        SELECT

          -- c.amount 是下面 credits 的加總

          SUM(c.amount)

        FROM

          -- credits 是優惠點數或是折扣, 使用 UNNEST 逐條列出, 定義為 c

          UNNEST(credits) c),

          -- 這邊的0 是 IFNULL 就為 0, 2 是ROUND() 取到小數點兩位數

        0)),2) AS cost_after_credits

FROM

  -- 這邊接要分析的 專案名稱.資料庫名稱.資料表名稱

  `YOUR_PROJECT.YOUR_DATASET.gcp_billing_export_v1_XXXXX_YYYYY_ZZZZZ`

WHERE

  -- 這邊過濾時間區間落在 2020-06-21 到 2020-06-24 之間

  DATE(_partitiontime) BETWEEN "2020-06-21"

  AND "2020-06-24"

  -- 用專案來進行 GROUP BY

GROUP BY

  project.name

ORDER BY

  cost_after_credits DESC ;


  • 上面 FROM 請換成 自己的專案.自己的DATASET.TABLE名稱

  • DATE(_partitiontime) BETWEEN 就輸入要查詢的區間


得到的結果範例如下




========================================================


Notes:

  • 如果要匯出 Data Studio 發現權限不足

    • 要先開啟 Data Studio 並接受相關規範再進行匯出


這樣又多了一個方便的分析工具, 不用手動來進行查詢了 (撒花)

~ enjoy it



Reference:

星期六, 7月 18, 2020

AWS S3 與 GCP GCS 快速查看用量小記

AWS S3 與 GCP GCS 快速查看用量小記


在工作實務上, 有時因為成本估算或是專案狀況報告的關係要快速知道目前 Storage 的使用量

所以就把如何快速查看 AWS S3 或是 GCP GCS 的用量方式紀錄一下, 以免之後臨時要觀察忘記方式 :)


==== AWS ====


Console 方式


登入到 AWS Console 介面

進入到要觀察的 S3 Bucket

點選 Management -- > 點選 Metrics -- > 點選 Storage

觀察 BucketSizeBytes 可以知道該 Bucket 的用量



  • 這個指標實際上自己的觀察大概要 1.5 天之後才會顯示出來



另外一種觀察方式是到 CloudWatch

選取 S3 bucket 所在的 Region

點選 Metrics -- > 點選 S3 -- > 點選 Storage Metrics

勾選 BucketSizeBytes

就會出現相關資訊




指令方式


透過指令找出 StorageType 與 BucketName


# aws  cloudwatch  list-metrics  --metric-name  BucketSizeBytes  --region  us-east-2  --profile default 


{

    "Metrics": [

        {

            "Namespace": "AWS/S3",

            "MetricName": "BucketSizeBytes",

            "Dimensions": [

                {

                    "Name": "StorageType",

                    "Value": "StandardStorage"

                },

                {

                    "Name": "BucketName",

                    "Value": "test2020071420"

                }

            ]

        }

    ]

}




透過取得的資訊來取得大小


# aws  cloudwatch  get-metric-statistics  --namespace  AWS/S3  --dimensions  Name=BucketName,Value=test2020071420  Name=StorageType,Value=StandardStorage --metric-name  BucketSizeBytes  --start-time  2020-07-01  --end-time  2020-07-30  --period 86400 --statistics  Average  --unit  Bytes --region  us-east-2  --profile  default


{

    "Label": "BucketSizeBytes",

    "Datapoints": [

        {

            "Timestamp": "2020-07-17T00:00:00+00:00",

            "Average": 31457325.0,

            "Unit": "Bytes"

        },

        {

            "Timestamp": "2020-07-15T00:00:00+00:00",

            "Average": 10485782.0,

            "Unit": "Bytes"

        },

        {

            "Timestamp": "2020-07-16T00:00:00+00:00",

            "Average": 31457325.0,

            "Unit": "Bytes"

        }

    ]

}




  • --period 是要取樣的區間, 86400 是一天, 取樣的方式是 Average

  • 預設的單位是 Bytes, 嘗試過 Megabytes, 但是沒有成功

  • 所以輸出就會根據區間來顯示結果



==== GCP ====


Console方式

登入 GCP Console

點選 Monitoring -- > Dashboards 

點選 Cloud Storage



點選 Object Size 的選項 (...) -- > 點選 Open in Metrics Explorer



這樣的好處是會自動在 Metrics explorer 內帶入 Resource type, Metric 以及 Group By



  • 如果把 Group By 拿掉就可以觀察整個專案的用量


指令方式


可以使用 Cloud-Shell


$ gsutil  -o  GSUtil:default_project_id=YOUR_PROJECT_ID  du  -shc


30 MiB       gs://test2020071402

30 MiB       total


  • 請換成自己的 project id



這樣就算是紀錄如何快速查詢的方式了

不管 AWS 或是 GCP, 相關的 Metric 都不會馬上出現, 所以如果沒有現有的資料, 最好等一段時間, 實務上觀察大概 1.5 天左右


那就先這樣了


~ enjoy it


Reference