AWS Windows EC2 实例的 userdata 应用笔记

因为平常主要是使用 EC2 的 Linux 实例,所以之前写过的一篇关于 UserData 的日志 创建 AWS EC2 实例时 userdata 的一些知识 默认就是讲的有关 Linux 实例的 UserData。本文补充上 Windows 的 EC2 实例 UserData 的基本使用,参考自 AWS 官方文档 Run commands on your Windows instance at launch

Windows 的 UserData 被谁执行,依据所选择 AMI 的不同有以下三种方式

  1. EC2Launch v2: 最新方式,只是被当前预览版的 AMI 所支持,它支持 YAML 配置的脚本
  2. EC2Launch: 当前方式,Windows Server 2016 及更新版
  3. EC2Cofnig: 旧有方式, Windows Sever 2012 R2 及旧版本

UserData 脚本的语法

可支持 batch, PowerShell, 或 YAML 配置(EC2Launch), 和 Linux 下的 UserData 要求 Shebang(#!) 类似,Windows 的 UserData 中必须用标签来指定是何种脚本方式。如果 UserData 中同时声明有 <script><powershell>, 那么总是先执行 <script>, 再执行 <powershell>, 与它们的声明先后顺序无关。

batch 脚本

<persist> 是可选的,默认为 false, 即 userdata 只在初始化实例时运行一次,persist 为 true 是则在实例重启时也被执行

PowerShell 脚本

PowerShell 中除了能执行 batch 脚本外,还有更强大的功能。<persist> 的功用与上相同

YAML 配置脚本

如果 UserData 由 EC2Launch v2 来执行,就可用 YAML 方式来配置脚本

frequencyonce, always 取值与前面的 <persist> false, true 是一致的。

UserData 执行的日志

日志是非常重要的,同样根据发起执行者的不同而记录在不同的位置。注:C:\ProgramData 是一个隐藏目录。

EC2Launch v2: C:\ProgramData\Amazon\EC2Launch\log\agent.log

EC2Launch: C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log

EC2Config: C:\Program Files\Amazon\Ec2ConfigService\Logs\EC2Config.log

每次启动(含重启)都执行 UserData

希望每次都执行 UserData, 或在实例初始化后对 UserData 进行的更新后在重启后得到执行

  1. 配置 <persist>true</persist>frequency 为 always
  2. EC2Launch: 运行 C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 –Schedule 启用调度任务
  3. Ec2Config: 运行 C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSetting.exe,然后开启

PowerShell 的一些工具

除了直接使用 awscli 外,可直接使用 PowerShell 下的 AWS Tools, 参考 AWS Tools for PowerShell Cmdlet Reference。其实就是以 PowerShell 的方式来使用 awscli。

不过对于用习惯了 awscli 的人来说,PowerShell 的对象操作方式有点罗嗦。

其他

对于 Windows 的实例我仍然是延续着非必要不进入它的远程桌面,所以通常是用 AWS SSM 连接到 Windows EC2 实例的 PowerShell,Linux 可参考 AWS Session Manager 管理 EC2 实例。连接 Windows 的 Session Manager 也类似,两个基本条件,SSM Agent + 有 AmazonSSMManagedInstanceCore 策略的 Instance Profile. 连接用

$ aws ssm start-session --target  <INSTANCE_ID>

有些 Windows AMI 会配置 ssh

点击该链接进入 PowerShell 命令参考

查看 Windows 系统信息

systeminfo

而且在 PowerShell 中 cat, rm, curl/wget 等命令也能直接使用,它们映射到了 Get-Content, Remove-Item 和 Invoke-WebRequest 命令。更多的 GNU 命令还有待以后发掘。

下载和安装 VC 运行时

Get-VcList 的安装参考 VcRedist docs/Quick install, 如果上面安装的 vc_redist 没效的话,可以试下 VcRedist

执行 PowerShell 前设置以下几个选项很有必要

想要用其他的  Linux 命令也没问题

choco install awk grep sed wget curl -y

本文链接 https://yanbin.blog/aws-windows-ec2-instance-userdata-note/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments