11/05/2015

The End of HP Public cloud


Public cloud is an important part of our customers’ hybrid cloud strategy, and what they tell us is that they want the ability to seamlessly bring together multiple public cloud environments, from AWS to Azure to Google to Alibaba, under a single hybrid cloud model. So, we will be evolving our strategy in public cloud to ensure that we can deliver this to our customers. We will sunset the HP Helion Public Cloud offering on January 31, 2016 and will move to an open, multiple partner-based model for providing these important capabilities to our customers through our private and managed cloud offerings.

To support this new model, we will continue to aggressively grow our partner ecosystem and integrate different public cloud environments. We are helping customers build cloud-portable applications based on OpenStack code through the HP Helion Development Platform and our work in the Cloud Foundry community. In Europe, we are leading the Cloud28+ initiative that is bringing together commercial and public sector IT vendors and EU regulators to develop common cloud service offerings across 28 different countries.

For customers who want access to existing large scale public cloud providers, we have already added greater support for Amazon Web Services as part of our hybrid delivery with HP Helion Eucalyptus and support Office/365 and Azure.

11/04/2015

Apple在iOS 9強化安全的ATS措施 (App Transport Security)

升級之後可能發生的錯誤現象:

Transport security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

解決辦法有很多種:
若你的App會從很多來源下載HTTP頁面, 直接Allow Arbitrary Loads

如果你的App只會從你的服務網域下載資料, 請使用Exception Domains
以個別的方式加入例外, 記得your.domain是一個Dictionary, NSTemporaryExceptionAllowsInsecureHTTPLoads (NSExceptionAllowsInsecureHTTPLoads是錯誤的)和
NSIncludeSubDomains是Boolean如下圖:

我是使用Xcode 7.1
請留意一下, Exception Domains是可以在Xcode內下拉選擇,
但是IncludesSubdomains前面要有NS開頭, 不信的話用其他編輯器打開Info.plist.

參考資料:
http://www.neglectedpotential.com/2015/06/working-with-apples-application-transport-security/
http://googleadsdeveloper.blogspot.tw/2015/08/handling-app-transport-security-in-ios-9.html

10/27/2015

Target 'AFNetworking' of project 'Pods' was rejected as an implicit dependency for 'libAFNetworking.a' because its architectures 'x86_64' didn't contain all required architectures 'i386 x86_64'

=== 筆記 ===
環境
Mac OS 10.10.5
XCode 7.1

iOS Project使用到AFNetworking, 透過CocoaPods安裝,
嘗試編譯時的出現警告:

現象
原因
pod install 的時候預設編譯的SDK變成OSX 

解決方法
選擇Pods專案>Build Settings>Base SDK 選擇 iOS


9/24/2015

Ansible結合Docker的使用方式

前言

為什麼不直接用Docker就好?
以現況來說,如果服務暫時無法移植到container執行, 要在私有雲上跑, 仍然需使用Ansible或是Chef或是Puppet這一類的工具。

目標

讓習慣Ansible的開發人員用原有的腳本在筆電上重複進行部署測試。
單純利用Docker的好處節省在開發機上安裝一堆VM (節省安裝OS的時間&空間)。
學習少量的Docker指令。

觀念

Ansible是從common role負責安裝所有的機器, 再由其他role安裝與設定其他各式Server。
Ansible需要為各種role撰寫playbook。
Docker的觀念是通過建立自己的base image 例如from Cent OS 7, 設置防火牆 VPN 與時區校正之後, commit, tag, 再從base image上安裝軟體變成各式Server。
用docker-compose以及links可以直接組裝許多Official images, 基本上只需要設計服務所需要的Application layer的images。
Docker需要為各種image撰寫Dockerfile。

安裝Docker

請按照官方步驟在Mac安裝完Docker環境之後在spotlight可以找到docker QuickStart Terminal 
你會得到一隻鯨魚以及一個IP, 那個就是虛擬機的IP, 請抄起來。

