星期日, 6月 14, 2020

AWS Certified Solutions Architect – Associate 考試心得小記

AWS Certified Solutions Architect – Associate 考試心得小記


最近準備 AWS Solutions Architect Associate 考試


在開始之前, 真的要說 AWS 的 Associate 考試也太多種類了

參考官網資訊 https://aws.amazon.com/tw/certification/certification-prep/


去除掉不同等級的考試, 大概會分三個面向去分類吧 :)



  • Solutions Architect Associate

  • Developer Associate

  • SysOps Administrator Associate



我準備的是 Solutions Architect 考試, 相關說明如下


考題範例


考試準備的部分


前面一天的基礎課程我是看線上課程, 個人覺得不用去上實體課程


AWS 官方課程的部分: 

我上的課是 Architecting on AWS



AWS練習與研讀


安排考試



考試時間 130 mins

考完試 5 個工作天會收到結果, 這次在 SAA-C01 改版前跑去考試, 也順手整理一下相關資訊


考試心得就是, AWS 的服務真的很多, 很慶幸是自己工作環境會練習到相關技術, 加上有其他的練習與整理, 才能好好的辨認與知道服務差異, 之後也要讓自己多接觸雲端其他的東西 :p


~ enjoy it



Reference:




星期四, 5月 28, 2020

GCP 透過 Cloud Scheduler, PubSub 與Cloud Function 定時開關機小記

GCP 透過 Cloud Scheduler, PubSub 與Cloud Function 定時開關機小記


OS: container with openSUSE Leap 15.1



今天要來實驗透過 Cloud Scheduler 與 Cloud Functions 來進行定時開關機的要求

想法上是如果 GCE 上面有符合的標籤, 就會定時開關機


參考官方的文件

以及 ikala browny 的文件





首先建立 GCE


首先建立一個 GCE 然後指定 Label “env=0900_1900”


可以參考官方的指令 建立 GCE

#gcloud compute instances create test20200526   --network  default   --zone  asia-east1-b --project  YOUR_PROJECT


然後如果原來的 GCE 沒有 Label, 可以使用指令加上去

# gcloud  compute  instances  add-labels  test20200526 --zone  asia-east1-b --labels  env=0900_1900  --project  YOUR_PROJECT


建立 Pub/Sub


接下來建立 2 個 pubsub  的 topic

  • 啟動 GCE 的 topic “start-instance-event”

  • 停止 GCE 的 topic “stop-instance-event”


# gcloud  pubsub  topics create  start-instance-event  --project  YOUR_PROJECT


# gcloud  pubsub  topics create  stop-instance-event  --project  YOUR_PROJECT


下載 Google 的範例程式


# git  clone  https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git


進入範例目錄

# cd   nodejs-docs-samples/functions/scheduleinstance/


觀察相關資訊

# ls


README.md  index.js  package.json  test


  • 可以看一下 index.js 裡面的內容有關於等等要建立的 cloud function

  • package.json 裡面就有對 node 版本與其他的要求


佈署 cloud function


# gcloud  functions deploy  startInstancePubSub  --trigger-topic  start-instance-event  --runtime  nodejs10  --allow-unauthenticated  --region  asia-east2  --project  YOUR_PROJECT


 

# gcloud  functions deploy  stopInstancePubSub  --trigger-topic  stop-instance-event  --runtime  nodejs10  --allow-unauthenticated  --region  asia-east2  --project  YOUR_PROJECT


驗證 Cloud function 有作用

我們的設定是 Label env=0900_1900 的GCE 要進行定時開關機

所以條件就是 '{"zone":"asia-east1-b", "label":"env:0900_1900"}'

在 cloud function 內要經由 base64 編碼, 使用 echo 搭配 base64 指令完成編碼轉換


# echo  '{"zone":"asia-east1-b", "label":"env:0900_1900"}' | base64


eyJ6b25lIjoiYXNpYS1lYXN0MS1iIiwgImxhYmVsIjoiZW52OjA5MDBfMTkwMCJ9Cg==


呼叫 cloud function 測試

# gcloud functions call stopInstancePubSub     --data '{"data":"eyJ6b25lIjoiYXNpYS1lYXN0MS1iIiwgImxhYmVsIjoiZW52OjA5MDBfMTkwMCJ9Cg=="}' --region asia-east2 --project YOUR_PROJECT


觀察 GCE 狀況




測試另外一個啟動的 function

# gcloud functions call startInstancePubSub     --data '{"data":"eyJ6b25lIjoiYXNpYS1lYXN0MS1iIiwgImxhYmVsIjoiZW52OjA5MDBfMTkwMCJ9Cg=="}' --region asia-east2 --project YOUR_PROJECT






可以利用之前 cloudFunction_list_iam_policy.sh -- 檢查是否有設定 iam policy binding


最後建立 Cloud scheduler 的 Job



# gcloud  beta  scheduler  jobs  create  pubsub  stop-workday-instance-0900_1900  --schedule  '0 19 * * 1-5'  --topic  projects/YOUR_PROJECT/topics/stop-instance-event  --message-body  '{ "zone":"asia-east1-b","label":"env=0900_1900" }'  --time-zone  'Asia/Taipei'  --project  YOUR_PROJECT



