三大雲平台工具容器升級小記 - 使用 python 3 with openSUSE Leap 15.1 Container

三大雲平台工具容器升級小記 - 使用 python 3  with openSUSE Leap 15.1 Container

OS: container with openSUSE Leap 15.1

上次升級是 2019/11/16 , 這次會來升級的原因是 
  • Google SDK 已經GA 支援 python 3,  274.0.0 以後的版本就支援 Python 3
  • awscli 使用 python 3 來安裝
  • Ansible with azure 使用 pip3 安裝

先整理結果

升級前
OS: openSUSE Leap 15.1
awscli:  aws-cli/1.16.282 Python/2.7.14
gcloud: Google Cloud SDK 271.0.0
azure-cli: 2.0.76

升級後
OS: openSUSE Leap 15.1
awscli:  aws-cli/1.16.310 Python/3.6.9
gcloud: Google Cloud SDK 274.0.1
azure-cli: 2.0.78

這次的做法還是會透過 docker build 指令來進行
  • 我有比較過 docker build 以及使用現有的 docker image 修改後再使用 docker commit 建立的 image 大小還是很有差異的

Dockerfile 的部分我是拿之前 openSUSE Leap 15.1 來修改

實際上只有修改
  • Update time
  • 使用 pip3 安裝 ansible[azure]
  • 使用 pip3 安裝 awscli
  • Google SDK 版本還有下載的檔案路徑以及檔案名稱


列出 diff 的結果給大家參考

> diff opensuseLeap151_ansible_Dockerfile opensuseLeap151_ansible_20200105_Dockerfile 

6c6
< # update: 20191122
---
> # update: 20200105
10,12c10,12
< RUN zypper install -y python2-pip && \
<   pip2 install --upgrade pip && \
<   pip2 install ansible[azure]
---
> RUN zypper install -y python3-pip && \
>   pip3 install --upgrade pip && \
>   pip3 install ansible[azure]
45c45
< RUN pip install awscli
---
> RUN pip3 install awscli
49c49
< # Install google cloud SDK 271
---
> # Install google cloud SDK 274.0.1
51,52c51,52
< RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
<   tar zxvf google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
---
> RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-274.0.1-linux-x86_64.tar.gz && \
>   tar zxvf google-cloud-sdk-274.0.1-linux-x86_64.tar.gz && \




Dockerfile 內容如下

# openSUSE Leap 15.1 with ansible, azure-cli
FROM opensuse/leap:15.1

# Author
# MAINTAINER 已經棄用, 之後要使用 LABEL 方式
# update: 20200105
LABEL maintainer="sakana@cycu.org.tw"

# Install python2-pip, upgrade pip, ansible[azure]
RUN zypper install -y python3-pip && \
  pip3 install --upgrade pip && \
  pip3 install ansible[azure]

# Install openssh, set ls alias
RUN zypper install -y openssh
RUN echo "alias ls='ls --color=tty'" >> /root/.bashrc

# Install wget, download azure_rm.py, set permission
RUN zypper install -y wget && \
  wget  https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py && \
  chmod a+x azure_rm.py && \
  mv azure_rm.py /root

# Create working directory in /root
RUN mkdir /root/.azure && \
  mkdir /root/.aws && \
  mkdir /root/playbook && \
  mkdir -p /root/.config/gcloud && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/ansible.cfg && \
  mv /ansible.cfg /root && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/hosts && \
  mv /hosts /root

# Install azure-cli
RUN zypper install -y curl && \
  rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
  zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
  zypper install --from azure-cli -y azure-cli

#install vim tar gzip jq
RUN zypper install -y vim tar gzip jq
RUN echo "set encoding=utf8" > /root/.vimrc

# Install awscli
RUN pip3 install awscli
RUN echo "source /usr/bin/aws_bash_completer" >> /root/.bashrc


# Install google cloud SDK 274.0.1
ENV CLOUDSDK_CORE_DISABLE_PROMPTS 1
RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-274.0.1-linux-x86_64.tar.gz && \
  tar zxvf google-cloud-sdk-274.0.1-linux-x86_64.tar.gz && \
  /google-cloud-sdk/install.sh && \
  echo "if [ -f '/google-cloud-sdk/path.bash.inc' ]; then . '/google-cloud-sdk/path.bash.inc'; fi" >> /root/.bashrc && \
  echo "if [ -f '/google-cloud-sdk/completion.bash.inc' ]; then . '/google-cloud-sdk/completion.bash.inc'; fi" >> /root/.bashrc



使用 docker build 指令建立 image

> docker build  -t  sakana/ansible_opensuse151:20200105  -f  ./opensuseLeap151_20200105_ansible_Dockerfile   .

  • 使用 -f 指定 Dockerfile 名稱
  • 最後是 ” . “ 目前的目錄


測試 container image

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151:20200105  /bin/bash

測試結果 OK, 建立  tag

觀察資訊
> docker  images

REPOSITORY                   TAG IMAGE ID           CREATED SIZE
sakana/ansible_opensuse151   20200105 06e961a97803        About a minute ago   1.32GB
sakana/ansible_opensuse151   latest 3d76040b20fb        6 weeks ago 1.19GB
opensuse/leap                15.1 fef5ad254f63        2 months ago 103MB

建立 tag 
> docker  tag  06e961a97803  sakana/ansible_opensuse151:latest

登入 docker
> docker  login

上傳 image
> docker  push  sakana/ansible_opensuse151:20200105

> docker  push  sakana/ansible_opensuse151:latest

完工, 以後使用就用

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151  /bin/bash


~ enjoy it

Reference:

MySQL Workbench 安裝與連接 Azure DB with openSUSE Leap 15.1 小記

MySQL Workbench 安裝與連接 Azure DB with openSUSE Leap 15.1 小記

OS: openSUSE Leap 15.1
MySQL Workbench: 8.0.15


只能再次說, Python 讀書會惠我良多 :p
之前有實驗 DB Browser for SQLite (sqlitebrowser)[1] 以及使用 mariadb-client 連線 Azure DB[2]

今天要來實作 MySQL Workbench 連接 Azure DB 部分

先來安裝 MySQL Workbench with openSUSE Leap 15.1
在 MySQL Workench 下載頁面上 https://dev.mysql.com/downloads/workbench/  沒有列出 openSUSE, 