假設我們需要1台空白機讓Ansible管理, 執行:
bash-3.2$ docker run -d shooding/docker-ubuntu-openssh
bash-3.2$ docker ps
你會看到1台機器(container)正在執行。

這裏我解釋一下參數
-d = daemon背景模式執行
shooding/docker-ubuntu-openssh 是我放在docker hub上面的image名稱
如果有興趣可以看一下Dockerfile的寫法, 這裏使用的是Ubuntu 14.04 LTS版本。

安裝Ansible
$ brew install ansible

設定Inventory

Inventory就是要被Ansible管理的機器群。
剛剛已經用docker開好1台機器(container), 一般會分成staging和production來區分環境。
現在是在筆電上進行測試, 使用staging
把container的資訊加入到~/staging

$ vim ~/staging

請把IP換成你剛剛抄起來的IP。請把account換成你的User名稱。
[app_servers] 
app-1 ansible_ssh_host=192.168.99.100 ansible_ssh_port=2222

[app_servers:vars]

ansible_connection=ssh
ansible_ssh_user=root

將Ansible的Inventory路徑設定到環境變數當作預設值
$ vim ~/.profile
$ export ANSIBLE_HOSTS=/Users/shooding/staging
$ source ~/.profile

測試一下對於1台機器的連接狀況
$ ansible all -m ping 
你會得到...

用過Ansible就知道它是透過SSH連到被控制的主機(node)

因此我們需要將docker的SSH port forward出來, 並且將公鑰複製進去被控制的機器。
如果你還不會產生SSH 公鑰/私鑰, 請先完成產生SSH金鑰 的步驟。
或是直接執行:
$ ssh-keygen
會產生~/.ssh/id_rsa和~/.ssh/id_rsa.pub

那麼...

剛剛忘記把docker的port forward出來, 再進行一次吧
先停止所有的機器
bash-3.2$ docker stop $(docker ps -q)
bash-3.2$ docker run -d -p "2222:22" shooding/docker-ubuntu-openssh

參數說明 -p port forward 將SSH port 22 對應到外埠2222
也就是在ansible裡面設定的ansible_ssh_port = 2222

接著將公鑰複製進去被控制的機器
bash-3.2$ docker cp ~/.ssh/id_rsa.pub 660246bd6146:/root/.ssh/authorized_keys
660246bd6146 (這裏請換成你的 container id )

使用Ansible測試連接是否成功?
$ ansible all -m ping
參數說明: 使用ping module測試所有機器
XXXX | success >> {
    "changed": false,
    "ping": "pong"
}


成功了, 在這之後就可以照原來Ansible的使用方法囉!

附錄小幫手
如果你需要所有機器的private IP, 有時候建置互相連接的cluster會用到
bash-3.2$ docker inspect $(docker ps -q) | grep '"IPAddress"'

TODO
其實我很想要省掉docker cp的操作, 而直接將id_rsa.pub透過 docker -v 參數分享空間到
container裡面。例如開機器的時候改成:
docker run -d -p "2222:22" -v ~/.ssh/id_rsa.pub:/root/.ssh/authorized_keys shooding/docker-ubuntu-openssh

但是很可惜這樣做會造成SSH無法登入, 大神請在回應中點評一下。


8/11/2015

Lima開箱


先前在Kickstarter上贊助的Lima終於到貨了, 需要向海關申報價值和補稅金折騰了一陣。
Lima是一個讓你接上USB硬碟把它變成雲端化的一種技術。
首先先來一張三個顏色的疊疊樂。


打開之後很讓人驚豔的一點是包裝盒內有磁吸設計,紅色拉環也非常明顯,無需太多說明。附贈的耳機有木頭裝飾,算是小小驚喜。但是原本以為會靠木質共鳴來提高音質的溫潤感,實測之後純粹是我想太多了,幾乎沒有中低音。

拉開之後發現本體,確實蠻輕巧的。

USB port就是讓你外接硬碟用的,建議是外接一個大於你筆電的硬碟,最大不能超過7TB。外接USB Hub串聯硬碟要等未來功能釋出。

