顯示具有 AWS 標籤的文章。 顯示所有文章
顯示具有 AWS 標籤的文章。 顯示所有文章

2019/05/31

Build AWS EC2 for CodeDeploy

最後更新時間:2019/05/31


文章開頭先謝謝 ellery 大大,沒有你提醒,我大概會繼續通靈 debug 幾個禮拜 XD


先說明 CodeDeploy 大概的運作機制:
  1. 先設定好 EC2 的基本權限 (IAM)
  2. 要支援 CodeDeploy 的 EC2 instance 必須安裝 CodeDeploy agent (很重要,EC2 上 trigger event 都是靠這個 agent)
  3. 設定 CodeDeploy 上 Application 對應到的 EC2 instances
  4. User 先將打包好的 code 送到 S3 上存放
  5. 接下來 trigger application 上特定的  deploy-er,將特定版本的 code 從 S3 上派送到 EC2 instance 上
  6. EC2 instance 的 CodeDeploy agent 收到 event 以後,會按照 appspec.yml 中指定的動作來動作,操作完成會回傳 status 給 CodeDeploy。
  7. CodeDeploy 會在 pannel 顯示 deploy 的進度和狀態。

TL;DR

2019/05/27

Deploy to AWS EC2 via Rsync

今天嘗試讓 Bitbucket 的 Pipeline 測試完畢以後,自動部屬到 EC2 上。

遇到幾個有點頭大的問題:
  • EC2 只要 restart 後 IP 都會改變
  • RSync based 在 SSH 上,所以再次連線都會有 hand shake 問題 (known_hosts)
  • 要連上 EC2 需要 ssh -i my.PEM,把這個 PEM 塞進 Pipeline 或是參數都是好方法

這幾點先不考慮的時候,pipeline script 大概會長這樣:
    - step:
        name: Deploy to EC2
        deployment: test
        caches:
        script:
            - apt-get update && apt-get install -y zip unzip rsync openssh-client ssh
            - rm -fr .git vendor
            - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
            - composer --version
            - composer install --no-interaction --no-progress --prefer-dist --no-dev
            - chmod 600 u18-micro.pem
            - echo '|1|gdwZ6TN1l9.............GOqLzzpGY=' > ${HOME}/.ssh/known_hosts
            - rsync -av --delete --force --progress -e "ssh -i my-ec2.pem" ./ ubuntu@${Host}:/var/www/

注意紅色標記的地方,這幾個都是很重要的 key,把這些資料放在 script、git repository 都是很糟糕的方法。

繼續找方法解決這些鳥問題。

2018/09/19

透過 AWS 的服務防止圖片盜連

前陣子決定要找部落格的圖床,再加上 Blogger 開始支援 HTTPS,最後決定花點小錢,直接使用 AWS s3 + cloudFront 來當作圖床。

沒錯,流量小的時候的確是只要花一點小錢,但是哪天誤會被 DDoS、圖片被有名網站盜連,這就不是錢錢可以解決的事情了。

「盜連」這個動作在英文是「Hotlinking」,搜尋了一下發現 AWS 可以透過 CloudFront + WAF 的輔助,完成防止盜連的功能:How to Prevent Hotlinking by Using AWS WAF, Amazon CloudFront, and Referer Checking

主要是使用 HTTP header 中的 referer 來做來源檢查,設定可參考下圖。

圖一:先去 CloudFront 察看正常會使用到圖片的平台



圖二:在 WAF 建立規則


這樣大致上就可以解決圖片盜連的問題了。

但,AWS WAF 的定價可不便宜,一個 web ACL 定價是每個月 5 USD,也就是說如果圖片每個月被存取的次數沒有超過 400 次以上,其實用了 WAF 反而費用較高。就請大家自行衡量了。

2014/04/01

將資料同步至 AWS S3

有項工作需要將 BTSync 上的資料同步上 AWS S3,並做靜態網頁使用。原本打算用來將 S3 掛載為虛擬磁碟的 s3ql 來用,但 s3ql 寫入的是 block data 而非 file,檔案同步上去要當作 static website 來用不太可能。

後來發現 AWS command line interface 的 s3 有個功能「sync」,會自動偵測要同步的項目。於是可以寫成:

$ aws s3 sync btsync/ s3://target-bucket

以上已可以將有異動的資料上傳到 AWS S3 上,但若 BTSync 若有檔案刪除,S3 上的資料仍會保留。若要刪除的動作也在 S3 重複一次,則要加上「--delete」參數:

$ aws s3 sync btsync/ s3://target-bucket --delete

還差一個步驟。要做 static web hosting,檔案必須讓所有人可以讀取,所以從網頁上操作的話,需要手動「Make Public」。


而 CLI 則是使用 --grants 幫檔案加上權限。參考 AWS ACL 設定,要讓所有人均可讀取,要設定成:

--grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

如此一來,上傳的檔案會自動設定為公開。

完整的 sync 指令如下:

aws s3 sync btsync/ s3://target-bucket --delete --exclude ".Sync*" --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

最後定 crontab 自動執行,大功告成。