我们在初始一个 AWS EC2 实例时,可以通过 user data 让 EC2 第一次启动后做些事情,可以放置 shell script 或 cloud-init 指令。在控制台设置 user data 可用明文文本,由 awscli 创建时可使用一个文件,或者通过 API 用 base64 编码的内容。
下面是 user data 被执行时需知晓的一些知识
- 是脚本时必须以
#!
开始,俗称 Shebang, 如#!/bin/bash
- user data是以
root
身份执行,所以不要用sudo
, 当然创建的目录或文件的 owner 也是root
,需要ec2-user
用户访问的话需要chmod
修改文件权限,或者直接用chown ec2-user:ec2-user -R abc
修改文件的所有者() - 脚本不能交互,有交互时必须想办法跳过用户输入,如
apt install -y xzy
, 带个-y
标记 - 如果脚本中需访问 AWS 资源,权限由 Instance Profile 所指定的 IAM role 决定
- user data 中的脚本会被存储在
/var/lib/cloud/instances/<instance-id>/user-data.txt
文件中,因此也可以从这里验证 user data 是否设置正确。或者在 EC2 实例上访问 http://169.254.169.254/latest/user-data 也能看到 user data 的内容。并且在 EC2 实例初始化后不被删除,所以以此实例为基础来创建一个新的 AMI 需把它删除了 - user data 的大小限制为 16 KB, 指 base64 编码前的大小
- cloud-init 的输出日志在
/var/log/cloud-init-output.log
, 它会捕获 cloud-init 控制台的输出内容