到 MySQL 官網上觀察 6.3.10 是 2017-11-15 GA / 8.0.15 是 2019-02-01 GA, ( 最新是 8.0.18 )

如果要安裝 mysql-workbench, 要先裝 libantlr4-runtime4_7_2

  • 安裝 java:package 提供的 4.7.2 套件, 使用單鍵安裝方式
  • 沒有裝 libantlr4-runtime4_7_2 等等就會被告知相依性問題


接下來安裝 mysql-workbench
在 software.opensuse.org 搜尋 mysql-workbench  https://software.opensuse.org/package/mysql-workbench 看到有 6.3.10 以及 8.0.15



使用單鍵安裝的方式安裝 mysql-workbench 8.0.15 ( 由 server:database 提供 )
  • 點擊單鍵安裝, 他就是一個 .ymp 檔案, 下載之後打開就可以進行套件與套件庫安裝

開啟之後會出現 YaST2 視窗, 沒有意外就是下一步按到底就裝完了 :)


接下來在概覽內就會看到 MySQL Workbench 的圖示


雖然啟動的時候會很傷心的跟你說你的 OS 不支援( 雖然你可能用的好好的 )
點選 OK 進入程式



建立新的連線, 選取 [MySQL Connections] 標題旁邊的加號 (+) 圖示

輸入 連線名稱 / Hostname / Username


點選 Test Connection

接下來會被要求輸入密碼


如果輸入的資訊還有密碼都正確, 會告知有成功連線
點選 OK 回來視窗

再次點選 OK 結束新增連線設定



接下來就會看到主畫面就有剛剛設定的連線
點選剛剛設定的連線就會開啟 SQL Editor

會被詢問密碼, 然後開啟 SQL Editor



接下來進行簡單的 SQL 語法測試
輸入 show databases;
點選執行的閃電按鈕


結果會輸出到畫面下方

這樣又多了一個工具可以連接與管理 Azure DB 和練習 Python

Enjoy it ~


Reference:

Saturday

23 November, 2019

將GCP Stackdriver Alert 傳送到 telegram 小記

將GCP Stackdriver Alert 傳送到 telegram 小記

OS: container with openSUSE Leap 15.1

上次寫的是 “使用 Stackdriver 監控 GCE CPU 使用率, 超出監控值主動發出通知”, 通知的方式是 E-mail

那如果要更即時的方式呢?
所以接下來就來實驗透過 Telegram 來接受訊息 :)

首先要來建立 telegram bot

可以點選 以下網址 開啟 telegram 

或是在 telegram 程式中 

搜尋 @botfather


點選 START


接下來就會進入對話
也可以看到剛剛點選的 /start


輸入 /newbot 建立 bot

接下來會被要求輸入 bot 名稱, 這邊我以 sakana-gcp 為例子
輸入 sakana-gcp


然後是建立 bot 的使用者, 必須以 bot 結尾

我這邊以 sakana_gcp_bot 為例
輸入 sakana_gcp_bot
  • 這邊的命名規則不給輸入 - , 所以我用底線



建立完成會給 bot 的 HTTP API TOKEN


整理一下
  • Bot 名稱( 顯示名稱 ): sakana-gcp
  • Bot 使用者名稱(帳號): sakana_gcp_bot


接下來觀察 bot 是否可以加入群組

輸入 /setjoingroups
  • 預設是 Enable, 就是 bot 可以被加入群組
  • 如果被要求輸入 bot , 要輸入的是 bot 使用者名稱, @sakana_gcp_bot 


建立 Group



搜尋剛剛建立的 bot
點選 sakana-gcp , 點選其他要加入的人, 例如自己
點選 NEXT


輸入群組名稱
點選 CREATE GROUP 建立群組


接下來檢查是否可以查到已經加入群組的資訊, 以及 Group ID

使用 curl 指令 針對 bot 查詢資訊
> curl  https://api.telegram.org/botYOUR_TOKEN/getUpdates

{"ok":true,"result":[]}

  • 這邊的 YOUR_TOKEN 就是剛剛 @botfather 給的 TOKEN

  • 如果result 是空的, 就把 bot 從群組踢出去再加入一次, 再試試看

從資料中取得 Group Chat ID


使用 curl 確認是否可以用這個 Group Chat ID 發送訊息

>curl  -X  POST  "https://api.telegram.org/botYOUR_TOKEN/sendMessage"   -d "chat_id=YOUR_CHAT_ID&text=my sample text"

  • -X 是 request , -d 是 data
    • 注意雙引號各把 host 以及 data 內容標示住

成功的話應該會看到訊息



Cloudfunction 部分

使用 container 方式來建立相關程式
  • 要有 npm 套件, 等等在 container 內建立, 不影響自己環境

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151  /bin/bash



==== 在 contaienr 內 ( openSUSE Leap 15.1 with ansible and cloud tools ) ====

安裝 npm
# zypper  install  npm

Loading repository data...
Reading installed packages...
'npm' not found in package names. Trying capabilities.
Resolving package dependencies...

The following 8 NEW packages are going to be installed:
  libicu60_2 libicu60_2-ledata nodejs-common nodejs10 nodejs10-devel npm10 system-user-nobody timezone

8 new packages to install.
Overall download size: 17.8 MiB. Already cached: 0 B. After the operation, additional 71.0 MiB will be used.
Continue? [y/n/v/...? shows all options] (y): y


建立 telegram 目錄
# mkdir  telegram

進入 telegram 目錄
# cd  telegram

建立 index.js

# vi   index.js

const axios = require('axios');
// replace the value below with the Telegram token you receive from @BotFather
const token = '[YOUR_TOKEN]';
const chatId ='[YOUR_CHAT_ID]';
const url = `https://api.telegram.org/bot${token}/sendMessage`;
function sendMessage(msg) {
  return axios.post(url, {
   chat_id: chatId,
   text: msg,
});
}
exports.trigger = (req, res) => {
 const incident = req.body.incident;
 const policy = incident.policy_name;
 const cond = incident.condition_name;
 const state = incident.state;
 const url = incident.url;
 const msg = `${policy} ${cond} is ${state}, please check ${url}`
 console.log(msg);
 sendMessage(msg)
 .then(function (response) {
   console.error('invoke telegram');
   res.send({ status: 'OK'});
 })
.catch(function (error) {
  console.error(error);
  res.sendStatus(500);
 });
};

執行 npm init , 全都按照預設值