# gcloud  beta  scheduler  jobs  create  pubsub  start-workday-instance-0900_1900  --schedule '0 9 * * 1-5'  --topic  projects/YOUR_PROJECT/topics/start-instance-event  --message-body  '{ "zone":"asia-east1-b","label":"env=0900_1900" }'  --time-zone  'Asia/Taipei'  --project  YOUR_PROJECT


  • --topic 完整的把id打出來, 因為 --project 不會幫忙帶入


確認 Cloud Scheduler job 是否有效


# gcloud  beta  scheduler  jobs  run  stop-workday-instance-0900_1900  --project   YOUR_PROJECT


# gcloud  beta  scheduler  jobs  run  start-workday-instance-0900_1900  --project   YOUR_PROJECT


接下來只要 GCE 的 Label 符合我們的條件, 就會在 9:00 開機, 19:00 關機了 :)


~ enjoy it


Reference

星期日, 5月 24, 2020

gcloud topic filters 小記

gcloud topic filters 小記

在使用 gcloud 指令的時候, 如果列出的輸出太多, 有時候就需要過濾出自己想要的資訊
但是在過濾的時候, 過濾的語法方式之前覺得不是很直觀
所以就紀錄一下, 以免自己忘記

大部分自已過濾的方式都是用關鍵字或是正規化表示式來過濾
所以要研究如何套用

要套用相關過濾方式, 要先參考 gcloud topic resource-keys

首先要觀察相關資訊, 這邊以 gcloud compute images list 為例

# gcloud  compute  images  list

NAME                                                  PROJECT            FAMILY                            DEPRECATED  STATUS
centos-6-v20200521                                    centos-cloud       centos-6                                      READY
centos-7-v20200521                                    centos-cloud       centos-7                                      READY
centos-8-v20200521                                    centos-cloud       centos-8                                      READY
coreos-alpha-2514-0-0-v20200520                       coreos-cloud       coreos-alpha                                  READY

預設會列出 standard images , 但是輸出的量比較多, 有將近 80 個 images
按照官方文件的方式, 先調整輸出的格式

# gcloud  compute  images  list  --format=flattened 

---
archiveSizeBytes:      20676277248
creationTimestamp:     2020-05-21T14:53:32.931-07:00
description:           CentOS, CentOS, 6, x86_64 built on 20200521
diskSizeGb:            20
family:                centos-6
id:                    856342087848380083
kind:                  compute#image
labelFingerprint:      42WmSpB8rSM=
licenseCodes[0]:       1000206
licenses[0]:           https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-6
name:                  centos-6-v20200521
rawDisk.containerType: TAR
rawDisk.source:        
selfLink:              https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-6-v20200521
sourceType:            RAW
status:                READY
storageLocations[0]:   asia
storageLocations[1]:   eu

  • 這樣就可以很清楚的觀察相關資訊
    • 左邊是 key, 右邊是 value

所以我如果要列出 SLES 相關 images 該如何呢?

# gcloud  compute  images list  --filter  "name ~ sles"

NAME                       PROJECT         FAMILY           DEPRECATED  STATUS
sles-12-sp5-v20200227      suse-cloud      sles-12                      READY
sles-15-sp1-v20200415      suse-cloud      sles-15                      READY
sles-12-sp2-sap-v20191127  suse-sap-cloud  sles-12-sp2-sap              READY
sles-12-sp3-sap-v20191113  suse-sap-cloud  sles-12-sp3-sap              READY
sles-12-sp4-sap-v20191113  suse-sap-cloud  sles-12-sp4-sap              READY
sles-12-sp5-sap-v20200227  suse-sap-cloud  sles-12-sp5-sap              READY
sles-15-sap-v20191116      suse-sap-cloud  sles-15-sap                  READY
sles-15-sp1-sap-v20200415  suse-sap-cloud  sles-15-sp1-sap              READY

  • name 是key
  • ~ 代表後面要用正規表示式
  • sles 是要過濾的 value

另外也可以使用 --format 來決定要輸出的欄位, 如果只想列出 NAME, FAMILY, STATUS

# gcloud  compute  images  list  --filter  "name ~ sles"  --format  "table(NAME,FAMILY,STATUS)"

NAME                       FAMILY           STATUS
sles-12-sp5-v20200227      sles-12          READY
sles-15-sp1-v20200415      sles-15          READY
sles-12-sp2-sap-v20191127  sles-12-sp2-sap  READY
sles-12-sp3-sap-v20191113  sles-12-sp3-sap  READY
sles-12-sp4-sap-v20191113  sles-12-sp4-sap  READY
sles-12-sp5-sap-v20200227  sles-12-sp5-sap  READY
sles-15-sap-v20191116      sles-15-sap      READY
sles-15-sp1-sap-v20200415  sles-15-sp1-sap  READY

  • 這樣格式輸入的方式在 GCE 也很好用, 例如只要列出 GCE 名稱, 還有內部與外部 IP


寫了這一篇, 以後過濾 GCP 的訊息輸出就更方便了

~ enjoy it

Reference