跳到主要內容

發表文章

目前顯示的是 7月, 2019的文章

[CloudFormation教學2] 如何滾動更新Auto Scaling Group裡的 Instance

Rolling Updates VMs via Cloud Formation on AWS  前言 要將一個服務上線, 除了需要將它架設起來之外, 還需要考慮到後續的維運, 若將來前端傳過來的請求後端無法負荷時(Overloaded), 後端該做什麼調整? 以及當將來有服務要更新時, 怎麼做才能確保服務不中斷 Overloaded 的問題可以透過Auto Scaling的機制去解, 之前的 文章 有帶著大家利用CloudFormation來部屬有水平擴充功能的Auto Scaling Group 至於如何保證更新時服務不停機, 則可以透過滾動式的更新(Rolling Update), 在更新時一次只更新一小部分副本, 等成功後再去更新剩下的, 直到最後所有的副本都被更新完成 如何做Rolling Update 需要在Auto Scaling Group中定義好Update Policy "AutoScalingGroup": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Properties": { "AvailabilityZones": [ "us-east-2c" ], "LaunchConfigurationName": { "Ref": "LaunchConfig" }, "MinSize": "1", "MaxSize": "4", "DesiredCapacity": "1", "HealthCheckType": "ELB", "HealthCheckGracePeriod": "1800", "LoadBalancerNames&

如何在AWS上建立可水平擴展的EC2群集, 使用AWS CLI

       Auto Scaling on AWS via AWS CLI 前言 以下的文章將帶著大家一步一步的在AWS雲上建立Auto Scaling Group做為可以自動水平擴展的EC2群集, 若文章有有什麼不清楚的地方, 歡迎各位在下方留言, 希望這篇教學能幫助到正在學習AWS的朋友們 大致上需要部屬在雲上的資源有 Security Group Launch Configuration Load Balancer Auto Scaling Group Security Group Security Group可以決定要開那些Port或是限制那些IP才可以訪問 因為建立Security Group時需要明確指定要建在哪個VPC上, 所以在開始建立Security Group前, 先執行以下的指令把目前可用的VPC Id輸出 vpcId=$(aws ec2 describe-vpcs | jq -r ".Vpcs[0].VpcId") 有了VPC Id後, 接下來才能開始建立Security Group __sgName='CliGroup123' sgGroupId=$(aws ec2 create-security-group \ --group-name $__sgName \ --description "My security group" \ --vpc-id $vpcId | jq -r ".GroupId") 最後做ingress來宣告網路的開口 aws ec2 authorize-security-group-ingress \ --group-id ${sgGroupId} \ --protocol tcp \ --port 5000 \ --cidr "0.0.0.0/0" Launch Configuration Launch Configuration是用來定義VM instance的種類, OS Image的種類以及套哪個Security Group, 使用哪支金鑰對, 網路要不要對外等等的配置資訊 __imgId=&#

[CloudFormation教學] 如何秒速般地在AWS上建立可水平擴展的EC2群集

