Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 将日志文件复制到S3并通过用户数据关闭自动缩放实例_Amazon Web Services_Amazon S3_Aws Cli - Fatal编程技术网

Amazon web services 将日志文件复制到S3并通过用户数据关闭自动缩放实例

Amazon web services 将日志文件复制到S3并通过用户数据关闭自动缩放实例,amazon-web-services,amazon-s3,aws-cli,Amazon Web Services,Amazon S3,Aws Cli,我有一个自动缩放组,当CloudWatch警报响起时,当SQS队列中有消息时,启动该组 但我不想创建另一个CloudWatch警报,以减少自动缩放组中的实例数,因为在该实例中执行的任务可能比警报设置花费更长的时间 因此,我尝试的方法是,创建实例后,将用户数据作为“.sh”文件传递,运行我想要的任务,等待任务完成,将文件复制到S3并终止实例 不幸的是,该文件确实进入了S3,但它是空的,并且实例从未关闭 我已经读过这篇文章,它可以用生命周期挂钩之类的东西来做,但我想知道是否可以用上面解释的方法来做

我有一个自动缩放组,当CloudWatch警报响起时,当SQS队列中有消息时,启动该组

但我不想创建另一个CloudWatch警报,以减少自动缩放组中的实例数,因为在该实例中执行的任务可能比警报设置花费更长的时间

因此,我尝试的方法是,创建实例后,将用户数据作为“.sh”文件传递,运行我想要的任务,等待任务完成,将文件复制到S3并终止实例

不幸的是,该文件确实进入了S3,但它是空的,并且实例从未关闭

我已经读过这篇文章,它可以用生命周期挂钩之类的东西来做,但我想知道是否可以用上面解释的方法来做

我的用户数据如下:

#!/bin/bash
runuser -l ec2-user -c "cd /my-directory && nohup execute-my-task --trace > /logs-directory/my-log-file.log & "
PID=$!
wait $PID

runuser -l ec2-user -c "aws s3 cp /logs-directory/my-log-file.log s3://-my-logs-bucket/my-log-file.log"
PID2=$!
wait $PID2

runuser -l ec2-user -c "shutdown -h now"
谢谢。

我想出来了

最后,我将命令合并为一个,同时在命令之间添加
&&
,并关闭我使用的实例:

aws ec2 terminate-instances --instance-ids `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
注意倒勾以运行
wget
命令并返回instance-id