首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS CloudFormation用户数据

问AWS CloudFormation用户数据
EN

Stack Overflow用户
提问于 2014-02-06 13:10:45
回答 2查看 3.2K关注 0票数 4

我有一个大约200行的shell脚本。我想使用它来引导ec2实例。是否有可用于将shell脚本转换为userdata的工具?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-10 16:21:58

您可以使用perl (从我的Bash脚本中提取)来完成这个任务:

代码语言:javascript
复制
SOURCE_FILE=$1
perl -p -e 's/\"/\\"/g;' "${SOURCE_FILE}"            |  # Escape of "
perl -p -e 's/^(.*)$/"\1\\n",/g;'                    ;  # Add a " at the beginning of each lines + Add a " at the end of each lines \n",
echo '""'
# Add "" as the last line of the file (to match the , from the previous line)
票数 3
EN

Stack Overflow用户

发布于 2015-03-06 19:56:34

你需要说明特殊的字符,如',*,\等。这对我有用,但我不确定它是否完整,以涵盖每一种情况。

代码语言:javascript
复制
echo -n '"' ; sed ':again; N; $!b again; s/\\/\\\\/g; s/"/\\"/g; s/\n/\\n/g; s/$/\\n/;' $1 | tr -d '\n' ; echo '"'

这将产生一个可以放在"UserData":{“Fn::Base64 64”:字段中的长字符串。下面是一个示例shell脚本:

代码语言:javascript
复制
#!/bin/bash

echo $(date "+%F %R:%S") ":: get metadata"
MD=/etc/profile.d/metadata.sh
echo "# AWS metadata" >  $MD
metadata=$(curl -sf http://169.254.169.254/latest/dynamic/instance-identity/document)
echo declare -x metadata=\'$metadata\' >> $MD

echo $(date "+%F %R:%S") ":: yum update"
yum -y update

echo $(date "+%F %R:%S") ":: awscli update"
yum -y install python-pip
rm -rf /tmp/pip-build-root/ ; pip install awscli --upgrade

echo $(date "+%F %R:%S") ":: set a cronjob"
echo '*/15 * * * *    ~/bin/cronjob.sh' > /var/spool/cron/root

echo $(date "+%F %R:%S") ":: userdata complete"

转换为CloudFormation:

代码语言:javascript
复制
"#!/bin/bash\n\necho $(date \"+%F %R:%S\") \":: get metadata\"\nMD=/etc/profile.d/metadata.sh\necho \"# AWS metadata\" >  $MD\nmetadata=$(curl -sf http://169.254.169.254/latest/dynamic/instance-identity/document)\necho declare -x metadata=\\'$metadata\\' >> $MD\n\necho $(date \"+%F %R:%S\") \":: yum update\"\nyum -y update\n\necho $(date \"+%F %R:%S\") \":: awscli update\"\nyum -y install python-pip\nrm -rf /tmp/pip-build-root/ ; pip install awscli --upgrade\n\necho $(date \"+%F %R:%S\") \":: set a cronjob\"\necho '*/15 * * * *    ~/bin/cronjob.sh' > /var/spool/cron/root\n\necho $(date \"+%F %R:%S\") \":: userdata complete\"\n"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21603964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档