背後的網路孔和電源孔(是的,他需要插座。不然電從哪裡來供給硬碟呢?)
和羅技的Unify接頭比較一下大小,宅宅們應該就有感覺了。為什麼會說宅宅們?因為待會操作和設定確實不太容易。

周邊線材都很好的收納在盒子內,而且公司很細心的附上適合台灣的電源插頭。

造訪直接點這個連結 http://install.meetlima.com 下載安裝軟體,這裏我是用Mac laptop進行下載。你如果用Google搜尋Lima只會找到某某首都,要搜尋meetlima。
令人非常害怕的是安裝檔案竟然有200多MB (你沒看錯, 200多MB)。進行安裝的時候動畫非常的炫,讓我懷疑這個軟體裡面有多少MB是動畫成份。

按照說明上的操作你必須把Lima接上硬碟, 網路, 電源這三樣之後再進行下邊步驟。
你的laptop和lima必須暫時位於相同的網路環境, 也就是家中的router之下。
目前沒有任何地方可以查詢到Lima的MAC Address。

註冊個人帳戶之後Lima service會把這個裝置登記在你的名下。Mac筆電上會多出一顆硬碟,如下圖:

Lima主打的一點就是我們到外面趴趴走的時候,還可以聽存放在家裡硬碟裡面的音樂,所以我先把幾首mp3丟到Lima硬碟裡面。

目前手機app仍在測試階段,當你註冊完畢之後在信箱中應該會有一封信,這是Crashlytics的測試版本。這裏我是用手機安裝iOS版本。


安裝過程也是非常的....久。應該也是下載200MB的軟體。


需要輸入我的帳號密碼,因為我已經在Mac筆電上註冊過,Lima service已經把Lima和他所處的網路設定以及我的帳號綁定在一起。
會根據我輸入的帳號密碼嘗試連接Lima裝置,我猜如果沒有在Mac筆電上註冊,純粹直接透過手機App啟用的話,手機也必須待在家中的網路之下。
連接成功之後會開始把手機上的照片匯入到Lima裡面,這裏似乎只有匯入其中的一部分。可能是某種智能快取技術。
如果你不想匯入可以skip。


又來了非常炫的動畫,到這裡我已經很佩服這間公司的設計和包裝,但是技術就...一直有點卡卡的感覺,可能如同他們在包裝盒上所說的:「At Lima, we focus on what's important. We don't care about technology. We care about you.」
來了,找到我剛剛在Macbook上傳的MP3,如果仔細看的話,它下面的小小圖示(Available)有分成(Available)和(Available via XXX)。
意思是那個檔案並不是存放在我手機裡面,而是在筆電上。

如果點下去播放,會很快的從筆電上快取過來,然後開始播放。一旦快取成功,Available on XXX就變成Available(在本地即手機上) 之後每次播放就只是從手機播放,和筆電無關了。

根據Lima blog上的技術說明,他們採用一種專有(proprietary)的VPN技術加上P2P網路,聽起來相當於自動翻牆。

TODO (之後會再更新這篇文章)
  • 測試用手機看電影
  • 測試用3個Lima同時掛載在我的帳號下看發生什麼事情



5/29/2015

ZENLET 開箱

幾個月前在FlyingV上贊助的ZENLET終於到貨了,包裝盒非常有質感。

打開之後馬上可以看到ZENLET標誌。
官方印製的Thank you note。
比Macbook的Touch panel稍微小一些。


放入卡片的狀態,卡片愈多會卡越緊,要稍微用力才能單手推開。推開的時候實際上是從背面推開,ZENLET的機構會讓卡片會依序展開來, 但是最下面那一張幾乎不會展開。
我注意到信用卡類的有浮出的字其實會干擾, 推開的時候造成一些摩擦力。
由於底部有一層金屬怕會干擾悠遊卡扣款, 所以我馬上跑到7-11測試一下, 感應完全沒問題。

感想:
如果單手推開可以再做滑順一點就好了。

同場加映:





5/27/2015

