如何 运行 ec2 UserData 脚本更新 cloudformation
How to run ec2 UserData script on cloudformation update
我有执行 docker-compose pull 和 up 的 ec2 userData 脚本。
我想 运行“aws cloudformation update-stack”并加载新的 docker 图像。
每次 ${imageTag} 属性 改变。
这是我的 cloudformation 实例 yml:
myInstance:
Type: 'AWS::EC2::Instance'
Metadata:
'AWS::CloudFormation::Init':
configSets:
configs:
- "configDockers"
- "configOther"
configDocker:
commands:
a:
command: 'echo -e IMAGE_TAG=${imageTag} >> .env'
b:
command: 'docker-compose pull'
c:
command: 'docker-compose up'
Properties:
UserData:
Fn::Base64:
!Sub |
runcmd:
- /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region} -c configs
- /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region}
我尝试添加“docker-compose down”,删除 UserData 脚本中的旧图像,并在每次启动时将 cloud_final_modules 添加到 运行 UserData:
myInstance:
Type: 'AWS::EC2::Instance'
Metadata:
'AWS::CloudFormation::Init':
configSets:
configs:
- "configDockers"
- "configOther"
configDocker:
commands:
a:
command: 'echo -e IMAGE_TAG=${imageTag} >> .env'
b:
command: 'docker-compose down'
c:
command: 'docker images -q | xargs -r sudo docker rmi'
d:
command: 'docker-compose pull'
e:
command: 'docker-compose up'
Properties:
UserData:
Fn::Base64:
!Sub |
#cloud-config
cloud_final_modules:
- [scripts-user, always]
runcmd:
- /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region} -c configs
- /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region}
但是在“aws cloudformation update-stack”之后,尽管 imageTag 发生了变化,脚本并没有再次 运行。它 运行 仅当我在 运行cmd.
下更改某些值时
如何在每次“aws cloudformation update-stack”运行ning(每次 imageTag 更改)时 运行 UserData 脚本?
我如何才能 运行 某些 UserData 命令仅在首次启动时执行,其他命令在每次重新启动时执行,而其他命令在停止实例时执行?
例如:我想 运行 "docker-compose down" 仅在实例停止时 但其他命令命令:'docker-compose pull/up' 在每个实例重新启动或“aws cloudformation update-stack”时和一些初始命令仅在首次设置时。
How can I run some UserData commands only on first startup, other commands on each reboot and other commands on stop instance?
你不能。 UserData
意味着 运行 仅在实例启动时,而不是重新启动、启动或停止(下面提到的一个例外)。为此,您必须自己实现所有这些功能。
这通常通过 custom systemd unit 文件的定义来完成。因此,您必须为 docker-compose.
创建这样的单元文件
唯一的例外 是 运行在最近的 AWS 博客 post:
我有执行 docker-compose pull 和 up 的 ec2 userData 脚本。
我想 运行“aws cloudformation update-stack”并加载新的 docker 图像。 每次 ${imageTag} 属性 改变。
这是我的 cloudformation 实例 yml:
myInstance:
Type: 'AWS::EC2::Instance'
Metadata:
'AWS::CloudFormation::Init':
configSets:
configs:
- "configDockers"
- "configOther"
configDocker:
commands:
a:
command: 'echo -e IMAGE_TAG=${imageTag} >> .env'
b:
command: 'docker-compose pull'
c:
command: 'docker-compose up'
Properties:
UserData:
Fn::Base64:
!Sub |
runcmd:
- /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region} -c configs
- /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region}
我尝试添加“docker-compose down”,删除 UserData 脚本中的旧图像,并在每次启动时将 cloud_final_modules 添加到 运行 UserData:
myInstance:
Type: 'AWS::EC2::Instance'
Metadata:
'AWS::CloudFormation::Init':
configSets:
configs:
- "configDockers"
- "configOther"
configDocker:
commands:
a:
command: 'echo -e IMAGE_TAG=${imageTag} >> .env'
b:
command: 'docker-compose down'
c:
command: 'docker images -q | xargs -r sudo docker rmi'
d:
command: 'docker-compose pull'
e:
command: 'docker-compose up'
Properties:
UserData:
Fn::Base64:
!Sub |
#cloud-config
cloud_final_modules:
- [scripts-user, always]
runcmd:
- /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region} -c configs
- /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myInstance --region ${AWS::Region}
但是在“aws cloudformation update-stack”之后,尽管 imageTag 发生了变化,脚本并没有再次 运行。它 运行 仅当我在 运行cmd.
下更改某些值时如何在每次“aws cloudformation update-stack”运行ning(每次 imageTag 更改)时 运行 UserData 脚本?
我如何才能 运行 某些 UserData 命令仅在首次启动时执行,其他命令在每次重新启动时执行,而其他命令在停止实例时执行?
例如:我想 运行 "docker-compose down" 仅在实例停止时 但其他命令命令:'docker-compose pull/up' 在每个实例重新启动或“aws cloudformation update-stack”时和一些初始命令仅在首次设置时。
How can I run some UserData commands only on first startup, other commands on each reboot and other commands on stop instance?
你不能。 UserData
意味着 运行 仅在实例启动时,而不是重新启动、启动或停止(下面提到的一个例外)。为此,您必须自己实现所有这些功能。
这通常通过 custom systemd unit 文件的定义来完成。因此,您必须为 docker-compose.
创建这样的单元文件唯一的例外 是 运行在最近的 AWS 博客 post: