更新时间:2024-08-23 gmt 08:00

通过实例自定义数据配置ecs实例-九游平台

使用场景

当您有如下需求时,可以考虑使用实例自定义数据注入功能来配置弹性云服务器

  • 需要通过脚本简化弹性云服务器配置
  • 通过脚本初始化系统
  • 已有脚本,在创建弹性云服务器的时候一并上传到服务器
  • 其他可以使用脚本完成的功能

使用限制

  • linux:
    • 用于创建弹性云服务器的镜像安装了cloud-init组件。
    • 实例自定义数据大小限制:小于等于32kb。
    • 如果通过文本方式上传实例自定义数据,数据只能包含ascii码字符;如果通过文件方式上传实例自定义数据,可以包含任意字符,同时,要求文件大小小于等于32kb。
    • 必须是公共镜像,或继承于公共镜像的私有镜像,或自行安装了cloud-init组件的私有镜像。
    • 必须满足相应linux弹性云服务器自定义脚本类型的格式要求。
    • 使用的vpc网络必须开启dhcp,安全组出方向规则保证80端口开放。
    • 选择“密码”登录方式时,不支持实例自定义数据注入功能。
  • windows
    • 用于创建弹性云服务器的镜像安装了cloudbase-init组件。
    • 实例自定义数据大小限制:小于等于32kb。
    • 如果通过文本方式上传实例自定义数据,数据只能包含ascii码字符;如果通过文件方式上传实例自定义数据,可以包含任意字符,同时,要求文件大小小于等于32kb。
    • 必须是公共镜像,或继承于公共镜像的私有镜像,或自行安装了cloudbase-init组件的私有镜像。
    • 使用 vpc网络必须开启dhcp,安全组出方向规则保证80端口开放。

使用方法

  1. 根据实际需要写user-data脚本,脚本格式必须符合user-data脚本,详细规范请参见相关链接
  2. 创建弹性云服务器时,需将实例自定义数据脚本内容粘贴到“高级选项 > 现在配置 > 实例自定义数据注入”的文本框,或选择实例自定义数据文件上传。

    实例自定义数据注入支持使用文件和文本两种方式:

    文本:将实例自定义数据脚本内容粘贴到文本框中。

    文件:将实例自定义数据脚本内容保存至文本文件后再将上传。

    图1 实例自定义数据注入
  3. 系统创建弹性云服务器弹性云服务器启动后自动执行cloud-init或cloudbase-init组件,读取实例自定义数据脚本。

关于linux云服务器的实例自定义数据脚本

linux弹性云服务器的自定义实例自定义数据脚本(简称“脚本”)采用开源的cloud-init架构实现,该架构以云服务器的元数据为数据来源,对弹性云服务器进行各项自动化配置。自定义脚本类型兼容开源cloud-init,详情请参考cloud-init开源说明:。

  • 脚本的执行时间:弹性云服务器的状态变为“running”之后,执行文件/etc/init之前。

    脚本默认以root用户权限执行。

  • 脚本类型:包括“user-data script”和“cloud-config data”。
    表1 linux云服务器脚本类型介绍

    -

    user-data script

    cloud-config data

    描述

    以脚本作为自定义配置的手段,如shell和python脚本。

    cloud-init中预定义的对云服务器部分服务进行配置的手段,如yum源、ssh 密钥。

    格式

    首行必须是“#!”(如“#!/bin/bash和#!/usr/bin/env python”),且前面不能有空格。

    首次启动时,将在rc.local-like级别上执行,rc.local-like意味着“在启动序列中非常靠后”。

    首行必须是“#cloud-config”,且前面不能有空格。

    限制

    在采用base64编码前,脚本内容(包括首行在内)不能超过32kb。

    在采用base64编码前,脚本内容(包括首行在内)不能超过32kb。

    频率

    仅在首次启动弹性云服务器时执行一次。

    配置的服务不同,执行频率也会不同。

  • 如何查看注入linux弹性云服务器的自定义数据?
    1. 登录弹性云服务器
    2. 执行以下命令,以root用户权限查看实例自定义数据。

      curl http://169.254.169.254/openstack/latest/user_data

  • 脚本使用示例:

    该示例介绍如何以不同格式输入linux弹性云服务器的脚本,并查看脚本的运行结果。

    示例一:脚本类型为user-data script

    创建弹性云服务器时,选择“文本”形式并输入实例自定义数据脚本,脚本如下:

    #!/bin/bash
    echo "hello, the time is now $(date -r)" | tee /root/output.txt

    创建成功后,连接并启动弹性云服务器,执行命令cat [file],查看脚本的运行结果。

    [root@xxxxxxxx ~]# cat /root/output.txt
    hello, the time is now mon, 16 jul 2016 16:03:18 0800

    示例二:脚本类型为cloud-config data

    创建弹性云服务器时,选择“文本”形式并输入实例自定义数据脚本,脚本如下:

    #cloud-config
    bootcmd:
    - echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts

    创建成功后,连接并启动弹性云服务器,执行命令cat /etc/hosts查看脚本的运行结果。

    图2 查看运行结果

关于windows弹性云服务器的实例自定义数据脚本

windows弹性云服务器的实例自定义数据脚本(简称“脚本”)采用开源的cloudbase-init架构实现,该架构以弹性云服务器的元数据为数据来源,对弹性云服务器进行各项自动化配置,为windows弹性云服务器提供执行初始化脚本的能力。自定义脚本类型兼容开源cloudbase-init,详情请参考cloudbase-init开源说明:。

  • 脚本类型:包括“batch批处理程序”和“powershell脚本”。
    表2 windows云服务器脚本类型介绍

    -

    batch批处理程序

    powershell脚本

    格式

    “rem cmd”开头且作为首行,且前面不能有空格。

    “#ps1”开头且作为首行,且前面不能有空格。

    限制

    在采用base64编码前,脚本内容(包括首行在内)不能超过32kb。

    在采用base64编码前,脚本内容(包括首行在内)不能超过32kb。

  • 如何查看注入windows弹性云服务器的实例自定义数据?
    1. 登录弹性云服务器
    2. 在浏览器栏访问如下地址,查看注入的实例自定义数据。

      http://169.254.169.254/openstack/latest/user_data

  • 脚本使用示例

    该示例介绍如何以不同格式输入windows弹性云服务器的脚本,并查看脚本的运行结果。

    示例一:batch批处理程序

    创建弹性云服务器时,选择“文本”形式并输入实例自定义数据,脚本如下:

    rem cmd
    echo "hello, bat test" > c:\1111.txt

    创建成功后,连接并启动弹性云服务器,查看脚本的运行结果:在c:\盘添加了一个名称为 “1111” 的文本文档,如图3所示。

    图3 新建文本文档_batch

    如需查看注入windows弹性云服务器的实例自定义数据,可以在浏览器访问:http://169.254.169.254/openstack/latest/user_data,如图4所示。

    图4 查看实例自定义数据_batch

    示例二:powershell脚本

    创建弹性云服务器时,选择“文本”形式并输入实例自定义数据,脚本如下:

    #ps1
    echo "hello, powershell test" > c:\aaaa.txt

    创建成功后,连接并启动弹性云服务器,查看脚本的运行结果:在c:\盘添加了一个名称为 “aaaa” 的文本文档。

    图5 新建文本文档_powershell

    如需查看注入windows弹性云服务器的实例自定义数据,可以在浏览器访问:http://169.254.169.254/openstack/latest/user_data,如图6所示。

    图6 查看实例自定义数据_powershell

案例1

该样例介绍如何通过实例自定义数据注入,为linux弹性云服务器简化云服务器配置。

当您需要设置vim的“语法高亮显示”、“制表符占用4个空格”和“显示行数”属性时,就可以写一个脚本.vimrc,并将其注入到“/root/.vimrc”。在您创建完云服务器时,您的vim配置便完成了。这样做可以大幅提高系统配置的效率,特别是在您一次性创建多台弹性云服务器时。

实例自定义数据注入示例:

#cloud-config
write_files:
  - path: /root/.vimrc
    content: |
      syntax on
      set tabstop=4
      set number      

案例2