# npm  init

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (telegram) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /telegram/package.json:

{
  "name": "telegram",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes)  Y


安裝 axios 

# npm install axios

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN telegram@1.0.0 No description
npm WARN telegram@1.0.0 No repository field.

+ axios@0.19.0
added 5 packages from 8 contributors and audited 5 packages in 2.123s
found 0 vulnerabilities

觀察相關資訊

# ls
index.js  node_modules  package-lock.json  package.json

# cat  package.json 

{
  "name": "telegram",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.19.0"
  }
}

佈署 cloud function ( 因為是用 container with cloud tools 環境, 所以有 gcloud 指令可以用 )

# gcloud  functions  deploy  trigger  --runtime  nodejs8  --trigger-http  --region  asia-east2 --project  YOUR_PROJECT_ID

  • trigger 是名稱
  • region 的部分, asia-east 只有 asia-east2
  • Project 後面請用自己的 project ID

輸出的訊息中會有 httpsTrigger URL , 等等會拿來使用

url: https://asia-east2-YOUR_PROJECT.cloudfunctions.net/trigger

另外還有一段警告訊息 
WARNING: Function created with limited-access IAM policy. To enable unauthorized access consider "gcloud alpha functions add-iam-policy-binding trigger --region=asia-east2 --member=allUsers --role=roles/cloudfunctions.invoker"



接下來建立 Stackdriver Webhook
點選專案內的選單 STACKDRIVER -- > Monitoring



在 Stackdriver 頁面
點選專案的下拉式選單 -- > 點選 Workspace Settings

點選 Notifications -- > 點選 WEBHOOKS -- > 點選 Add Webhook


填入  httpsTrigger URL 
填入 Webhook name



這個時候如果點選 Test Connection , 但是 Telegram bot 沒有傳送訊息
那就要回到 Container 內下剛剛被提示的指令

# gcloud  alpha  functions  add-iam-policy-binding  trigger  --region=asia-east2 --member=allUsers --role=roles/cloudfunctions.invoker


再次在 Webhook 頁面點選 Test Connection
會看到 undefind 訊息這樣就算是成功了


接下來就是可以針對 Stackdriver 的 alert 增加 telegram ( 使用 web hook 方式 )通知

選一個要加入的 Alert policy , 點選選單內的 Edit


在 Notification 的地方
請將下拉式選單拉到底 ~~ 才會看到 Webhook with Token Authentication


選取 剛剛建立的 Webhook 點選 Add Notification Channel


記得點選 Save 存檔


測試方式, 我的警示條件是 CPU 大於一定百分比就發出警告
  • 登入該台 VM, 使用 # stress-ng -c 4 --cpu-method all 進行壓測


接下來就會觀察到 telegram bot 送來相關訊息


Future work
  • Bot 的管控
  • Cloud function with iam policy binding 




這樣也算是向 Cloud function 前進一步了 :)

~ enjoy it


Notes: 刪除 telegram bot 方式



Reference



三大雲平台工具容器升級小記 with openSUSE Leap 15.1 container

三大雲平台工具容器升級小記 with openSUSE Leap 15.1 container

OS: container with openSUSE Leap 15.1

上次升級是 2019/8/3 , 這次會來升級的原因是 Google SDK 已經到了 271.0.0, 然後最近要作一個 Lab 需要 gcloud compute resource-policies 相關指令,  但是 Google SDK 245.0.0 沒有....
[ 謎之音: 需求是前進的鞭子 ~  ]

先整理結果

升級前
OS: openSUSE Leap 15
awscli:  aws-cli/1.16.210 Python/2.7.14
gcloud: Google Cloud SDK 245.0.0
azure-cli: 2.0.70

升級後
OS: openSUSE Leap 15.1
awscli:  aws-cli/1.16.282 Python/2.7.14
gcloud: Google Cloud SDK 271.0.0
azure-cli: 2.0.76

Todo
  • 12 月的時候將 awscli 用 python3 安裝
    • 原因是 Google SDK 目前還是 Python2, 所以想要一起升級 :p

這次的做法會透過 docker build 指令來進行
  • 我有比較過 docker build 以及使用現有的 docker image 修改後再使用 docker commit 建立的 image 大小還是很有差異的

Dockerfile 的部分我是拿之前 openSUSE Leap 15 來修改

實際上只有修改
  • openSUSE Leap 版本
  • Update time
  • Google SDK 版本還有下載的檔案路徑以及檔案名稱


列出 diff 的結果給大家參考

> diff  opensuseLeap151_ansible_Dockerfile  opensuseLeap15_ansible_Dockerfile 

1,2c1,2
< # openSUSE Leap 15.1 with ansible, azure-cli
< FROM opensuse/leap:15.1
---
> # openSUSE Leap 15 with ansible, azure-cli
> FROM opensuse/leap:15
6c6
< # update: 20191116
---
> # update: 20190727
49c49
< # Install google cloud SDK 271
---
> # Install google cloud SDK 240
51,52c51,52
< RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
<   tar zxvf google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
---
> RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-245.0.0-linux-x86_64.tar.gz && \
>   tar zxvf google-cloud-sdk-245.0.0-linux-x86_64.tar.gz && \


Dockerfile 內容如下

# openSUSE Leap 15.1 with ansible, azure-cli
FROM opensuse/leap:15.1

# Author
# MAINTAINER 已經棄用, 之後要使用 LABEL 方式
# update: 20191116
LABEL maintainer="sakana@cycu.org.tw"

# Install python2-pip, upgrade pip, ansible[azure]
RUN zypper install -y python2-pip && \
  pip2 install --upgrade pip && \
  pip2 install ansible[azure]

# Install openssh, set ls alias
RUN zypper install -y openssh
RUN echo "alias ls='ls --color=tty'" >> /root/.bashrc

# Install wget, download azure_rm.py, set permission
RUN zypper install -y wget && \
  wget  https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py && \
  chmod a+x azure_rm.py && \
  mv azure_rm.py /root

# Create working directory in /root
RUN mkdir /root/.azure && \
  mkdir /root/.aws && \
  mkdir /root/playbook && \
  mkdir -p /root/.config/gcloud && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/ansible.cfg && \
  mv /ansible.cfg /root && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/hosts && \
  mv /hosts /root

# Install azure-cli
RUN zypper install -y curl && \
  rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
  zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
  zypper install --from azure-cli -y azure-cli

