EC2 `UserData` 执行回调?
EC2 `UserData` execution callback?
我有一个创建 VPC/Subnet 并在其中启动单个 EC2 机器的 Cloudformation 模板 -
https://gist.github.com/jhw/9c595edb615381780a2ba76791722fc3#file-stack-yaml
该模板还包含一些 EC2 UserData
,用于在该计算机上安装 Cloudwatch 和 CodeDeploy 用户代理。
模板工作正常,但我正在努力如何获得关于何时实际执行 UserData
的通知 - EC2 机器似乎会说 "ready" 但只有 然后开始执行UserData
,由于需要load/install不同的包,随后需要几分钟。
我能够了解 UserData
执行情况的唯一方法是转储 EC2 机器级日志,但这远非完美,因为日志似乎不可用直到 UserData
已 完成 执行 - 如果您尝试在成功执行之前下载它们,那么您只会得到一个空文件。
所以我的 "automated" 检测机器是否 真的 准备就绪的例程是在定时循环中获取日志,然后尝试检测其中的某些关键字日志。
这感觉,咳咳,次优:-/
当 UserData
可能已完成执行时,是否有更好的方式获得通知?某种回调 ?
如果您的 EC2 实例的 OS 是基于 systemd 的,您可以在 [Unit] 部分使用 "After" 来定义应该在 'cloud-final' 之后启动的 executable/service向上。
单元部分应与此类似:
[Unit]
Description=My Example-Service
After=cloud-final.service
我在这里找到了类似的答案:https://serverfault.com/questions/871328/start-service-after-aws-user-data-has-run
这里有一些链接可以帮助引导,它提供了示例:
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/example_user_data_scripts.html
https://unix.stackexchange.com/questions/126009/cause-a-script-to-execute-after-networking-has-started
CreationPolicy Documentation 将 CreationPolicy 属性与资源相关联,以防止其状态达到创建完成,直到 AWS CloudFormation 收到指定数量的成功信号或超过超时期限。
在实例 CloudFormation 中使用 Count=1 的 CreationPolicy:
CreationPolicy:
ResourceSignal:
Count: '1'
Timeout: PT15M
然后将此信号作为 UserData 脚本的最后一行发送:
cfn-signal -e $? --stack ${AWS::StackName} --resource MyEC2Instance --region ${AWS::Region}
我有一个创建 VPC/Subnet 并在其中启动单个 EC2 机器的 Cloudformation 模板 -
https://gist.github.com/jhw/9c595edb615381780a2ba76791722fc3#file-stack-yaml
该模板还包含一些 EC2 UserData
,用于在该计算机上安装 Cloudwatch 和 CodeDeploy 用户代理。
模板工作正常,但我正在努力如何获得关于何时实际执行 UserData
的通知 - EC2 机器似乎会说 "ready" 但只有 然后开始执行UserData
,由于需要load/install不同的包,随后需要几分钟。
我能够了解 UserData
执行情况的唯一方法是转储 EC2 机器级日志,但这远非完美,因为日志似乎不可用直到 UserData
已 完成 执行 - 如果您尝试在成功执行之前下载它们,那么您只会得到一个空文件。
所以我的 "automated" 检测机器是否 真的 准备就绪的例程是在定时循环中获取日志,然后尝试检测其中的某些关键字日志。
这感觉,咳咳,次优:-/
当 UserData
可能已完成执行时,是否有更好的方式获得通知?某种回调 ?
如果您的 EC2 实例的 OS 是基于 systemd 的,您可以在 [Unit] 部分使用 "After" 来定义应该在 'cloud-final' 之后启动的 executable/service向上。
单元部分应与此类似:
[Unit]
Description=My Example-Service
After=cloud-final.service
我在这里找到了类似的答案:https://serverfault.com/questions/871328/start-service-after-aws-user-data-has-run
这里有一些链接可以帮助引导,它提供了示例:
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ https://docs.aws.amazon.com/AmazonECS/latest/developerguide/example_user_data_scripts.html https://unix.stackexchange.com/questions/126009/cause-a-script-to-execute-after-networking-has-started
CreationPolicy Documentation 将 CreationPolicy 属性与资源相关联,以防止其状态达到创建完成,直到 AWS CloudFormation 收到指定数量的成功信号或超过超时期限。
在实例 CloudFormation 中使用 Count=1 的 CreationPolicy:
CreationPolicy:
ResourceSignal:
Count: '1'
Timeout: PT15M
然后将此信号作为 UserData 脚本的最后一行发送:
cfn-signal -e $? --stack ${AWS::StackName} --resource MyEC2Instance --region ${AWS::Region}