Stack Created时运行bash脚本

时间:2017-01-02 07:11:18

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

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

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

  1. 配置需要配置自身以运行单个任务的服务
  2. 任务开始时,检查配置是否存在。如果没有,请运行配置脚本,然后更新所需的任务计数,以便创建其他实例
  3. (1)是避免竞争条件的必要条件。

    虽然这很好用,但它让我感到非常简单:实现一些简单的方法:在创建堆栈时运行bash脚本ONCE。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用AWS::EC2::Instance属性terminate的{​​{3}}资源运行一次性Bash脚本(在脚本执行后终止实例)和{{3属性设置为堆栈中最后创建的资源(因此创建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