#install vim tar gzip
RUN zypper install -y vim tar gzip
RUN echo "set encoding=utf8" > /root/.vimrc

# Install awscli
RUN pip install awscli
RUN echo "source /usr/bin/aws_bash_completer" >> /root/.bashrc


# Install google cloud SDK 271
ENV CLOUDSDK_CORE_DISABLE_PROMPTS 1
RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
  tar zxvf google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
  /google-cloud-sdk/install.sh && \
  echo "if [ -f '/google-cloud-sdk/path.bash.inc' ]; then . '/google-cloud-sdk/path.bash.inc'; fi" >> /root/.bashrc && \
  echo "if [ -f '/google-cloud-sdk/completion.bash.inc' ]; then . '/google-cloud-sdk/completion.bash.inc'; fi" >> /root/.bashrc

使用 docker build 指令建立 image

> docker build  -t  sakana/ansible_opensuse151:20191116  -f  ./opensuseLeap151_ansible_Dockerfile   .

  • 使用 -f 指定 Dockerfile 名稱
  • 最後是 ” . “ 目前的目錄


測試 container image

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151:20191116  /bin/bash

測試結果 OK, 建立  tag

觀察資訊
> docker  images

REPOSITORY                   TAG IMAGE ID           CREATED SIZE
sakana/ansible_opensuse151   20191116 dcd69d00b4aa        34 minutes ago      1.19GB
opensuse/leap                15.1 fef5ad254f63        10 days ago 103MB
sakana/ansible_opensuse15    latest 4fe595fb61e4        3 months ago 1.1GB

建立 tag 
> docker  tag  dcd69d00b4aa  sakana/ansible_opensuse151:latest

登入 docker
> docker  login

上傳 image
> docker  push  sakana/ansible_opensuse151:20191116

> docker  push  sakana/ansible_opensuse151:latest

完工, 以後使用就用

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151  /bin/bash


~ enjoy it

Reference:

使用 Stackdriver 監控 GCE CPU 使用率, 超出監控值主動發出通知小記

使用 Stackdriver 監控 GCE CPU 使用率, 超出監控值主動發出通知小記


OS: Container with openSUSE Leap 15


以前管地端機器的時候, 因為大部分的專案跟自己有關係, 可以藉由 nagios 或其他方式進行監控.  現在業務上以雲端的資源為主, 所以就要多利用雲端原生的方式來進行監控.


需求: GCE CPU 超過一定使用量, 通知使用者


做法: 使用 Stackdriver Monitoring Alert 來達成


登入 GCP Console


點選 STACKDRIVER 的 Monitoring




這個時候會被導向到另外一個頁面 https://app.google.stackdriver.com/
如果之前專案沒有建立過 Starkdriver 的工作區, 那就按照引導建立工作區並將 GCP 上面的專案加入到工作區
  • Stackdriver 費用又是另外一個故事, 改天再來說


點選 Alerting -- > Create a Policy




點選 Add Condition 



Metrics 的部分我使用
compute.googleapis.com/instance/cpu/utilization
  • 另外有看到 agent.googleapis.com/cpu/utilization, 猜測是要安裝 agent, 然後由agent 傳回值 




Filter 的部分
剛開始是使用 instance_id 方式, 但是要一台一台指定, 轉向使用 name (VM 名稱)的方式來進行.
之後的目標是使用標籤的方式來 filter.




更新使用標籤的部分

  • 之前沒有看到標籤是因為時間差, 我一建立完 GCE, 然後套用 env: prod 的標籤就去設定 Stackdriver monitoring policy, 標籤的資料還沒同步過去, 當套用標籤後過一些時間, 再重新建立 filter 就會看到 env 可以選, 然後點選 prod 就可以了
  • 感謝 GCPUG.TW 的朋友幫忙

Configuration 部分設定 1分鐘超過 50 % 就警告




可以在右方觀察到基準線
也可以看到套用的 GCE VM

點選 SAVE 完成 Condition 設定


接下來設定通知方式
點選下拉式選單來選取, 這邊我是只能選 Email
  • 希望未來使用 Telegram 通知 :)



輸入要通知的 E-mail address -- > Add Notification Channel
輸入 Policy 名稱 -- > Save
完成設定



接下來進行驗證
我在GCP 上面建立兩台 openSUSE Leap 15, 並安裝 stress-ng 來進行壓測
  • 可以參考之前的文章 [1] 


使用 stress-ng 壓測
在 GCE VM 上面
# stress-ng  -c  4  --cpu-method all


可以從剛剛設定的 Policy 觀察到 CPU 超過監控值




達到門檻值, 也看到產生 Incident 與通知使用者






完成相關設定以及驗證


做完 Console 的方式, 接下來當然會想去評估 API 方式, 參考官方文件


看起來的邏輯是要
  • 建立通知管道 Notification
  • 然後才能建立 Policy


因為還要針對 YAML 或是 JSON 內容進行編輯, 不能直接使用 get 或是 describe 方式取得之後來套用, 所以這個部分就先跳過


先記下來


~ enjoy it


Reference:
  1. 宏庭科技 Joy 幫忙, 給我基本相關做法




Saturday

26 October, 2019

使用 ab ( Apache HTTP server benchmarking tool ) with openSUSE Leap 15.1 測試小記

使用 ab ( Apache HTTP server benchmarking tool ) with openSUSE Leap 15.1 測試小記

OS: openSUSE Leap 15.1
ApachBench: 2.3

最近因為工作上的需要, 有使用了一下 ab 指令進行 http 相關測試.
因為 ab 指令是內建在 Mac OS 內, 所以回家後就想要在 openSUSE Leap 15.1 上面進行測試
但是 ab 指令沒有預設安裝, 所以就要手動安裝

指令是 ab, 雖然知道是 Apache Benchmark 工具, 下意識就會想要使用
# zypper  search ab 來進行尋找 :p

但是其實 ab 指令是內建在 apache2-utils 套件內

所以使用 zypper 指令配合對的套件名稱進行安裝

# zypper  install  apache2-utils

Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
  apache2-utils

1 new package to install.
Overall download size: 123.9 KiB. Already cached: 0 B. After the operation, additional 198.2 KiB will be used.
Continue? [y/n/v/...? shows all options] (y): Y

套件大小很迷你 :)

檢查版本資訊

> ab  -V

This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

我用的是 2.3 的版本

進行簡單的連線測試