该样例介绍如何通过实例自定义数据注入,设置linux弹性云服务器密码。

新密码必须符合密码复杂度要求,密码规则如表3所示。

表3 密码设置规则

参数

规则

密码

  • 密码长度范围为8到26位。
  • 密码至少包含以下4种字符中的3种:
    • 大写字母
    • 小写字母
    • 数字
    • windows操作系统云服务器支持的特殊字符:!@$%^-_= [{()}]:,./?~#*
    • linux操作系统云服务器支持的特殊字符:!@$%^-_= [{}]:,./?~#*
  • 密码不能包含用户名或用户名的逆序。
  • windows操作系统的云服务器,不能包含用户名中超过两个连续字符的部分。

实例自定义数据注入示例:

使用密文密码(推荐使用):
#!/bin/bash 
echo 'root:$6$v6azyelwcd3chlpy$bn3vvq18fmckj66b4zdhlwevqcxlig' | chpasswd -e;

其中,$6$v6azyelwcd3chlpy$bn3vvq18fmckj66b4zdhlwevqcxlig为密文密码,生成方法如下:

  1. 执行以下命令,生成加密盐值

    python -c "import crypt, getpass, pwd;print crypt.mksalt()"

    回显信息如下:

    $6$v6azyelwcd3chlpy
  2. 执行以下命令,根据盐值生成密文密码

    python -c "import crypt, getpass, pwd;print crypt.crypt('cloud.1234','\$6\$v6azyelwcd3chlpy')"

    回显信息如下:

    $6$v6azyelwcd3chlpy$bn3vvq18fmckj66b4zdhlwevqcxlig

弹性云服务器创建成功后,您可以使用该密码登录。

案例3

该样例介绍如何通过实例自定义数据注入,重置linux弹性云服务器密码。

假设您需要将root用户密码重置为”******“。

新密码必须符合密码复杂度要求,密码规则如表4所示。

表4 密码设置规则

参数

规则

密码

  • 密码长度范围为8到26位。
  • 密码至少包含以下4种字符中的3种:
    • 大写字母
    • 小写字母
    • 数字
    • windows操作系统云服务器支持的特殊字符:!@$%^-_= [{()}]:,./?~#*
    • linux操作系统云服务器支持的特殊字符:!@$%^-_= [{}]:,./?~#*
  • 密码不能包含用户名或用户名的逆序。
  • windows操作系统的云服务器,不能包含用户名中超过两个连续字符的部分。

实例自定义数据注入示例(请严格遵守下面示例中的缩进标准):

#cloud-config
chpasswd:
  list: |
    root:******
  expire: false

弹性云服务器创建成功后,您可以使用重置的密码登录弹性云服务器。为了保证密码安全,建议您在第一次登录弹性云服务器后,修改root用户密码。

案例4

该样例介绍如何通过实例自定义数据注入,为windows弹性云服务器新增用户并设置密码。

假设您要创建的用户名为abc、密码为“******”的普通用户,并将其添加至administrators用户组。

新密码必须符合密码复杂度要求,密码规则如表4所示。

实例自定义数据注入示例:

rem cmd
net user abc ****** /add
net localgroup administrators abc /add

弹性云服务器创建成功后,您可以使用新创建的用户名和密码登录弹性云服务器

案例5

该样例介绍如何通过实例自定义数据注入,为linux弹性云服务器更新系统软件包,并且开启httpd相关服务。注入成功后,您的弹性云服务器就可以使用httpd服务了。

实例自定义数据注入示例:

#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on

案例6

该样例介绍如何通过实例自定义数据注入,激活linux弹性云服务器的root用户远程登录权限。注入成功后,您可以使用ssh密钥方式,以root账户登录弹性云服务器

实例自定义数据注入示例:

#cloud-config
disable_root: false
runcmd:
- sed -i 's/^permitrootlogin.*$/permitrootlogin without-password/' /etc/ssh/sshd_config
- sed -i '/^kexalgorithms.*$/d' /etc/ssh/sshd_config
- service sshd restart

相关链接

更多关于实例自定义数据注入案例的介绍,请参见cloud-init/cloudbase-init九游平台官网:

相关文档

网站地图