小朋友保險研究

/** 免責聲明
以下文章僅個人心得, 本網站之內容僅供參考之用,並未據此勸誘使用者採取任何行為,不構成對任何人在任何地區的投資建議、買賣之要約、勸誘買賣有價證券、金融產品或票券或參與任一特定的投資策略或任何其他意思表示,讀者不應視為專業意見而加以倚賴。任何人士或團體根據本網站所載任何資訊、意見或估計行事而直接或間接遭受的任何損失,概不作任何保證或承擔任何責任 */

開始:
最近二寶出生了之後又把以前研究保險的心得翻出來。

先說結論:
我會選擇10萬壽險主約+雙 * 定期實支實付醫療險附約+親子豁免條款
醫療險的額度至少家中次要經濟來源(父、母其中之一)的薪資, 相當於所得替代率的概念, 避免長期住院需要父母辭職照顧的情形。

社會環境&假設前提:
DRG實施後, 平均住院天數下降(因為醫生沒利潤, 會建議患者趕快出院, 自費住院不給付), 門診比例提高, 門診手術費較貴, 最好多投保一些。如果有能力負擔單人房也比較不會被趕著出院, 但是單人房價也是每年都在調高。

定期險vs終身險 (此處以醫療險為例):
終身險前期總投入保費較高, 對父母產生的壓力稍大
反之定期險在前面投入很小, 但小朋友長大以後保費每年增加一些, 約30歲與終身險追平, 但60歲以後保費往往倍增, 這是因為保險公司對於未來的不確定進行風險轉嫁。
但我認為30歲以後應由成年子女自行負擔老年醫療的規劃, 父母只需在年輕時替他們打好基礎即可。
定期險相較之下金流壓力較小,更可以給他們更好的童年環境。

定期險會根據金管會規定每年或數年更新條款, 一般而言從優認定, 隨著醫療手術技術的進步, 這點是最大的好處。
定期險通常只能續約保到75歲左右。
定期險要避免發生扣款中斷。

醫療險:
實支實付如果只保1家不要選 (日額、實支2擇1的)。如果保2家組合, 則盡量選2擇1的, 這樣每一家都可以自由搭配。
實支實付重點要看保不保證續保, 到幾歲?
理賠的項目有沒有全民健保以外的自費支出。(除看護外自費全部包括的概括式條款), 有概括式條款的較佳, 模糊解釋時從優解釋。

需留意超過30天有加倍理賠嗎? 拖過30天的病通常會花大錢了。
實支實付有沒有涵蓋高貴自費藥材?
如果你的保險有Cover, 醫生可能喜歡你這種病患, 可以放新的用利潤高的藥, 醫病關係良好, 也可以放心的升等單人病房。

壽險:
小孩14歲之前壽險額度都沒意義。任何時候小孩掛了我也不想領那種錢。14歲之後, 加公司團保定期壽險(為什麼這時候又要保? 因為實在便宜又大碗), 直到小朋友成年, 工作之後就要自己負擔, 因為這時候他的壽險額度是為了身後留下錢給另一半。

意外險:
所有保險賠率最高的高CP值險種, 完全是風險轉嫁的概念。
金管會有規定一個人最多保多少意外險, 避免殺人詐領,
經濟許可就盡量保滿。公司團保的意外險不計入, 也盡量保滿。

防癌、重大疾病:
(如果家族沒有遺傳病史)小朋友在防癌、重大疾病機率不高可以視自己經濟狀況投保, 用儲蓄準備金替代即可。小朋友成年之後請他自己投保防癌。

燒燙傷:
小朋友最難受的就是燒燙傷, 任何爸媽都會哭翻。
重點是家裡要減少可能發生燙傷的環境, 比買什麼保險都重要。
可加保意外險或是特別針對燒燙傷的險種。

親子豁免條款: 
如果爸媽掛了, 雖然保了很多醫療險, 但是遺眷繳不出來也是枉然, 這條不算便宜。

