如何使 cloud-init 启动脚本在每次 EC2 实例启动时运行?

2024-04-08

我有一个运行基于 Amazon Linux AMI 的 AMI 的 EC2 实例。与所有此类 AMI 一样,它支持云初始化 https://help.ubuntu.com/community/CloudInit用于根据传递到每个实例的用户数据运行启动脚本的系统。在这种特殊情况下,我的用户数据输入恰好是一个包含文件,该文件来源几个其他启动脚本:

#include
http://s3.amazonaws.com/path/to/script/1
http://s3.amazonaws.com/path/to/script/2

第一次启动实例时,cloud-init 启动脚本正确运行。但是,如果我对实例进行软重启(通过运行sudo shutdown -r now,例如),实例恢复without第二次运行启动脚本。如果我进入系统日志,我可以看到:

Running cloud-init user-scripts
user-scripts already ran once-per-instance
[  OK  ]

这不是我想要的——我可以看到启动脚本在每个实例生命周期中只运行一次的实用性,但在我的例子中,这些脚本应该在每次实例启动时运行,就像正常的启动脚本一样。

我意识到一种可能的解决方案是手动让我的脚本将其自身插入rc.local第一次运行后。然而,这似乎很麻烦,因为 cloud-init 和 rc.d 环境略有不同,我现在必须在首次启动和所有后续启动时分别调试脚本。

有谁知道我如何告诉 cloud-init 始终运行我的脚本?这听起来确实像是 cloud-init 的设计者会考虑到的事情。


在 11.10、12.04 及更高版本中,您可以通过使“scripts-user”“始终”运行来实现此目的。 在 /etc/cloud/cloud.cfg 中,您会看到类似以下内容:

cloud_final_modules:
 - rightscale_userdata
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - keys-to-console
 - phone-home
 - final-message

这可以在启动后修改,或者可以通过用户数据插入覆盖此节的云配置数据。即,在用户数据中您可以提供:

#cloud-config
cloud_final_modules:
 - rightscale_userdata
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - [scripts-user, always]
 - keys-to-console
 - phone-home
 - final-message

正如您在描述中所做的那样,这也可以是“#included”。 不幸的是,现在您无法修改“cloud_final_modules”,而只能覆盖它。我希望在某个时候添加修改配置部分的功能。

云配置文档中有更多关于此的信息:https://github.com/canonical/cloud-init/tree/master/doc/examples https://github.com/canonical/cloud-init/tree/master/doc/examples

