【问题标题】:EC2 `UserData` execution callback?EC2`UserData`执行回调?
【发布时间】:2020-03-20 23:19:44
【问题描述】:

我有一个 Cloudformation 模板,它创建 VPC/子网并在其中启动单个 EC2 机器 -

https://gist.github.com/jhw/9c595edb615381780a2ba76791722fc3#file-stack-yaml

该模板还包含一些 EC2 UserData,用于在该机器上安装 Cloudwatch 和 CodeDeploy 用户代理。

模板工作正常,但我正在努力如何获得关于 UserData 实际执行时间的通知 - 似乎 EC2 机器会说“准备好”但只有 然后 开始执行UserData,由于需要加载/安装不同的包,随后需要几分钟。

我能够了解UserData 执行情况的唯一方法是转储 EC2 机器级日志,但这远非完美,因为在@987654326 之前这些日志似乎不可用@ 已执行完成 - 如果您尝试在成功执行之前下载它们,那么您只会得到一个空文件。

因此,我用于检测机器是否真的准备就绪的“自动化”例程是在定时循环中获取日志,然后尝试检测这些日志中的某些关键字。

这感觉,咳咳,不太理想:-/

UserData 可能已完成执行时,有没有更好的方法来获得通知?某种回调?

【问题讨论】:

    标签: amazon-ec2 aws-code-deploy


    【解决方案1】:

    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}
    

    【讨论】:

    • 我在这个问题上说得太早了。你如何在 EC2 实例上安装cfn-signal?我尝试了上述方法,但最初得到了cfn-signal not found。然后注意到我可以apt-get install heat-cfntools 得到cfn-signal。但现在得到cfn-signal: error: unrecognized arguments: --stack --resource MyEC2Instance --region eu-west-1。我有权利cfn-signal 吗?
    • 很可能不是正确的。 docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… yum install -y aws-cfn-bootstrap 需要在您的用户数据中
    • 有效!尽管我最终按照此处forums.aws.amazon.com/thread.jspa?threadID=230535 通过 pip 安装。谢谢。
    【解决方案2】:

    如果您的 EC2 实例的操作系统基于 systemd,您可以使用 [Unit] 部分中的“After”来定义应在“cloud-final”启动后启动的可执行文件/服务。

    单元部分应如下所示:

    [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

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 2019-06-27
      • 2020-10-19
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      相关资源
      最近更新 更多