額度該保多少?
醫療險的額度至少>家中次要經濟來源(父、母其中之一)的薪資, 相當於所得替代率的概念, 避免萬一萬一需要長期住院, 父母一人辭職照顧的情形。
如果報稅時你是列舉申報, (通常有租一整層, 或是已貸款買房正在繳利息的家庭, 往往用列舉)
保險扣除額每個人24000, 因此小朋友的保險支出建議保超過24000, 這時候就相當於保費打折。


/** 免責聲明
以下文章僅個人心得, 本網站之內容僅供參考之用,並未據此勸誘使用者採取任何行為,不構成對任何人在任何地區的投資建議、買賣之要約、勸誘買賣有價證券、金融產品或票券或參與任一特定的投資策略或任何其他意思表示,讀者不應視為專業意見而加以倚賴。任何人士或團體根據本網站所載任何資訊、意見或估計行事而直接或間接遭受的任何損失,概不作任何保證或承擔任何責任 */

5/21/2015

磁浮鋼鐵人開箱


幾個月前訂購的鋼鐵人來了!

磁浮的效果不錯, 有感覺到鎖定在一個3度空間中, 可惜不能飛太高。
鋼鐵人的面罩可以打開, 底下有一個開關是打開全身的燈泡。

放置的時候需要一些技巧, 否則很容易被周圍磁力吸住, 小心撞壞。
當手上傳來磁力鎖定的感覺之後, 緩緩放開腳的部份, 就會保持浮空,
建議使用變壓器12V, 供電比較穩定。

關於底座過熱的問題, 只要保持在磁浮時不要旋轉就幾乎不會熱, 也比較省電。
如果一直放置失敗, 磁力重新鎖定會浪費電並且發熱,
經過不斷地練習, 現在只要5秒內就可以放好。

Mac OS X 安裝memcached for PHP



此處我的開發環境是Mac OS X with MAMP (PHP 5.6.2)
開發環境的安裝步驟

以下是安裝memcache 並且在PHP中啟用.

$brew install libmemcached

在console下
要用$which php
確保是使用/Application/MAMP下面的版本, 如果是用/usr/bin/php 表示需要設定export path 
export PATH=/Applications/MAMP/bin/php/php5.6.2/bin/php:$PATH

然後
$sudo pecl install memcache

如果沒有執行前面安裝libmemcached的步驟, pecl在安裝的時候會詢問libmemcached的路徑.
$vim /Applications/MAMP/bin/php/php5.6.2/conf/php.ini
extension=memcache.so

重新啟動MAMP
在mac os X上將memcached跑起來as a daemon and listen on default port 11211

$memcached -d

如果需要清除memcahed的時候,(例如程式反應不正確)
$telnet 127.0.0.1 11211
>flush_all
>quit


5/14/2015

AWS 2015 Developer Summit in Taipei




BIG BIG thumbs-up to Markku Lepisto for his wonderful speech.
Many interesting topics covered especially AWS Lambda, Container service and IOT live demo of building an earthquake sensor with AWS arduino SDK

Using AWS SDK in arduino IDE is easy, just include the library and headers. 
In the demo, Markku is using SDK from device to send sensing data to Kinesis for analysis.
If gravity changes more than 5g, send an alarm to phone through AWS SNS.
No EC2 instance is required in building such an application, that is powerful.



Sincere suggestions for developers:

  • A/B Testing with the same code but disable several features from flags.
  • Store everything from Day 1 & understand your customers better by analyzing logs. Then you can drop some log.
  • key = faster iteration cycle
    • Build, Test, Fix cycles faster and faster
  • Use TrustedAdvisor to lower your costs.
  • Use 1,000 Spot instances to simulate client workloads. ($3 for 1 hour)
  • Understanding Continuous integration (CI) related new features from AWS last year:
    • CodeCommit = Source control (private GitHub)
    • CodePipeline = Continuous Delivery
    • CodeDeploy = Deployment
  • Container is good, but when container grows, how to manage them? AWS Container service or ECS in short (i personally think it easily confused with EC2)
  • Container service manages status, batch and schedules.
    • Some containers shall be in the same server (for super fast dat exchange)
    • Some containers shall be placed in different AZ for HA
  • Decompose your service to smaller micro service running in containers and put simple functions to Lambda.