> ab  -c 10  -n 100  -s 10  http://www.gnome.org/

This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.gnome.org (be patient).....done


Server Software:        
Server Hostname:        www.gnome.org
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      10
Time taken for tests:   8.019 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Total transferred:      11900 bytes
HTML transferred:       0 bytes
Requests per second:    12.47 [#/sec] (mean)
Time per request:       801.921 [ms] (mean)
Time per request:       80.192 [ms] (mean, across all concurrent requests)
Transfer rate:          1.45 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      234 346 347.0    289 3313
Processing:   238 304 52.5    287 612
Waiting:      238 304 52.5    287 611
Total:        487 650 350.6    585 3583

Percentage of the requests served within a certain time (ms)
  50%    585
  66%    616
  75%    629
  80%    641
  90%    686
  95%   1261
  98%   1621
  99%   3583
 100%   3583 (longest request)

  • -c 是同時連線數量 Concurrency
  • -n 是 request 數量
  • -s 是 timeout
  • 以上是對 GNOME 網站每次以 10 個連線, 進行 100 requests

參考網路上找到的文章[2]  , 嘗試使用 -g 選項

> ab -c 10 -n 100 -g out.data http://www.gnome.org/
  • -g 產生 gnuplot 檔案

在該目錄下面會產生 out.data 檔案

因為沒有安裝 gnuplot, 所以使用 zypper 安裝

# zypper install gnuplot

Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 2 NEW packages are going to be installed:
  gnuplot libcerf1

2 new packages to install.
Overall download size: 1.2 MiB. Already cached: 0 B. After the operation, additional 3.9 MiB will be used.
Continue? [y/n/v/...? shows all options] (y):


使用非互動方式畫出圖形

> gnuplot  -e  " set  terminal dumb; plot 'out.data' using 9 w l "

                                                                               
  1800 +-------------------------------------------------------------------+   
       |      + +     + + +      + + + +      |   
       |                                        'out.data' using 9 ******* |   
  1600 |-+                                                               +-|   
       |                                                                  *|   
       |                                                                  *|   
  1400 |-+                                                               +*|   
       |                                                                  *|   
       |                                                                  *|   
  1200 |-+                                                               +*|   
       |                                                                 * |   
  1000 |-+                                                               *-|   
       |                                                                 * |   
       |                                                                 * |   
   800 |-+                                                               *-|   
       |                                                                 * |   
       |                                                            ***** |   
   600 |-+                         *********************************     +-|   
       |   ************************                                        |   
       |***   + +     + + +      + + + +      |   
   400 +-------------------------------------------------------------------+   
       0      10 20    30 40 50     60 70 80 90    100  
                                                                               


另外一個會用到的選項就是 -H ( custom-header )
因為有些網站, 如果你沒有帶 User-agent 或是其他的  header 就會拒絕存取
可能會用到的有
  • -H  “Host: xxx.yyy.com.tw”
  • -H “Referer: https://xxx.com.tw/main/main.html”
  • -H “User-Agent: Mozilla AppleWebKit”
  • 這邊最有感的就是, 如果有存取到 CDN 服務的話, 那速度真的差很多

先記下來

~ enjoy it

Reference

Thursday

5 September, 2019

Cloudwatch + Alarm with EC2 CPU Utilization 測試小記

Cloudwatch + Alarm with EC2 CPU Utilization 測試小記

OS: Container with openSUSE Leap 15
EC2: openSUSE Leap 15.1 in AWS

今天來測試 Cloudwatch 目標是 EC2 instance 如果 CPU 使用率 超過 50% 達到一定的條件, 就送出警告

首先先建立 openSUSE Leap 

==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

  • 這邊我有透過 -v 把本機上面的三個平台的設定檔掛載到容器內, 還有 .ssh 目錄 也掛載上面, 因為 google 的 SSH 金鑰 也會存放在裡面


==== 在 container 內 ====

參考之前的文章建立 openSUSE Leap 15.1 的 EC2 instance

查詢 openSUSE Leap 15.1 的 Image id
# aws  ec2  describe-images --filters 'Name=name,Values=openSUSE*'

查詢 Subnet id
# aws ec2 describe-subnets

security-group-ids 查詢方式
# aws  ec2  describe-security-groups

查詢 Key Pair
# aws  ec2  describe-key-pairs

啟動 openSUSE Leap 15.1 instance
# aws  ec2  run-instances --image-id  ami-036afe8f05ebda1fe  --subnet-id  subnet-92dfe4fb --security-group-ids sg-090a6648734644255  --instance-type  t2.micro --key-name  test-key --count  1


==== 在主機上面 ====

使用 ssh -i  test-key.pem  -l  ec2-user  SERVER_IP
看看是否可以登入

完成建立 EC2 instance


接下來設定 Cloudwatch
想法上就是 EC2 的 CPU 用量超過一定的條件就通知

登入 AWS Console

點選 服務 -- > Cloudwatch
點選 指標 -- > 點選 EC2


點選 每個執行個體指標



勾選要監控的 Instance 還有指定指標名稱為 CPUUtilization



點選 圖表化指標
點選 建立警示圖案 ( 鬧鈴 )



建立警示
時間的部分我使用預設值, 因為 5 分鐘是不用收費的, 可以參考 Cloudwatch 定價


設定 CPU 使用率 大於 50 %
3 次取樣有 2 次符合就警告
點選 下一步


通知的部分會結合 SNS 服務, 一定範圍內都是免費

點選 建立新主題 輸入要通知的電子郵件
點選 建立主題



點選 下一步

輸入 名稱
點選 下一步


在預覽畫面
點選 建立警示

完成 建立警示

可以觀察 Cloudwatch


如果要收到通知信, 就要去收 AWS SNS 寄來的信件, 並點選信內連結確認訂閱

最後來測試是否有作用

使用 ssh -i  test-key.pem  -l  ec2-user  SERVER_IP
登入 openSUSE Leap 15.1 instance in AWS

測試工具
  • stress-ng

切換為 root
> sudo  su  -

使用 zypper 安裝 stress-ng
# zypper  install  -y  stress-ng

使用 stress-ng 指令 壓測 CPU
# stress-ng  -c  2 --cpu-method  all

stress-ng: info:  [2920] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor
stress-ng: info:  [2920] dispatching hogs: 2 cpu


在 Cloudwatch 上面觀察


靜待 10 mins ( 3 x 5分鐘, 裡面要有 2 個符合 CPU > 50 % )

達到條件就會變成警示中


檢查訂閱的電子郵件

確認收到通知 :)

完成 Lab

~ enjoy it

Reference:

openSUSE Leap 15.1 安裝小記

openSUSE Leap 15.1 安裝小記

openSUSE Leap 15.0 Lifetime 到 2019/11 

所以在處理完 COSCUP 議程之後, 就可以動手來安裝 openSUSE Leap 15.1 到我的桌機了

這次也是使用 USB 來進行安裝,  

== 安裝過程小記==

這次建立的時候我還是選擇 GNOME 桌面

磁碟區分割的部分, 使用 進階磁碟分割程式
  • / 大小為 60GB, 一樣使用 btrfs, 但是取消勾選”啟用快照”
  • swap 大小為 16GB
  • /boot/efi, 大小為 1GB, 使用 fat
  • /home 大小為剩下的所有空間(126 GB ), 使用 xfs ( 如果有勾選 )

安裝的內容, 我這次是全新安裝, 
  • 有鑒於之前 flatpak 的 bug 還有 snapper 佔用空間, 這次把 / 大小調整為 60GB, 然後取消啟用快照

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

Network Manager:

#yast2  lan
更該預設為 Network Manager


Google Chrome:

還是會有驗證性問題, 但是功能沒有差異
為了進行google 登入,先使用 Google 驗證App,  後面來處理yubikey

home 資料回覆:

因為有很多相關的 config 在個人家目錄內, 所以先把舊的 openSUSE Leap 15.0 的 /home 目錄, 使用# tar    cvf home.tar /home 進行打包到隨身碟 ( 不要使用 .gz 方式, 會比較快速 )
新機器再使用 tar 指令還原回來

Notes
  • Ifconfig 預設沒有安裝, 要使用 ip  address show

關閉GNOME裡面的搜尋功能(點選右上角的設定按鈕), 因為我覺得用不到


中文輸入法問題:

在系統內新增中文輸入法, 目前使用 ibus
  • system_key( windows ) + 空白鍵 切換輸入法


取消 USB 為安裝來源
# yast2  repositories 


Freemind:
使用one click install 安裝 http://software.opensuse.org/package/freemind 
我是使用 editors 那個來源的 ymp 檔案安裝

.mm 的檔案指定用 freemind  開啟


新增 Packman 套件庫:

使用 #yast2  repositories 加入社群版本的Packman 

#yast2  repositories

Firefox Sync:
登入 Firefox Sync, 會處理之前有下載的 Plugin

flash-player:
# zypper   install flash-player


播放器:

# zypper  install   vlc vlc-codecs

  • Mp4 codec 應該是要安裝 vlc-codecs,  需要 Packman 套件庫

並將 .rmvb 以及 .mp4 預設播放器設定為  VLC

安裝  ffmpeg ( 會把提供者從 openSUSE 換成 Packman )
# zypper  install ffmpeg

這樣的好處是使用 youtube-dl  可以轉換 mp3 格式


透過 youtube-dl  -F 來觀察可以下載的格式

# zypper  install youtube-dl

> youtube-dl  -F  http://www.youtube.com/watch?v=13eLHrDcb1k
[youtube] Setting language
[youtube] 13eLHrDcb1k: Downloading video webpage
[youtube] 13eLHrDcb1k: Downloading video info webpage
[youtube] 13eLHrDcb1k: Extracting video information
Available formats:
22 : mp4 [720x1280]
18 : mp4 [360x640]
43 : webm [360x640]
5 : flv [240x400]
17 : mp4 [144x176]

指定要下載的格式進行下載 (請注意 -f 是小寫)

> youtube-dl  -f  22  http://www.youtube.com/watch?v=13eLHrDcb1k

下載為 mp3
首先要安裝 ffmpeg 套件

>youtube-dl    http://www.youtube.com/watch?v=13eLHrDcb1k --extract-audio --audio-format mp3

PDF Viewer 安裝:
Foxit
  • 下載軟體的 .tar.gz 然後以  root 安裝

Skype:
目前的版本是 8.51.0.72 的版本


下載 RPM 版本用軟體安裝就裝好了 :)

使用 #yast2 sound 調整音效


GNOME Extension:

參考調校小記

> gnome-tweak-tool
裝了
  • TopIcons
  • NetSpeed


Dropbox:

目前版本 2.10.0
使用 # zypper install dropbox 來安裝

安裝完之後在終端機下 dropbox  start -i 來安裝

裝好之後才發現, 現在 linux 又支援 XFS …..

修改 LS_OPTIONS 變數
# vi   /etc/profile.d/ls.bash
把 root 的 LS_OPTIONS 的 -A 移除

.7z 支援:
# zypper  install p7zip

imagewriter:
# zypper  install imagewriter
用來製作開機 USB

hexchat:
# zypper  install hexchat

rdesktop 安裝與測試:
#zypper  install freerdp

執行方式
#xfreerdp  -g 1280x1024  -u administrator  HOST_IP

Yubico Key:
如果 linux 沒有抓到 Yubico 的 U2F Key可以使用以下步驟
讓 linux 支援 Yubico , 我是參考 https://www.yubico.com/faq/enable-u2f-linux/  
作法
存到 /etc/udev/rules.d/70-u2f.rules
將 linux 重開機, 接下來就可以使用了 :-)

ansible 安裝:

目前版本 2.8.1
#zypper  install ansible

Docker 安裝:

目前版本 18.09.6-ce
#zypper  install  docker

將使用者 sakana  加入 docker 群組 

#systemctl  start  docker
#systemctl  enable   docker


VMware workstation Pro 15:

安裝 kernel-default-devel  
# zypper   install   kernel-default-devel kernel-source
# ./VMware-Workstation-Full-15.1.0-13591040.x86_64.bundle

如果啟動的時候出現找不到 Kernel Header
# yast2  sw_single
點選 kernel-default-devel 套件, 點選 Versions 分頁, 勾選適當的 kernel 版本


取消 “Enable virtual machine sharing and remote access

2017-11-13 20-45-20 的螢幕擷圖.png




smartgit 安裝:

下載 smartgit-linux-19_1_1.tar.gz

解壓縮到 /opt
# tar  zxvf   smartgit-linux-19_*.tar.gz  -C   /opt/

