2017-01-02 10 views
0

Я разрабатываю стек AWS, который содержит несколько экземпляров, которые запускают несколько сервисов, состоящих из нескольких задач каждый. Одна из этих служб использует NFS для хранения конфигурации, и эта конфигурация должна быть настроена ТОЛЬКО при создании стека.Запуск сценария bash при создании стека

Я придумал способ запуска сценария конфигурации РАЗ, когда стек создан:

  1. Настройка службы, которая должна настраиваться для выполнения одной задачи
  2. При запуске задачи , проверьте, существует ли конфигурация. Если это не так, запустите сценарий конфигурации, а затем обновите требуемый счетчик задач, чтобы создать другие экземпляры.

(1) необходимо для предотвращения состояния гонки.

Несмотря на то, что это хорошо работает, мне кажется очень круглым способом добиться чего-то простого: запустите скрипт bash ONCE, когда мой стек создан. Есть лучший способ сделать это?

+0

С помощью «задачи» и «службы» вы имеете в виду ECS или что-то еще? Некоторые примеры кода помогут прояснить ваше описание вашего текущего подхода. – wjordan

ответ

0

Вы можете запустить один-офф Bash скрипт с использованием AWS::EC2::Instance ресурса с InstanceInitiatedShutdownBehavior свойством terminate (прекратить экземпляр после выполнения сценария), а атрибут DependsOn устанавливается на последний созданный ресурс в стеке (так экземпляр 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