【问题标题】:Run bash script when Stack Created创建堆栈时运行 bash 脚本
【发布时间】:2017-01-04 08:47:30
【问题描述】:

我正在设计一个 AWS 堆栈,其中包含多个实例,这些实例运行少数服务,每个服务由几个任务组成。其中一项服务使用 NFS 存储配置,并且此配置需要在创建堆栈时设置一次。

我想出了一种在创建堆栈时运行配置脚本一次的方法:

  1. 配置需要自行配置以运行单个任务的服务
  2. 任务启动时,检查配置是否存在。如果没有,请运行配置脚本,然后更新所需的任务计数,以便创建其他实例

(1) 是避免竞争条件所必需的。

虽然这很好用,但它让我觉得它是实现简单事情的一种非常迂回的方法:在创建堆栈时运行一次 bash 脚本。有没有更好的方法来做到这一点?

【问题讨论】:

  • “任务”和“服务”是指 ECS,还是完全指其他东西?一些代码示例将有助于阐明您对当前方法的描述。

标签: amazon-web-services amazon-ec2 amazon-cloudformation


【解决方案1】:

您可以使用AWS::EC2::Instance 资源和InstanceInitiatedShutdownBehavior 属性为terminate(在脚本执行后终止实例)以及设置为最后一个DependsOn 属性的一次性Bash 脚本-在您的堆栈中创建资源(因此创建 EC2 实例并在最后执行 Bash 脚本):

Description: Run a bash script once when a stack is created.
Mappings:
  # amzn-ami-hvm-2016.09.1.20161221-x86_64-gp2
  RegionMap:
    us-east-1:
      "64": "ami-9be6f38c"
Resources:
  MyResource:
    Type: AWS::SNS::Topic
  WebServer:
    Type: AWS::EC2::Instance
    DependsOn: MyResource
    Properties:
      ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", 64]
      InstanceType: m3.medium
      InstanceInitiatedShutdownBehavior: terminate
      UserData:
        "Fn::Base64":
          !Sub |
            #!/bin/bash
            # [Contents of bash script here...]
            shutdown -h now

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多