Sadly i cannot split myself in half to attend both tracks in the afternoon. I think most people attend the IOT session, which also indicates how hot the topic is in recent years.

5/12/2015

快速搭建本地私有儲存雲, 使用Raspberry Pi 2安裝OpenStack DevStack



0. 我的環境是Mac OS X 10.10
1.
- 使用Ubuntu 14.04 LTS image for Raspberry Pi 2 https://wiki.ubuntu.com/ARM/RaspberryPi
- Download image and unzip to Mac desktop
- use diskutil list 找到你的SD card 例如是/dev/disk1
- sudo diskutil umountDisk /dev/disk1
- sudo dd bs=1m if=~/Desktop/Pi\ 2\ image/2015-04-06-ubuntu-trusty/2015-04-06-ubuntu-trusty.img of=/dev/disk1
- 用這張SD card 幫Raspberry Pi 2開機

2.
- 登入Raspberry pi, 預設是沒有openssh server, 請先外接HDMI螢幕和USB鍵盤登入.
- sudo apt-get install openssh-server

3. 開始安裝Openstack
- sudo apt-get -y update
- sudo apt-get -y install git vim
- git clone https://github.com/openstack-dev/devstack.git -b stable/icehouse devstack/
- sudo devstack/tools/create-stack-user.sh
- sudo su stack
- cd
- git clone https://github.com/openstack-dev/devstack.git -b stable/icehouse devstack/
- sudo chown -R stack:stack /opt/stack
- cd devstack/
- vim local.conf # copy in the contents of the one below. 私有儲存雲只需要帳號(keystone)與儲存(swift)部分, 因此簡化local.conf如下:

[[local|localrc]]

# Credentials
DATABASE_PASSWORD=devstack
ADMIN_PASSWORD=devstack
SERVICE_PASSWORD=devstack
SERVICE_TOKEN=devstack
RABBIT_PASSWORD=devstack

# Services
ENABLED_SERVICES=mysql,key
ENABLED_SERVICES+=,s-proxy,s-object,s-container,s-account

# Branches
KEYSTONE_BRANCH=stable/icehouse
NOVA_BRANCH=stable/icehouse
NEUTRON_BRANCH=stable/icehouse
SWIFT_BRANCH=stable/icehouse
GLANCE_BRANCH=stable/icehouse
CINDER_BRANCH=stable/icehouse
HEAT_BRANCH=stable/icehouse
TROVE_BRANCH=stable/icehouse
HORIZON_BRANCH=stable/icehouse

# Swift Configuration
SWIFT_REPLICAS=1
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5

# Enable Logging
LOGFILE=/opt/stack/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=/opt/stack/logs


# 啟動OpenStack相關服務, 使用./stack
# 如果需要將OpenStack服務停止,使用./unstack

Test the Authentication from Keystone, 請注意單雙引號要正確.
$curl -d '{"auth":{"passwordCredentials":{"username":"demo","password":"devstack"},"tenantName":"demo"}}' -H "Content-type: application/json" http://localhost:5000/v2.0/tokens

可以得到關於整個服務的相關資訊, 例如是, 最重要的就是swift的publicURL以及Region (預設Region名稱是RegionOne):
之後在使用Openstack SDK的時候就需要這些資訊.


