日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

使用實例自定義數據在實例啟動時自動執行命令或腳本

更新時間:

實例自定義數據是指用戶上傳給實例的腳本、指令或配置文件等數據,可用來完成實例初始化或其他配置,例如實例首次啟動時,自動運行服務啟動腳本、安裝軟件、打印日志等。本文介紹如何將自定義數據傳入ECS實例、修改自定義數據、如何查看自定義數據等。

實例首次啟動時會自動運行自定義數據,部分自定義數據格式還支持在Linux實例每次啟動時都運行。詳細說明,請參見自定義數據格式及運行頻率

使用限制

  • 實例的網絡類型必須為專有網絡VPC。

  • 實例必須使用公共鏡像或基于公共鏡像創建的自定義鏡像,且操作系統需為以下類型之一:

    • Alibaba Cloud Linux、CentOS、CentOS Stream、Ubuntu、SUSE Linux Enterprise Server、Red Hat Enterprise Linux、OpenSUSE、Debian、AlmaLinux、Rocky Linux、Fedora

    • Windows Server 2008 R2及更高版本

  • 已停售的實例規格中,僅I/O優化實例支持實例自定義數據功能,非I/O優化實例不支持該功能。更多信息,請參見已停售的實例規格

使用自定義數據

將自定義數據傳入ECS實例

  1. 準備實例自定義數據。

    支持的自定義數據格式、任務被執行頻率及其說明,請參見自定義數據格式及運行頻率

    重要

    自定義數據內容可不經過Base64編碼,且在未經過Base64編碼前的大小不能超過32 KB。

  2. 將自定義數據傳入ECS實例。

    • 創建新實例時傳入:數據會在實例首次啟動時、更換操作系統、重新初始化系統盤時被執行。

    • 修改已有實例的自定義數據:數據會在實例更換操作系統、重新初始化系統盤時被執行。

      部分自定義數據格式還支持在Linux實例每次重啟時被執行。詳細說明,請參見自定義數據格式及運行頻率

  3. 創建新實例時傳入自定義數據

    實例購買頁展開高級選項區域,在自定義數據區域輸入實例自定義數據。

    如果實例自定義數據已進行Base64編碼,請勾選輸入已采用Base64編碼,且在進行Base64編碼前自定義數據內容的大小不能超過32 KB。否則,無需勾選,系統會自動對內容進行Base64編碼。

    修改已有實例的自定義數據

    1. 確保實例處于已停止狀態。

      重要

      如果實例的計費方式為按量付費、網絡類型為專有網絡,停止實例時,停止模式建議選擇普通停機模式,選擇節省停機模式會因計算資源(vCPU和內存)被回收,再次啟動實例時可能因為庫存不足導致啟動失敗。更多信息,請參見節省停機模式

    2. 實例頁面,選擇icon1 > 實例設置 > 設置用戶數據,然后在用戶數據區域輸入自定義數據。

  4. 根據設置的腳本內容驗證自定義數據的運行效果。

    說明

    當User-Data執行遇到問題時,可以通過云助手公共命令ACS-ECS-UserData-Check-for-linux.sh來獲取失敗相關的錯誤日志。如果返回有錯誤信息表示腳本執行有問題,如果沒有返回錯誤信息表示執行沒有報錯,需要排查其他方面。關于云助手公共命令的更多信息,請參見查看和執行公共命令

    例如我們在Linux實例中傳入了User-Data腳本,內容如下:

    #!/bin/sh
    echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt

    您可以運行cat userdata_test.txt命令來查看效果,系統已經向userdata_test.txt文件寫入系統時間。

    view-result

查看實例的自定義數據

自定義數據傳入實例后,您可以通過元數據或控制臺查看實例的自定義數據信息。

通過元數據獲取(普通模式)

  • Linux實例

    curl http://100.100.100.200/latest/user-data
  • Windows實例

    Invoke-RestMethod http://100.100.100.200/latest/user-data

通過元數據獲取(加固模式)

假設,設置元數據服務器訪問憑證有效期為180秒。

  • Linux實例

    TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:180"`
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/user-data
  • Windows實例

    $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "180"} -Method PUT –Uri http://100.100.100.200/latest/api/token
    Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/user-data

通過控制臺獲取

  1. 確保實例處于已停止狀態。

    重要

    如果實例的計費方式為按量付費、網絡類型為專有網絡,停止實例時,停止模式建議選擇普通停機模式,選擇節省停機模式會因計算資源(vCPU和內存)被回收,再次啟動實例時可能因為庫存不足導致啟動失敗。更多信息,請參見節省停機模式

  2. 實例頁面,選擇icon1 > 實例設置 > 設置用戶數據,然后在用戶數據區域查看已設置的自定義數據。

關于元數據的更多說明,請參見實例元數據

Linux腳本使用示例

示例一:使用User-Data腳本自定義yum源、NTP服務和DNS服務

系統會在實例啟動時自動配置默認的yum源、NTP服務和DNS服務,您可以使用實例自定義數據更改默認的yum源、NTP服務和DNS服務,但請注意:

  • 如果您自定義了yum源,阿里云官方不再提供yum源相關支持。

  • 如果您自定義了NTP服務,阿里云官方不再提供相關時間同步服務。

適用于CentOS 7.2的示例User-Data腳本如下:

#!/bin/sh
# Modify DNS
echo "nameserve 8.8.X.X" | tee /etc/resolv.conf
# Modify yum repo and update
rm -rf /etc/yum.repos.d/*
touch myrepo.repo
echo "[base]" | tee /etc/yum.repos.d/myrepo.repo
echo "name=myrepo" | tee -a /etc/yum.repos.d/myrepo.repo
echo "baseurl=https://mirror.centos.org/centos" | tee -a /etc/yum.repos.d/myrepo.repo
echo "gpgcheck=0" | tee -a /etc/yum.repos.d/myrepo.repo
echo "enabled=1" | tee -a /etc/yum.repos.d/myrepo.repo
yum update -y
# Modify NTP Server
echo "server ntp1.aliyun.com" | tee /etc/ntp.conf
systemctl restart ntpd.service
說明
  • 其中8.8.X.X為DNS服務器地址、https://mirror.centos.org/centos為CentOS的yum倉庫地址、server ntp1.aliyun.com為阿里云的NTP服務器地址,請您根據實際環境替換。

  • 您也可以使用Cloud Config數據更改yum源,但是不夠靈活,不能適配阿里云已對部分yum源進行預配置的情況,建議使用User-Data腳本。

在創建實例時設置實例自定義數據,啟動后登錄實例查看效果,確認實例的yum源、NTP服務和DNS服務配置符合預期,如下所示。

[root@iZbp1csxtw7jo9zp12s**** ~]# cat /etc/yum.repos.d/myrepo.repo
[base]
name=myrepo
baseurl=https://mirror.centos.org/centos
gpgcheck=0
enabled=1
[root@iZbp1csxtw7jo9zp12s**** ~]# cat /etc/resolv.conf
nameserver 8.8.X.X
[root@iZbp1csxtw7jo9zp12s**** ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.XX.XX) 56(84) bytes of data.
64 bytes from 14.215.XX.XX (14.215.XX.XX): icmp_seq=1 ttl=52 time=26.3 ms
64 bytes from 14.215.XX.XX (14.215.XX.XX): icmp_seq=2 ttl=52 time=26.3 ms
64 bytes from 14.215.XX.XX (14.215.XX.XX): icmp_seq=3 ttl=52 time=26.2 ms
^Z
[2]+  Stopped                 ping www.baidu.com
[root@iZbp1csxtw7jo9zp12s**** ~]# cat /etc/ntp.conf
server ntp1.aliyun.com
[root@iZbp1csxtw7jo9zp12s**** ~]# systemctl status ntpd.service
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-09-06 14:53:19 CST; 13min ago
 Main PID: 5795 (ntpd)
   CGroup: /system.slice/ntpd.service
           └─5795 /usr/sbin/ntpd -u ntp:ntp -g

Sep 06 14:53:19 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: Listen and drop on 1 v6wildcard :: UDP 123
Sep 06 14:53:19 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: Listen normally on 2 lo 127.0.XX.XX UDP 123
Sep 06 14:53:19 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: Listen normally on 3 eth0 192.168.XX.XX UDP 123
Sep 06 14:53:19 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: Listening on routing socket on fd #20 for interface updates
Sep 06 14:53:19 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: 0.0.XX.XX c016 06 restart
Sep 06 14:53:19 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: 0.0.XX.XX c012 02 freq_set kernel 0.000 PPM
Sep 06 14:53:19 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: 0.0.XX.XX c011 01 freq_not_set
Sep 06 14:56:34 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: 0.0.XX.XX c61c 0c clock_step +0.464773 s
Sep 06 14:56:35 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: 0.0.XX.XX c614 04 freq_mode
Sep 06 14:56:36 iZbp1cjdaurreftzgpgvqoZ ntpd[5795]: 0.0.XX.XX c618 08 no_sys_peer

示例二:使用User-Data腳本自定義管理員賬號

Linux實例默認使用root用戶作為管理員,您可以使用實例自定義數據使用其他用戶作為管理員。

適用于CentOS 7.2的示例User-Data腳本如下:

#!/bin/sh
useradd test
echo "test   ALL=(ALL)        NOPASSWD:ALL" | tee -a /etc/sudoers
mkdir /home/test/.ssh
touch /home/test/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis****" | tee -a /home/test/.ssh/authorized_keys
說明

請使用您的公鑰替換示例中的公鑰ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis****

示例User-Data腳本的效果如下:

  • 創建名為test的用戶,并將其作為管理員賬號使用。

  • 僅允許該用戶使用SSH密鑰對遠程連接實例,不能使用用戶密碼。

  • 如果該用戶執行需要管理員權限的操作,通過sudo命令提權即可,無需輸入密碼。

在創建實例時設置實例自定義數據,啟動后可以通過test用戶和SSH密鑰對遠程連接實例,如果嘗試使用密碼登錄會報錯。連接實例后,可以通過sudo命令提權執行需要管理員權限的操作,示例如下。

[test@iZbp1csxtw7jo9zp12s**** ~]$ cd /root
-bash: cd: /root: Permission denied
[test@iZbp1csxtw7jo9zp12s**** ~]$ sudo cd /root
[test@iZbp1csxtw7jo9zp12s**** ~]$ 

自定義數據格式及運行頻率

Linux實例

Linux實例是通過cloud-init組件控制實例的啟動行為。在實例首次啟動過程中,系統會自動運行自定義數據。實例重啟時,自定義數據是否會被執行,由自定義數據的格式決定。

如何判定Linux實例是否是首次啟動

實例啟動、更換操作系統、重新初始化系統盤時,cloud-init會判斷當前系統上是否存在緩存目錄,且緩存是否指向了當前實例的實例ID。如果一致,則表示系統是首次啟動,否則表示系統不是首次啟動。具體詳情請參見Boot stages

常見的幾種Linux實例自定義數據格式如下:

說明
  • 自定義數據格式的詳細說明,可參見cloud-init文檔User-Data Formats

  • 如果您的User-Data腳本、Cloud Config數據或Include文件內容的大小超過32 KB,數據類型建議選擇Gzip壓縮內容

  • 如果任務需要在實例每次啟動時都執行,數據類型建議選擇Cloud Config數據Upstart Job

User-Data腳本

  • 簡介

    User-Data腳本傳入Linux實例后直接作為Shell腳本執行,且僅在實例首次啟動時運行一次。

  • 運行頻率

    • 啟動實例:僅在實例首次啟動時運行一次,重啟實例不會再自動運行。

    • 更換操作系統:自動運行。

    • 重新初始化系統盤:自動運行。

    重要

    以下情況不會自動運行腳本:

    • 如果更換操作系統使用的是自定義鏡像且來源于原實例,更換操作系統時會判斷實例不是初次啟動,因此不會自動運行腳本。

    • 如果創建使用的是自定義鏡像,則創建實例時系統盤就有數據,初始化系統盤時會判斷實例不是初次啟動,因此不會自動運行腳本。

  • 格式

    首行均以#!開頭。

  • User-Data腳本示例

    #!/bin/sh
    echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt

    示例User-Data腳本的效果是在實例首次啟動時,向userdata_test.txt文件寫入系統時間。

Cloud Config數據

  • 簡介

    在Cloud-init中,定義了一系列的功能模塊,來完成部分需要執行的任務和配置,例如安裝軟件包、設置網絡等。執行哪些模塊及具體的執行邏輯,由Cloud Config數據決定,可從vendordata、自定義數據、內核參數中獲取。在創建ECS實例時,用戶可自定義Cloud Config數據,指定需要執行的模塊和任務,并作為自定義數據提供給實例。實例啟動時,cloud-init會讀取并解析Cloud Config數據,并按照配置文件中的指示運行對應模塊并執行配置任務,自動配置和部署ECS實例。

  • 運行頻率

    • 啟動實例:Cloud Config數據中的任務是否會被執行,取決于這些任務對應模塊的頻率設置。各模塊的說明,請參見Modules

      • 頻率為once-per-instance:僅在實例首次啟動時運行。例如配置的是Apt、Set Passwords等模塊,運行頻率為once-per-instance,重啟實例時不會運行。

      • 頻率為always:實例每次啟動都運行。例如配置的是Bootcmd、Update Etc Hosts等模塊,運行頻率為always,實例每次啟動都運行。

    • 更換操作系統:自動運行。

    • 重新初始化系統盤:自動運行。

      重要

      以下情況不會自動運行腳本:

      • 如果更換操作系統使用的是自定義鏡像且來源于原實例,更換操作系統時會判斷實例不是初次啟動,因此不會自動運行腳本。

      • 如果創建使用的是自定義鏡像,則創建實例時系統盤就有數據,初始化系統盤時會判斷實例不是初次啟動,因此不會自動運行腳本。

  • 格式

    • 首行為#cloud-config,且起始位置不能有空格。

    • 必須遵循YAML語法編寫內容。

  • Cloud Config數據示例

    #cloud-config
    apt:
     primary:
     - arches: [default]
     uri: https://us.archive.ubuntu.com/ubuntu/
    bootcmd:
    - echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt

    示例Cloud Config數據的效果是修改默認的軟件源,并在實例每次啟動時向userdata_test.txt文件寫入最新的系統時間。

Include文件

  • 簡介

    通過Include文件指向一個或多個User-Data腳本或Cloud Config數據的鏈接,多個鏈接按行分隔。實例啟動時,cloud-init會逐個解析并讀取鏈接里的內容。如果在讀取某一個鏈接的內容時出錯,則停止讀取剩余的鏈接。

    說明

    您可以通過阿里云對象存儲OSS,上傳User-Data腳本或Cloud Config數據、獲取鏈接、設置鏈接有效期等。具體操作,請參見OSS控制臺快速入門

  • 運行頻率

    • 啟動實例:執行頻率由鏈接里的內容決定。例如,鏈接的內容為User-Data腳本,則僅在實例首次啟動時運行一次;腳本類型鏈接的內容為Cloud Config數據,則遵循Cloud Config數據的運行頻率。

    • 更換操作系統:自動運行。

    • 重新初始化系統盤:自動運行。

      重要

      以下情況不會自動運行腳本:

      • 如果更換操作系統使用的是自定義鏡像且來源于原實例,更換操作系統時會判斷實例不是初次啟動,因此不會自動運行腳本。

      • 如果創建使用的是自定義鏡像,則創建實例時系統盤就有數據,初始化系統盤時會判斷實例不是初次啟動,因此不會自動運行腳本。

  • 格式

    首行為#include,且起始位置不能有空格。

  • Include文件示例

    #include
    https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh

    示例Include文件包含一個腳本鏈接,該腳本為User-Data腳本,則僅在實例首次啟動時運行一次。

    說明

    如果您采用Include文件或Gzip壓縮內容的方式,需要使用存儲服務上傳腳本、獲取腳本鏈接、設置鏈接有效期等操作,推薦您使用阿里云對象存儲OSS。具體操作,請參見OSS控制臺快速入門

Gzip壓縮內容

  • 簡介

    如果您的User-Data腳本、Cloud Config數據或Include文件內容的大小超過32 KB,可以采用Gzip壓縮內容(.gz格式)并做成鏈接,然后以Include文件的形式輸入。cloud-init會自動解壓Gzip壓縮內容,運行解壓后內容的效果和直接傳入后運行沒有區別。

    說明

    您可以通過阿里云對象存儲OSS,上傳User-Data腳本或Cloud Config數據、獲取鏈接、設置鏈接有效期等。具體操作,請參見OSS控制臺快速入門

  • 運行頻率

    • 啟動實例:由腳本類型和模塊類型決定。例如,Gzip壓縮內容鏈接的腳本類型為User-Data腳本,則僅在實例首次啟動時運行一次。

    • 更換操作系統:自動運行。

    • 重新初始化系統盤:自動運行。

      重要

      以下情況不會自動運行腳本:

      • 如果更換操作系統使用的是自定義鏡像且來源于原實例,更換操作系統時會判斷實例不是初次啟動,因此不會自動運行腳本。

      • 如果創建使用的是自定義鏡像,則創建實例時系統盤就有數據,初始化系統盤時會判斷實例不是初次啟動,因此不會自動運行腳本。

  • 格式

    首行為#include,且起始位置不能有空格。

  • Gzip壓縮內容示例

    #include
    https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz

    示例Gzip壓縮內容表示Include文件包含一個Gzip壓縮內容鏈接,cloud-init讀取該Gzip壓縮內容后會自動解壓并運行,該Gzip壓縮內容由User-Data腳本壓縮得到,所以僅在實例首次啟動時運行一次。

Upstart Job

說明

如需使用Upstart Job,您需要為實例安裝upstart服務,支持采用upstart服務管理啟動行為的操作系統有CentOS 6、Ubuntu 10/12/14以及Debian 6/7。

  • 簡介

    Upstart是一個事件驅動型的初始化系統,Upstart Job是一個配置文件,定義了一個服務或任務何時啟動、停止和如何運行。它通常放置在/etc/init/目錄下,文件擴展名為.conf。

  • 運行頻率

    • 啟動實例:實例每次啟動都會自動運行。

    • 更換操作系統:自動運行。

    • 重新初始化系統盤:自動運行。

      重要

      以下情況不會自動運行腳本:

      • 如果更換操作系統使用的是自定義鏡像且來源于原實例,更換操作系統時會判斷實例不是初次啟動,因此不會自動運行腳本。

      • 如果創建使用的是自定義鏡像,則創建實例時系統盤就有數據,初始化系統盤時會判斷實例不是初次啟動,因此不會自動運行腳本。

  • 格式

    首行為#upstart-job,且起始位置不能有空格。

  • Upstart Job內容示例

    #upstart-job
    description "upstart test"
    start on runlevel [2345] #在運行級別2、3、4、5執行
    stop on runlevel [!2345] #在運行級別2、3、4、5以外不執行
    exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt

    示例Upstart Job表示在系統進入指定的運行級別時輸出一條包含時間戳的消息,并將該消息記錄到/root/output.txt文件中。當系統離開這些運行級別時,作業會停止執行。

Windows實例

Windows實例是通過Vminit組件的Plugin_Main_CloudinitUserData組件來運行自定義數據腳本,該插件僅支持在實例首次啟動時運行。更多信息,請參見Vminit組件說明

Windows自定義數據腳本支持Bat和PowerShell兩種類型。

Bat腳本

  • 運行頻率

    • 啟動實例:實例首次啟動時運行一次,重啟實例不會自動運行。

    • 更換操作系統:自動運行。

    • 重新初始化系統盤:自動運行。

      重要

      以下情況不會自動運行腳本:

      • 如果更換操作系統使用的是自定義鏡像且來源于原實例,更換操作系統時會判斷實例不是初次啟動,因此不會自動運行腳本。

      • 如果創建使用的是自定義鏡像,則創建實例時系統盤就有數據,初始化系統盤時會判斷實例不是初次啟動,因此不會自動運行腳本。

  • 格式

    • 首行為[bat],且起始位置不能有空格。

    • 只能輸入半角字符,不能有多余字符。

    • 寫入數據的路徑不能為C:\Users目錄,否則自定義數據會執行失敗。

      說明

      在Windows系統中,C:\Users及其子目錄是用戶配置文件和數據的默認存儲位置,需要登錄系統后才可以訪問,而在系統初始化執行userdata階段實際還未登錄系統,所以寫入數據到C:\Users目錄會失敗。

  • Bat腳本示例

    [bat]
    echo "bat test" > C:\userdata_test.txt

    示例Bat腳本的效果是在實例首次啟動時向userdata_test.txt文件寫入內容"bat test"

PowerShell腳本

  • 運行頻率

    • 啟動實例:實例首次啟動時運行一次,重啟實例不會自動運行。

    • 更換操作系統:自動運行。

    • 重新初始化系統盤:自動運行。

      重要

      以下情況不會自動運行腳本:

      • 如果更換操作系統使用的是自定義鏡像且來源于原實例,更換操作系統時會判斷實例不是初次啟動,因此不會自動運行腳本。

      • 如果創建使用的是自定義鏡像,則創建實例時系統盤就有數據,初始化系統盤時會判斷實例不是初次啟動,因此不會自動運行腳本。

  • 格式

    • 首行為[powershell],且起始位置不能有空格。

    • 只能輸入半角字符,不能有多余字符。

    • 寫入數據的路徑不能為C:\Users目錄,否則自定義數據會執行失敗。

      說明

      在Windows系統中,C:\Users及其子目錄是用戶配置文件和數據的默認存儲位置,需要登錄系統后才可以訪問,而在系統初始化執行userdata階段實際還未登錄系統,所以寫入數據到C:\Users目錄會失敗。

  • PowerShell腳本示例

    [powershell]
    write-output "powershell test" | Out-File C:\userdata_test.txt

    示例PowerShell腳本的效果是在實例首次啟動時向userdata_test.txt文件寫入內容powershell test

相關文檔

  • 您可以調用DescribeUserData接口查詢一臺ECS實例的自定義數據。

  • 您也可以通過彈性伸縮的自定義數據功能,讓多臺ECS實例在啟動時自動執行配置的腳本或命令,確保ECS實例配置的一致性,簡化了運維工作。更多信息,請參見使用實例自定義數據自動配置ECS實例

  • 如果希望服務或腳本因程序異常、服務器重啟、掉電等被中斷時,及時恢復運行,云助手插件ecs-tool-servicekeepalive實現。具體操作,請參見自動恢復服務