AWS EC2 關於 User Data 的小事

2017-07-13 AWS

因為前陣子被 User-Data 弄了一些時間,同樣在公司有許多同事對於 User Data 有許多疑惑的地方,趁記憶猶新的時候記錄下來

 

開始講之前一樣先提 AWS 也有在文件提到 User-Data,這篇只講 User-Data。

 

User-Data 是依附在 EC2 底下的功能,主要就是講 EC2 在啟動的時候可以按照 User-Data 裡面寫的指令做事,不需要再 Login 到 Instance 裡面。

 

限制

  • User-Data 並沒有隱密性,在 Management console 是明碼存在,而在 Instance 裡面是存在 meta-data 裡面,也是明碼顯示。
  • 最大限制為 16 KB。
  • 可以跑 base64
  • 只有在 Launch instance 的時候跑,你如果 stop 再 start 的話是不會跑 User-data 的。

 

User-data 在 Instance 的實現

在 EC2 內建是跑 cloud-init 來執行 User-data,以 service 的方式跑在背景,詳細可以從 Log 看到 cloud-init 的過程:

  • /var/log/cloud-init.log
  • /var/log/cloud-output.log

 

User-data 在 Only private instance 的實現

這邊指的是在 Private subnet 而沒有 NAT Gateway 的環境下,如果你要透過 Internet 去做事的處理方式

 

cloud-init 本身是吃 export http_proxy/https_proxy 的,但 cloud-init 是跑在 rc3 的 service,根本吃不到你設在環境變數的 export http_proxy,所以即使你設在 environment 也沒用。

 

這個問題在 cloud-init 有一篇提到「setting up system proxy via cloud-config might be nice

 

首先先說在 AWS Ubuntu 和 Amazon Linux 的 cloud-init 安裝方式不同,設定 Proxy 的方式也不太相同:

 

  • Ubuntu 的 cloud-init

在 Ubuntu 的 cloud-init 是用 apt 裝 package 的方式,如果要添加 Proxy 要從 /etc/init/cloud-config.conf 這邊加入 proxy

 

  • Amazon Linux 的 cloud-init

Amazon Linux 和 Ubuntu 的安裝方式不一樣,設定檔也不同,從 cloud-init 的 service 看到 (/etc/init.d/cloud-config) 在 runservice 之前有一段

# If there exist sysconfig/default variable override files use it…
[ -f /etc/sysconfig/cloud-init ] && . /etc/sysconfig/cloud-init
[ -f /etc/default/cloud-init ] && . /etc/default/cloud-init

由此可知可以從 /etc/sysconfig/cloud-init 或是 /etc/default/cloud-init 加入 proxy

 

 

至於為什麼要 no_proxy !? 這是因為幾乎所有 AWS 上跑的服務都會用到 meta-data,例如 credentials,所以一定要 no_proxy 169.254.169.254,否則你的服務就會一直遇到掛 Role 但找不到 credentials 的情境。

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