建立 link 讓一般使用者也能使用
# ln  -s   /opt/smartgit/bin/smartgit.sh   /usr/local/bin/smartgit

安裝 git
# zypper  install  git

建立 個人的 ssh key ( 這次沒有作, 因為將舊的 /home 還原回來 )
> ssh-keygen  -t dsa

將 ssh 的公鑰 id_dsa.pub 新增到 Github 的 Settings -- >  SSH and GPG Keys ( 這次沒有作, 因為將舊的 /home 還原回來 )

接下來就是以一般使用者的身份執行 smartgit 指令
> smartgit

這次沒有發生 一般使用者發生找不到 jre 路徑

解法, 目前是在 ~/.smartgit/smartgit.vmoptions 檔案內
將 jre 指向 /opt/smartgit/jre

> cat   ~/.smartgit/smartgit.vmoptions 
jre=/opt/smartgit/jre

按照上面的參考設定

# zypper  install alacarte
設定 smart git icon 使用 alacarte

> alacarte
在設定好之後如果發現無法直接開啟資料夾 ( 資料夾上面按右鍵 -- > Open )
Edit -- > Preferences --> 點選  Tools -- > 點選 Re-Add Defaults 得到解決
2016-11-24 15-48-28 的螢幕擷圖.png






Azure-cli 安裝:

版本: 2.0.71

匯入 rpm key

新增 Azure CLI 的 repo
# zypper  addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli

安裝 azure-cli 套件
# zypper  install --from azure-cli  -y  azure-cli

使用互動的方式登入 azure ( 現在已經不需要輸入機器碼, 直接驗證帳號就可以  )
> az  login

AWS Cli 安裝:

版本: 1.16.220

有鑑於 python 2 即將終止 support , 這次是用 pip3 來安裝 awscli

# pip3 install awscli

# pip3  install --upgrade pip

# aws --version

aws-cli/1.16.220 Python/3.6.5 Linux/4.12.14-lp151.27-default botocore/1.12.210


Google Cloud SDK ( gcloud )安裝:

安裝 gcloud
  • 但是目前實務上是使用容器的方式來執行


Visual Studio Core 相關 :


安裝 vscode

安裝 vscode extension ( 這次沒有作, 因為將舊的 /home 還原回來 )
  • AWS Toolkit for Visual Studio Code
  • Bracket Pair Colorizer
  • Code Time
  • Git Graph
  • GitHub Pull Requests
  • GitLens
  • Kubernetes
  • Python

Nextcloud client 安裝,  crontab 設定:

參考之前的文章

# zypper  install  nautilus-extension-nextcloud  nextcloud-client

使用一般使用者 啟動 nextcloud client
設定相關連線與同步   ( 這次沒有作, 因為將舊的 /home 還原回來 )

設定同步 Dropbox 與 Nextcloud 目錄
> crontab  -e

0 22 * * * rsync -a --delete /home/sakana/Dropbox/*  /home/sakana/Nextcloud/Dropbox/


PPSSPP 安裝:


使用 Emulators 來源安裝


Filezilla 安裝:

#zypper  install  filezilla


Sqlitebrowser 安裝:


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

這次安裝的時間真的相對久 :p

~ enjoy it

參考


Friday

9 August, 2019

Azure Storage Explorer with openSUSE Leap 15 小記

Azure Storage Explorer with openSUSE Leap 15 小記


OS: openSUSE Leap 15
Azure Storage Explorer: 1.9.0
Dotnet-sdk: 2.1.801-1


Azure Storage Explorer 官方網站


使用一般使用者
下載 Linux 版本的 Azure Storage Explorer ( StorageExplorer-linux-x64.tar.gz )


解壓縮檔案
> tar  zxvf  StorageExplorer-linux-x64.tar.gz


觀察相關資訊
> ls
blink_image_resources_200_percent.pak  icudtl.dat locales resources          StorageExplorer-linux-x64.tar.gz
content_resources_200_percent.pak      libffmpeg.so natives_blob.bin snapshot_blob.bin  ui_resources_200_percent.pak
content_shell.pak                      libnode.so pdf_viewer_resources.pak StorageExplorer    views_resources_200_percent.pak


嘗試執行 StorageExplorer
> ./StorageExplorer




被告知要有 .NET Core 2.0 才能執行 :)


  • 上面只列出 Ubuntu 14.04 ~ Ubuntu 18.04




相關的相依項目有
  • .NET core 2.0 執行階段
  • libgconf-2-4
  • libgnome-keyring0 或 libgnome-keyring-dev
  • libgnome-keyring-common


先來處理 .NET core 2.0 , 參考官方文件


按照比較新的日期, 我安裝的是 .NET Core SDK 2.1.202
Linux 相關網頁


上面雖然是 openSUSE Leap, 可是內容是 openSUSE Leap 42.2 , 而我目前用的是 Leap 15


根據上面的方式改為 openSUSE Leap 15 


使用管理者 root


匯入 Microsoft 的 Key
# rpm  --import  https://packages.microsoft.com/keys/microsoft.asc


下載 .repo 檔案
# wget  -q  https://packages.microsoft.com/config/opensuse/15/prod.repo


將 .repo 檔案移動到 /etc/zypp/repos.d 目錄下, 並更改名稱
# mv  prod.repo   /etc/zypp/repos.d/microsoft-prod.repo

透過 zypper update 指令去更新儲存庫,  我覺得用 zypper refresh 應該也可以
# zypper   update


Building repository 'packages-microsoft-com-prod' cache ...............................................................[done]
Loading repository data...


# zypper install libunwind libicu


Loading repository data...
Warning: Repository 'openSUSE-Leap-15.0-Update-Non-Oss' appears to be outdated. Consider using a different mirror or server.
Reading installed packages...
'libicu' not found in package names. Trying capabilities.
'libicu60_2' providing 'libicu' is already installed.
'libunwind' is already installed.
No update candidate for 'libunwind-1.2.1-lp150.2.1.x86_64'. The highest available version is already installed.
Resolving package dependencies...


Nothing to do.


  • 這邊看到 libicu 在 openSUSE Leap 15 應該是由 libicu60_2 提供


安裝前先搜尋一下
# zypper search -s dotnet-sdk


Loading repository data...
Warning: Repository 'openSUSE-Leap-15.0-Update-Non-Oss' appears to be outdated. Consider using a different mirror or server.
Reading installed packages...


S | Name           | Type | Version   | Arch | Repository                 
--+----------------+---------+-----------+--------+----------------------------
  | dotnet-sdk-2.1 | package | 2.1.801-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.701-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.605-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.603-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.1 | package | 2.1.508-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.401-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.301-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.205-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.203-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.108-1 | x86_64 | packages-microsoft-com-prod
  | dotnet-sdk-2.2 | package | 2.2.107-1 | x86_64 | packages-microsoft-com-prod


這邊其實會看到 有 2.1 與 2.2 版本
我決定先裝 2.1 版本


# zypper  install  dotnet-sdk-2.1
Loading repository data...
Warning: Repository 'openSUSE-Leap-15.0-Update-Non-Oss' appears to be outdated. Consider using a different mirror or server.
Reading installed packages...
Resolving package dependencies...


The following 7 NEW packages are going to be installed:
  aspnetcore-runtime-2.1 dotnet-host dotnet-hostfxr-2.1 dotnet-runtime-2.1 dotnet-runtime-deps-2.1 dotnet-sdk-2.1
  libopenssl1_0_0


7 new packages to install.
Overall download size: 171.8 MiB. Already cached: 0 B. After the operation, additional 173.7 MiB will be used.
Continue? [y/n/...? shows all options] (y): y


安裝完 .NET core 接下來試試看是否可以執行 Storage Explorer


使用一般使用者
嘗試執行 StorageExplorer
> ./StorageExplorer


Cool, 可以執行了
點選 I Accept 接受授權



接下來點選連接 Azure Storage 的方式
我先用 Add an Azure Account  -- > 點選 Next




接下來會要求登入 Microsoft Azure



接下來就可以看到 Microsoft Azure Storage Explorer 的操作畫面




接下來進行相關實驗


登入 Azure portal


Lab 1: 利用  Microsoft Azure Storage Explorer 管理儲存體


所有服務 -- > 儲存體帳戶
點選 新增儲存體帳戶
選取 訂用帳戶 / 資源群組
輸入名稱 / 選取 地區
點選 下一步


看看是否需要設定進階選項
我這邊按照預設值 -- > 下一步

看看是否需要加入標籤
-- > 下一步




確認相關資訊 -- > 點選 建立
完成 儲存體帳戶建立


接下來實驗相關功能
從 Microsoft Azure Storage Explorer 界面中
點選 Refresh All 重新整理物件
在訂閱帳號 -- > 展開 Storage Accounts 找到剛剛建立的 儲存體帳戶
展開帳戶, 在 Blob Containers 上面按滑鼠右鍵
Create Blob Contaier




輸入 Blob 名稱


這個時候可以在界面內或是 Azure Portal 確認是否有建立成功




嘗試使用界面上傳物件



選取檔案 -- > Upload



可以在界面或是 Azure Portal 確認上傳狀況



這樣就可以方便的在 Linux 使用  Microsoft Azure Storage Explorer 管理儲存體


接下來換個情境, 有的時候因為專案的關係, 不會給帳戶金鑰或是開帳戶給相關同仁, 取而代之的, 會使用 SAS 共用存取簽章 的方式存取


Lab 2: 利用  SAS 共用存取簽章 存取儲存體


在剛剛建立的儲存體 點選 共用存取簽章


按照需求調整到期日或是允許的資源類型
-- > 點選 產生 SAS 與 連接字串



產生相關 Token 以及 URL




在 Microsoft Azure Storage Explorer 內使用 SAS 方式連接


還沒連接之前觀察界面相關資訊




點選左方的 Add Account

點選 Use a shared access signature ( SAS ) URL
點選 Next



輸入相關資訊
其實就是把剛剛的 URL 複製貼上 -- >  Next 


從 Summary 確認相關資訊
點選 Connect 


再次觀察界面




之後一樣可以透過 Microsoft Azure Storage Explorer 來進行管理


Notes

  • 相關設定檔, Linux 在 ~/.config/StorageExplorer

這樣又在 Azure 前進一步


~ enjoy it


Reference:


使用 gcloud 建立 openSUSE Leap 15 GCE with startup-script 小記

使用 gcloud 建立 openSUSE Leap 15 GCE with startup-script 小記

上一篇 Blog 寫 AWS CLI with userdata, 這一篇來寫 使用 gcloud 建立 openSUSE Leap 15 的 GCE ( Google Compute Engine ) 加上 startup-script ( 開機指令碼 )

目的跟之前一樣, 就是建立 VM ( 就是 GCE ) 的同時, 設定建立完成要執行的指令

OS: Container with openSUSE Leap 15
GCE: openSUSE Leap 15 on GCP

==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

  • 這邊我有透過 -v 把本機上面的三個平台的設定檔掛載到容器內, 還有 .ssh 目錄 也掛載上面, 因為 google 的 SSH 金鑰 也會存放在裡面


==== 在 container 內 ====

參考官方文件

可以使用 --metadata-from-file 以及 startup-script 方式來指定

建立一個 default_startup-script 內容如下

#!/bin/bash
# edit by sakana 2019/7/27
# Turn on password authentication for lab challenge
# not use passwd --stdin because some OS not support
#echo 'lab-password' | passwd ec2-user --stdin
# Use chpasswd to change password 
# example: useradd -m ansible && echo "ansible:2016StudyArea" | chpasswd
useradd -m css-user
echo "css-user:20190727GCE" | chpasswd

# force user change password when first login
passwd -e css-user
#
sed -i 's|[#]*PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config
systemctl restart sshd.service

  • 這邊我有實驗過, 不可以將兩個指令用 && 串接, 會失敗, 所以就先拆開為兩行, 以後再找原因

使用 gcloud 指令建立 openSUSE Leap 15 的 GCE ( VM )

# gcloud  compute  --project=sakanatest  instances  create  --zone=asia-east1-b  --machine-type=n1-standard-1  --image-project=opensuse-cloud  --image-family opensuse-leap --boot-disk-size=30GB --metadata-from-file startup-script=GCP/startup-script/default_startup-script  test20190727

  • --project 是因為我有多個 profile 所以指定那一個專案
  • 使用指定 --image-family 方式來取得最新的 image, 而不是 --image 指定某個版本 image 


接下來驗證是否成功

==== 在主機上面 ====

使用 ssh  -l css-user@SERVER_IP
看看是否可以登入, 如果可以就是大功告成

~ enjoy it



Reference: