实例自定义数据是一种自定义实例启动行为及传入数据的功能。

背景信息

Windows实例和Linux实例都支持实例自定义数据功能,该主要有两种用途:
  • 作为实例自定义脚本,在启动实例时执行。
  • 作为普通数据,将一定的信息传入实例中,您可以在实例中引用这些数据。

本文假设您在Windows操作系统下开发Upstart Job脚本,然后用作CentOS实例的实例自定义数据。

生成Linux实例自定义数据

在Linux实例中,您可以通过多种脚本配置实例自定义数据,包括User-Data脚本、Cloud Config脚本、Include文件、Gzip压缩脚本、 Upstart Job脚本等。Linux实例自定义数据功能采用开源的cloud-init架构,以实例元数据为数据来源,自动化配置Linux实例属性。更多详情,请参见cloud-init文档User-Data Formats

如果您制作的是Include文件或Gzip压缩脚本,需要上传脚本文件到可用的存储服务中并获取链接,并设置链接有效期为您的期望值。推荐您使用阿里云对象存储OSS制作链接,更多详情,请参见OSS文档上传文件设置生命周期规则

生成Linux实例自定义数据的操作步骤如下:

  1. 使用编辑器(例如,Notepad++)创建文本文件。
  2. 在文本文件中编辑实例自定义数据的相关脚本。
    脚本第一行必须满足脚本类型的格式要求。不同脚本的格式要求以及示例如下:
    • User-Data脚本
      User-Data可以是一个Shell脚本。具有以下特点:
      • 首行固定为#!,例如#!/bin/sh
      • 在Base64编码前脚本内容不能超过16 KB。
      • 仅在首次启动实例时执行一次。
      User-Data脚本示例如下:
      #!/bin/sh
      echo "Hello World. The time is now $(date -R)!" | tee /root/output10.txt
      service httpd start
      chkconfig httpd on
      实例创建完成后,启动并连接实例,执行命令cat [file],查看脚本的执行结果。
      [root@XXXXX2z ~]# cat output10.txt
      Hello World. The time is now Mon, 24 Jul 2017 13:03:19 +0800!
    • Cloud Config脚本
      Cloud Config脚本是实现实例自定义数据最简单的方式,其交互方式非常友善。您可以使用Cloud Config脚本预先配置实例的部分服务,如更新yum源、导入SSH密钥、安装依赖包等。具有以下特点:
      • 首行固定为#cloud-config,且页首不能有空格。
      • 需要以YAML文件的方式呈现。
      • 在Base64编码前脚本内容不能超过16 KB。
      • 根据您配置的服务不同,实例自定义数据的运行频率也会不同。
      Cloud Config脚本示例如下:
      #cloud-config
      apt:
      primary:
      - arches: [default]
      uri: http://us.archive.ubuntu.com/ubuntu/
      bootcmd:
      - echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts
      实例创建完成后,启动并连接实例,查看运行结果。

    • Include文件
      Include文件的内容由脚本链接组成,一行一个链接。实例启动时,cloud-init读取Include文件中脚本链接里的内容,一旦在某一行读取脚本内容时出错,实例停止读取自定义数据。具有以下特点:
      • Include文件首行固定为#include且页首不能有空格。
      • Include文件中脚本链接包含的内容在Base64编码前脚本内容不能超过16 KB。
      • 实例自定义数据的运行频率跟随Include文件中配置的脚本类型。
      Include文件示例如下:
      #include
      http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/UserData/myscript.sh

      实例创建完成后,启动并连接实例,查看执行结果。

    • Gzip压缩脚本
      使用User-Data脚本、Cloud Config脚本和Include文件时,均要求在Base64编码前脚本内容不能超过16 KB。若您的脚本内容有超出16 KB的趋势,可以采用Gzip压缩脚本。将脚本文件压缩后制作成脚本链接,以Include文件的形式呈现。具有以下特点:
      • Gzip压缩脚本首行固定为#include,且页首不能有空格。
      • 实例自定义数据的运行频率跟随脚本类型。
      Gzip压缩脚本示例如下:
      #include
      http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/config.gz

      如果您制作的是Gzip压缩脚本文件,您需要压缩脚本文件为.gz格式。

    • Upstart Job
      使用Upstart Job脚本时,您需要为实例安装upstart作为init system,目前采用upstart的操作系统有CentOS 6、Ubuntu 10/12/14以及Debian 6/7。Upstart Job脚本将您的实例自定义数据放到/etc/init目录下。具有以下特点:
      • Upstart Job脚本首行固定为#upstart-job,且页首不能有空格。
      • 每次启动实例均会执行您的实例自定义数据。
      Upstart Job脚本示例如下:
      #upstart-job
      description "upstart test"
      start on runlevel [2345]
      stop on runlevel [!2345]
      exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt
  3. 调试脚本文件以确认内容正确。

生成Windows实例自定义数据

Windows实例自定义数据由ECS自主研发,为Windows实例提供运行初始化脚本的能力。Windows实例自定义数据支持Bat批处理程序和PowerShell脚本。

生成Linux实例自定义数据的操作步骤如下:

  1. 使用编辑器(例如,Notepad++)创建文本文件。
  2. 在文本文件中编辑实例自定义数据的相关脚本。
    脚本第一行必须满足脚本类型的格式要求。不同脚本的格式要求以及示例如下:
    • Bat批处理程序具有以下特点:
      • 首行固定为[bat],且页首不能有空格。
      • 在Base64编码前,自定义数据内容必须小于16 KB。
      • 只能输入半角字符,不能有多余字符。
      Bat批处理程序示例如下:
      [bat]
      echo "bat test" > c:\1.txt
      实例创建完成后,连接实例查看执行结果,在C:\盘添加了1.txt文本文件。

    • PowerShell具有以下特点:
      • 首行固定为[powershell],且页首不能有空格。
      • 在Base64编码前,自定义数据内容必须小于16 KB。
      • 只能输入半角字符,不能有多余字符。
      PowerShell示例如下:
      [powershell]
      write-output "Powershell Test" | Out-File C:\2.txt
  3. 调试脚本文件以确认内容正确。

后续步骤

脚本准备完成后,您可以使用脚本配置实例自定义数据。具体操作,请参见配置实例自定义数据