2017-01-02 144 views
0

我正在設計一個AWS堆棧,其中包含多個運行少數幾個任務的服務的實例。其中一個服務使用NFS來存儲配置,並且該配置需要在創建堆棧時設置爲ONCE。創建堆棧時運行bash腳本

,我想出了一個辦法運行一次配置腳本創建堆棧時:

  1. 配置需要配置自身運行單個任務
  2. 當任務開始服務,檢查配置是否存在。如果沒有,則運行配置腳本,然後更新所需的任務計數,以便創建其他實例

(1)對於避免競爭條件是必要的。

儘管這樣做效果很好,但它讓我覺得這是一種非常圓滑的方式來實現簡單:在創建堆棧時運行一個bash腳本。有一個更好的方法嗎?

+0

'task'和'service'是指ECS還是其他的東西?一些代碼示例將有助於澄清您對當前方法的描述。 – wjordan

回答

0

您可以使用AWS::EC2::Instance資源與terminateInstanceInitiatedShutdownBehavior屬性(在腳本執行後,終止實例)運行一次性bash腳本和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