{
"access": {
"token": {
"issued_at": "2015-05-12T02:07:24.183444",
"expires": "2015-05-12T03:07:24Z",
"id": "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-mu9NtkFebV79HD61Zhnq5+jX+cUxLgcfRfm-GqdkVcqPRPuzniVh3K+5KYYsmsdaLn0dIJdhRkqq9wTYwTyLQaXECnsVzxX0UQWmrSIBW8p9xvqRwzSGRwGr8l5xbn6gJXyQ==",
"tenant": {
"description": null,
"enabled": true,
"id": "9fa3258c21744af99682681f636ea831",
"name": "demo"
}
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": "http://192.168.10.170:8080",
"region": "RegionOne",
"internalURL": "http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831",
"id": "6cd7ad2e6b4840efbdd63bbac25ec15c",
"publicURL": "http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831"
}
],
"endpoints_links": [],
"type": "object-store",
"name": "swift"
},
{
"endpoints": [
{
"adminURL": "http://192.168.10.170:35357/v2.0",
"region": "RegionOne",
"internalURL": "http://192.168.10.170:5000/v2.0",
"id": "93bc8ca17c9843d9b0a32241211d1700",
"publicURL": "http://192.168.10.170:5000/v2.0"
}
],
"endpoints_links": [],
"type": "identity",
"name": "keystone"
}
],
"user": {
"username": "demo",
"roles_links": [],
"id": "0db2610757ba43368dbd6e32d34462e0",
"roles": [
{
"name": "Member"
},
{
"name": "_member_"
},
{
"name": "anotherrole"
}
],
"name": "demo"
},
"metadata": {
"is_admin": 0,
"roles": [
"bc0f9b54c3b44086a793189da701a7f4",
"9fe2ff9ee4384b1894a90878d3e92bab",
"7ed8a5c783004c39abb8bd3eac10629b"
]
}
}
}

到這裡我們已經完成一個利用OpenStack快速搭建一個本地私有儲存雲的過程, Swift服務網址如下:
http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831
username:demo
password:devstack
region:RegionOne
tenantName:demo
這些參數都是使用OpenStack SDK需要的部份.

你可以安裝python-swiftclient來進行簡單操作
>sudo pip install python-swiftclient
使用swift cli之前, 需要export一些環境變數
export OS_AUTH_URL=http://192.168.10.170:35357/v2.0
export OS_USERNAME=demo
export OS_TENANT_NAME=demo
export OS_PASSWORD=devstack

>swift stat
>swift list #列出目前有的container
>swift post abc #產生一個container named abc

參考資料:
https://wiki.ubuntu.com/ARM/RaspberryPi

5/09/2015

AWS certified solutions architect - associate level 準備筆記






最近剛考過AWS認證架構師, 分享一些準備心得:

 
架構
架構師的題目其中60%是如何達到Fault-tolerant, high availability, cost-effective. 這裡是重點中的重點, 詳細各領域的比重請看Blueprint.

AWS的題目會一直進化, 有Beta test機制讓志願者測試新題目, 之後再放入正式題庫中.
有些實作題有遇過的人一定知道答案並且會心一笑, 沒有經驗的只能抓抓頭.
出題目的人非常有實務經驗, 不是考死背, 是當你的公司要推出新服務、全球化實際會面臨的困難與挑戰, 這也正是架構師的目標.

考試之前閱讀大量的FAQ和whitepapers. 我會建議有空就盡量讀, 安排好考試時間之後下班就盡量唸whitepaper, 只有好處沒壞處. 同時可以檢討自己在工作實務面上的缺失,非常有幫助.

請務必要放下工程師的牛脾氣, 明明XXX服務比較好用我們公司也這樣用, white paper怎麼建議要改架構?
Sorry 請不要跟自己過不去, AWS的考試當然都希望盡量偏向使用AWS的服務當作Best practice. 請放下執念, 先清空自己再來吸收white papers比較讀得下書.

我的筆記
AWS Instance store
AWS Security
AWS VPC
AWS IAM Role

進入考場
考試地點在台北的資策會考試中心,

考試時間總長80分鐘, 開始前15分鐘要報到並且清空口袋, 一旦入場可以直接開始.
題目目前有英文/簡體版(是的目前只有簡體), 建議辛苦一點選英文版, 因為考前在準備資料幾乎都是英文版, 考試要再轉換很累.

參加認證的人都必須要同意NDA (Non-disclosure agreement)不得公開考試內容.
可以確定的是只上3天輔導課一定不夠的, 一定要有實作經驗.