或者,您可以将文件放入 /var/lib/cloud/scripts/per-boot 中,它们将通过“scripts-per-boot”路径运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 cloud-init 启动脚本在每次 EC2 实例启动时运行? 的相关文章

  • 保护 AWS API 网关的安全

    我们有一个现有的应用程序 并且正在开发 AWS 中的应用程序所需的新 API 我们希望对 AWS API 启用基于角色的访问控制 而无需将用户迁移到 AWS Cognito 我们认为我们可能需要使用开发人员身份提供商和 IAM 角色 但不确
  • spring boot应用程序在ec2上自动关闭

    我在 ec2 上部署了 springboot 应用程序 ubuntu 为 t2 medium 大小 AWS AMI 为 t3 medium 大小 在我的本地电脑上 没有问题 但在 ec2 上 几个小时后 在我不工作期间 它自己死了 我只是想
  • AWS 签名的 URL 太长,无法缩短

    我正在使用 AWS 创建一个签名 URL 以便我可以安全地将此 URL 传递给另一个 API 以供临时使用 签名的 URL 指向 S3 资源 问题是其他 API 不接受这么长的链接 因此我正在尝试缩短它 我尝试使用类似的缩短器goo gl
  • AWS RDS 如何设置 MySQL 数据库

    我有一个 Java 应用程序成功运行在Amazon Web Services Elastic Beanstalk 我正在尝试设置MySQL 我已经创建了一个数据库实例 如您所见 问题一 如何将我的 Java 应用程序连接到数据库 我有以下代
  • 如何在 AWS 中已有的 Terraform 资源(手动创建)中使用?

    有没有办法在我的 AWS 帐户中使用手动创建的 terraform 资源 我不想改变它们 老实说 我不想 碰 它们 我只需要为我正在创建的环境提供一些资源 例如 vpc 和 IAM 我读过一些有关导入的内容 但我不确定这就是答案吗 Terr
  • 一对多关系未显示在对象放大架构定义中

    我刚开始将 amplify 与 GraphQL 结合使用 我正在设置数据库模式并在运行放大推送后自动生成函数 我想要实现但不知道如何实现的目标 我希望能够在 getUser 返回的对象中获取用户的所有连接信息 一对一和一对多关系 我希望仍然
  • Terraform如何在路由表中获取动态路由

    Terraform如何根据工作空间在路由表中获取动态路由 UAT resource aws vpn gateway micorsoft vpn gw vpc id aws vpc default id tags Name micorsoft
  • 将多个子域映射到同一个 S3 存储桶

    有没有某种方法可以将多个 数千个 子域映射到一个 s3 存储桶 如果是这样 是否也可以将其映射到每个子域的存储桶中的特定路径 我希望 test1 example com 映射到 mybucket test1 test2 example co
  • XMLHttpRequest 无法加载 ZScaler 的问题

    我在 EC2 实例中托管了一个网站 并使用以下命令访问该页面http ec2 网址 该页面向同一实例上托管的另一个 Web 应用程序发出 ajax 请求 如果我访问通过 ZScaler 代理的页面 我会得到XMLHttpRequest ca
  • 有没有办法使用无服务器框架来验证路径

    我在后端使用无服务器框架 使用AWS 我的 serverless yml 像这样 functions getBrand handler functions brand getBrand handler events http path se
  • aws cli 中的 SSL CERTIFICATE_VERIFY_FAILED

    我安装了AWS CLI http docs aws amazon com cli latest userguide installing html install msi on windows在 Windows Server 2007 32
  • 请求/响应的 MQTT 主题名称

    我正在设计一个包含许多设备的系统 使用 MQTT 连接到中央代理 有些主设备可以向某些从设备发送请求 来自一台主机的请求通常会发送给一台从机 请求的主题可以是 mysystem slaveId req 因此从站可以订阅该主题 并且主站可以发
  • 无法在 Docker 下运行 AWS SAM CLI

    我正在尝试创建一个 Docker 镜像AWS SAM CLI https github com awslabs aws sam cli 但调用任何函数都会出现错误 无法导入模块 index 我可以在 Docker 之外成功运行相同的测试用例
  • Rails 6 + Capistrano - 没有这样的 puma.sock 文件

    拜托 我有一个大问题10多个小时了 每当我使用 Capistrano 和 Puma 在 Rails 中运行应用程序部署并重新启动 nginx 时 当我尝试访问我的 Web 时 我会看到此错误 在此输入图像描述 https i stack i
  • Amazon DynamoDB 使用无服务器修改结构

    修改 DynamoDB 表结构的最佳方法是什么 由于备份而删除它没有问题 我有一个只有哈希键的表 我必须为表添加一个排序键 当我部署堆栈时 我收到此错误 错误 CloudFormation 模板无效 模板格式错误 模板的资源块中存在未解析的
  • 如何在 AWS Insights 上可视化由多个维度聚合的时间序列数据?

    我想使用 cloudwatch Insights 来可视化主机随时间变化的平均延迟的多线图 每个主机一根线 此统计查询提取延迟并按主机将其聚合在 10 分钟的存储桶中 但它不会生成任何可视化 stats avg latencyMS by b
  • AWS Lambda - 在区域之间自动复制 EC2 快照?

    我想创建一个 Lambda 函数 python 它将自动将已创建的快照复制到另一个区域 我已联系 AWS Support 他们只向我发送了用于 RDS 数据库的 GitHub 脚本 没有 EC2 快照复制脚本 任何帮助都会很棒 谢谢 是的
  • 检查 DynamoDB 中是否存在表的最佳方法是什么?

    检查 DynamoDb 中是否存在表的最佳方法是什么 如果代码是 PHP 语言 我将不胜感激 要么活跃 要么不活跃 稍后作为错误代码 400 的各种情况的示例添加 检查表是否存在很容易 它可以有以下之一 表状态 gt 创建 活动 删除或更新
  • 如何为特定存储库配置 AWS CodeCommit 配置文件

    我有以下问题 作为我工作的一部分 我处理多个 AWS 账户 每个账户都有一个单独的 AWS CodeCommit 存储库和特定于账户的 IAM 用户 这会导致不同的用户 ID 我想找到一种方法来配置我的 ssh 以根据存储库访问不同的帐户
  • 未处理的异常:SocketException:主机查找失败:(操作系统错误:没有与主机名关联的地址,errno = 7)

    我们已经在 Playstore 中发布了一个发行版本 并且运行得很好 但现在突然间 当我们尝试再次构建并运行代码时 因为我们想要添加新功能 它将不再与我们的后端通信 所以我使用错误作为关键字在网络上进行搜索 发现需要 INTERNET PE

随机推荐