我正在设计一个AWS堆栈,其中包含多个实例,这些实例运行少量服务,每个服务由几个任务组成。其中一个服务使用NFS来存储配置,这个配置需要在创建堆栈时设置为ONCE。
我想出了一种在创建堆栈时运行配置脚本ONCE的方法:
(1)是避免竞争条件的必要条件。
虽然这很好用,但它让我感到非常简单:实现一些简单的方法:在创建堆栈时运行bash脚本ONCE。有更好的方法吗?
答案 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