Auto Scaling and Rolling Updates on AWS via Cloud Formation 前言 在設計架構時, 通常會去考慮水平擴展的可能性, 使其將來能應付突然湧入的大量請求, 要作到這點, 可以把EC2建在AWS的Auto Scaling Group裡面,   透過修改Launch Configuration, 讓Auto Scaling Group去調整目前EC2的實體數量,  然後外部再串一個Load Balancer,做為用戶端的單一存取窗口並且將流量分散到各個EC2實體上 大致上需要部屬在雲上的資源有 Security Group Launch Configuration Load Balancer Auto Scaling Group 如果用AWS Portal去一個個把這些資源建立起來的話實在很花時間, 這邊介紹如何使用CloudFormation快速的部屬雲端資源 CloudFormation 這個功能有點類似於Azure Resource Manager, 開發人員可以用一份描述檔以JSON或是YAML的格式來描述雲端上的資源,  然後再餵給CloudFormation 去把所有資源部屬起來 描述檔結構, 基本上可以分為四個部分 { "AWSTemplateFormatVersion" : "2010-09-09" , "Metadata" : { ... }, "Parameters" : { ... }, "Resources" : { ... } } Parameters Parameters這邊我們先定義幾個變數: myVPC, keyName 以及BuildNumber "Parameters": { "myVPC": { "Type": "String", "Default": "vpc-da58b9b

如何在 AWS Elastic Beanstalk上部屬Node.js應用程式(快速入門)

前言 以下的教學將手把手帶著大家把Nodejs應用程式部屬到AWS Elastic Beanstalk上面, 文章若有不清楚的地方也歡迎大家在文章底下留言反應 以下教學將會使用到 aws cli ,以及  awseb cli 首先, 安裝CLI工具 apt-get update apt-get install python-pip apt-get install awscli apt-get install awsebcli 設定CLI工具 aws configure 填入region, id, key 工具的設定好之後, 接下來要帶著大家在Elastic Beanstalk上面建立以下資源 1. 建立Application 首先在Elastic Beanstalk建立應用程式基本資料, 我們可以在這邊給應用程式一個名子, 以及相關描述 appname = "andytestawseb12345" aws elasticbeanstalk create-application \ --application-name $appname \ --description "my application" 2. 建立Application version 在這邊可以任意地定義部屬的應用程式版本 appver = "dev" aws elasticbeanstalk create-application-version \ --application-name $appname \ --version-label $appver 輸出結果 {     "ApplicationVersion": {         "ApplicationName": "andytestawseb12345",         "Status": "UNPROCESSED",         "VersionLabel": "dev",       

AWS 服務介紹

以下是簡單的整理2018 AWSome Day 的內容 基本上AWS的服務可以分成五大類 Compute, Network, Storage, Security & Identity, Application Compute 方面如 EC2, Lambda 等等... Network 方面如 Route 53, Elastic Load Balancing 等等... Storage 方面如 S3, Glacier 等等... Security & Identity 方面如 IAM 等等... S3 使用S3來host靜態檔案, 好處是開發者不需要租用EC2 然後在上面裝Apache, 換個角度想的話, 我們可以把這些靜態檔案從APP Server 當中抽離, 不讓他去占用EC2的資源 在S3上面我們可以訂定物件的生命週期, 適時的將檔案保存在合適的空間裡 未完 ...

Cannot restart container no space left on device

Error Message Error response from daemon: Cannot restart container mongo: mkdir /var/lib/docker/overlay2/605126f44fb2514d9e5ee60d75b2d69dea402ed8feec425bbadd50859e89d5b9/merged: no space left on device 通常在docker用了一段時間之後, 會發現他佔用掉不少的磁碟空間,  這時候若不去清理docker產生出來的垃圾的話, 很容易在操作docker指令時跑出錯誤訊息no space left on device 首先, 查詢可回收的空間 docker system df 這個指令可以看到目前docker佔用了多少磁碟空間 admin@ubuntu:~$ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 99 9 42.62GB 34.18GB (80%) Containers 9 7 327.8MB 3.018kB (0%) Local Volumes 20 1 995.6MB 995.6MB (100%) Build Cache 0 0 0B 0B   RELAIMABLE   是總共可以回收的空間, 也就是垃圾占用的空間, 而這些垃圾通常是指一些沒有被容器使用的image(包含dangling image,即 <none> image)或是volume 接下來, 回收空間 d

簡單介紹Docker儲存卷(Volume)的作用, 以及如何保存資料到宿主機上

前言 容器的鏡像是個由多個鏡像堆積起來的分層結構, 當容器啟動時容器層會被加載到所有鏡像層的頂部, 這是所有鏡像層中唯一的可寫層, 容器執行過程中的所有檔案變化都會被寫入到這一層中, 但是當容器生命週期結束時, 容器層也會跟著被消滅 若想要將這些改變保存下來的話, 可以使用docker的儲存卷功能, 將宿主機上的某個目錄掛載起來,  任何動態產生的資料就能被寫入到宿主機上保存 以下介紹兩種方法 1. 掛載匿名卷 使用Dockerfile FROM node:8.11.1 WORKDIR /app ADD . /app RUN npm install VOLUME /app/upload_folder EXPOSE 1337 CMD npm start 如果沒有特別想要指定宿主機上的某個目錄, 可以讓docker自動建立一個匿名卷掛載到容器內, 這個方法會在/var/lib/docker/volumes/<id>路徑下, 建立_data的資料夾, 容器內所有在upload_folder裡的寫入都會被保存到_data裡面 掛載匿名卷也可以使用docker -v 指令 docker -v /app/upload_folder 2. 掛載命名卷 當然我們也可以明確的告訴docker去掛載宿主機上的某個資料夾到容器內 docker -v /home/andy/upload_folder:/upload_folder

使用Powershell處理Http Reqest

使用Powershell處理Http Request (How to handle HTTP request in powershell ) 前言 在Linux的世界裡我們可以用cURL發請求去取得Web 上的資源, 而在Windows則可以使用Invoke-WebRequest做到相同的事情 語法  Invoke-WebRequest -Uri $AppUrl -Method Get 例如 $request = 'http://andy.lai.org/ws/2/artist/5b11f4ce-a62d-471e-81fc-a69a8278c7da?inc=aliases&fmt=json' $response = Invoke-WebRequest $request 得到的response會長這樣 StatusCode : 200 StatusDescription : OK Content : [{"answer":{"action":{"type":"","uri":""},"image":[],"video":[],"title":"","text":"隨便就可以打開了","speak":""},"intent":"itent_on_computer","slots":[]},{"answer":{ "action":{"type":"","uri":""},"image":[],"v... RawContent : HTTP/1.1 200 OK Access-Control-Allow-Origin: * Connection: keep-alive Content-

[Azure Service Domain] 無法刪除剛購買的Domain name

Azure Service Domain 無法刪除剛購買的Domain name (Not able to delete domain name bought from Azure Service Domain) 前言 在Azure Service Domain上購買domain name可以擁有5天的鑑賞期, 若覺得這domain name不好用, 可以在鑑賞期內選擇Cancel purchase取消購買拿回退款 但是當點選了Cancel purchase的時後, 卻出現了無法刪除的錯誤訊息如下 cannot perform delete operation because following scope(s) are locked 這是預設的保護機制, 因為刪除domain可能會造成原本使用這domain的Web App變得無法存取, 所以Azure 預設會啟用 resource locking 解除resource locking Step 1. 點選左邊側欄內的Locks選項 Step 2. 右邊會顯示目前Lock的動作 可以在這邊看到目前被鎖定的動作是Delete 點選最右方的Menu按鈕 Step 3. 選擇刪除 如此一來就能解鎖Delete的限制