【问题标题】:Ruby script on ec2 bootec2 启动时的 Ruby 脚本
【发布时间】:2013-07-03 14:32:09
【问题描述】:

我想在 AWS EC2 上运行一个简单的脚本,每次我使用 AMI-xxxx 启动一个新实例时

我的脚本已经在 AMI 中运行,但是每次我启动一个新实例时它都应该在 ec2 实例上运行

我可以从终端运行脚本

ruby ~/script/couchbase-config.rb

是否也有可能每次我重新启动实例时它都不运行,而只在 ec2 实例第一次启动时运行?

【问题讨论】:

    标签: ruby-on-rails ruby unix ubuntu amazon-ec2


    【解决方案1】:

    在您的脚本中放置一个“锁定”文件(例如/etc/couchbase-config-done),并且在您的脚本开头仅在找不到该文件时继续执行该脚本。

    但是我不明白谁调用了你的脚本,为什么你不能简单地调用它/只在实例创建期间/之后而不是在每次启动时调用它......

    【讨论】:

      【解决方案2】:

      我猜你正在配置 Couchbase 环境变量。为什么不运行脚本,然后从您刚刚运行它的 AMI 创建一个新的 AMI,并且一切都已经配置好?如果您从 EBS 快照启动,您启动的每个后续实例都将以相同的方式配置,但 EC2 会从快照创建一个新的、唯一的 EBS 卷 - 如果您在实例终止后需要它,您甚至可以保留它.我对现场实例执行此操作。

      【讨论】:

      • 不,我不是想为 couchbase 设置环境变量。我在每个实例上都这样做 couchbase.com/docs/couchbase-manual-2.0/… 它的公共 IP 主机名设置
      • 或许可以将您的脚本内容发布给我们以了解您的策略?考虑使用动态 DNS 提供程序和将 IP 更新为主机名的 cron 作业,因为每次您在 EC2 中启动新 VM 时都会为它提供一个新的 Amazon IP。许多 DDNS 都有一个 REST API,即 cURL 或 wget。启动不同数量的实例以实现负载平衡的想法是什么?最好只进行数学计算并找出您的用例实际需要多大的集群,并在图像中设置主机名。如果您不断启动和关闭节点,则密钥重新平衡和复制会占用大量时间和资源。
      【解决方案3】:

      与其尝试通过脚本为节点分配 IP,不如注册域名并使用其 FQDN 将节点添加到集群。例如,您可以在区域记录中的主域的 unbrella 下为每台机器分配自己的子域名:(cb1.mydomain.com、cb2.mydomain.com 等)

      让您的动态 DNS 提供商处理 IP 映射。如果您已经在 AWS EC2 上,您应该尝试他们的 Route53 服务。当您的 EC2 映像启动时,您将根据启动时为 VM 提供的 IP 更新该子域的 A 记录。由于 EC2 的定期维护,该 IP 也可能会发生变化,因此如果您愿意,可以将其放入 cron 作业中。

      查看fog gem 以从 Ruby 处理 DNS: http://fog.io/dns/

      您还可以使用来自route53 的 AWS Route53 服务,这是一个更轻量级的 gem,因为它只处理 AWS DNS: https://rubygems.org/gems/route53

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-20
        • 2018-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        相关资源
        最近更新 更多