應答
題目分成單選題(multiple choice)和複選題(multiple response) 因為按鈕樣式不同有防呆,
不用擔心是否複選題你卻只選一個答案的情形發生.

因為英文題目加上情境題, 所以要整個閱讀完就蠻吃力的, 時間不太夠.
尤其複選題通常至少浪費1分鐘, 最好要配速100%確定的單選先答, 不確定的就標記起來之後回來答.

結束之後填寫問卷, 然後馬上知道結果(相當殘酷阿).

AWS Instance store

Instance store 速度超強 

測試數據:
https://gist.github.com/ktheory/3c3616fca42a3716346b

Instance-store is over 5x faster than EBS-SSD for uncached reads.Instance-store and EBS-SSD are equivalent for cached reads.Instance-store is over 10x faster than EBS-SSD for writes.

不是每種機器等級都有支援:

Some instance families, such as T2 and T1, do not support instance store volumes at all.

資料揮發時機:

重開機沒事兒, 不用自己嚇自己, 只有stop, crash會讓資料消失.

Ephemeral storage or instance-store DOES persist across reboots of an instance! It does not persist across a stop/start, nor a termination, nor some instance hardware failures. 

AWS Security

超詳細的解說AWS各個服務用到的安全技術,
如果沒有時間一一試驗AWS的服務, 
可以從這份white paper當中快速了解各服務的目的以及底層仰賴的技術。


AWS VPC

Security group是作用在instance 等級 (只管理允許)
Security group 與 instance 是多對1, 一台instance可以同時屬於多個security group方便套用規則, 讓每個security group規則盡量簡單.
     Security Group of EC2-Classic只能管進, VPC內可管進出.
Network ACL是作用在subnet等級的虛擬防火牆 (可以管理進出), 按照順序, 第一個符合即決斷.

Security Group Network ACL
Operates at the instance level (first layer of defense)
Operates at the subnet level (second layer of defense)
Supports allow rules only
Supports allow rules and deny rules
Is stateful: Return traffic is auwtomatically allowed, regardless of any rules
Is stateless: Return traffic must be explicitly allowed by rules
We evaluate all rules before deciding whether to allow traffic
We process rules in number order when deciding whether to allow traffic
Applies to an instance only if someone specifies the security group when launching the instance, or associates the security group with the instance later on
Automatically applies to all instances in the subnets it's associated with (backup layer of defense, so you don't have to rely on someone specifying the security group)


非常清楚的示意圖:


可以開一個IAM Role用來管理 VPC, 根據Policy最小可以鎖到Resource level,
幾乎VPC相關的所有action都能夠鎖, 例如只允許開機器在某一個subnet.

切割出一個dev/test subnet並且提供dev account和 test account不同的權限.

AWS IAM Role

IAM是root account可以管理User和Group和權限關係, 接近原來Linux的管理概念.

Role是在AWS背端整合好的特殊User, 一樣可設定權限, 
access key 和 secret key不需要被揭露, 
開新的instance可以用IAM Role來啟動, 就不需要設定access key.
提高自動化以及降低了機密外洩的風險.

IAM roles. A role is an entity that has its own set of permissions, but that isn't a user or group. Roles also don't have their own permanent set of credentials the way IAM users do.
IAM Role讓AWS在背端替你餵Access key給 instances.

IAM Best practice:

影片:

Docker 123

介紹如何在Mac上安裝與使用Docker, 以及一些基本觀念。


3/11/2015

阿貝好威的實驗室: 初探Docker - Docker 跟 LXC 以及一般Hypervisor有何差別?

阿貝好威的實驗室: 初探Docker - Docker 跟 LXC 以及一般Hypervisor有何差別?: 聽到Docker 這個玩意大概是2014年年初,但是一直到最近才真的有時間開始研究.... 話說一開始聽到Docker 是利用LXC的原理來實作,腦袋瓜馬上浮現的架構圖就如下圖所示,是個Lightweight 且只能跑Linux的環境東西,能應用的範圍應該有限?但是...