我有一個大約200行的shell腳本。我想用它來引導一個ec2實例。是否有任何工具可用於將shell腳本轉換爲用戶數據?AWS CloudFormation用戶數據
3
A
回答
3
您可以用Perl(摘自我的bash腳本之一)做到這一點:
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)
+0
謝謝。這很有幫助。 (y)我剛從S3中複製並執行它。 –
+0
這是純粹的天才。除了答案之外,我喜歡你如何評論命令的每個部分,並在最後使用echo'「來完成它。 – look
0
你需要考慮的特殊字符,如」 *,\,等。這對我的作品,但我不確定它是完整的涵蓋每一個案例。
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」:field。下面是一個例子shell腳本:
#!/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:
"#!/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"
相關問題
- 1. AWS CloudFormation中的Crontab用戶數據
- 2. 數據庫AWS CloudFormation Wordpress
- 3. AWS CloudFormation - 分享用戶數據的腳本中使用跨EC2s
- 4. AWS CloudFormation .NET SDK
- 5. AWS Cloudformation輸出
- 6. AWS CloudFormation可以調用AWS API嗎?
- 7. 使用AWS CloudFormation部署PredictionIO
- 8. 差異與CloudFormation AWS
- 9. AWS CloudFormation和Elastic Transcoder
- 10. AWS cloudformation可選行
- 11. AWS OpsWorks vs AWS Beanstalk vs AWS CloudFormation?
- 12. 使用Cloudformation在AWS Postgres RDS中創建多個數據庫
- 13. aws CloudFormation AWS :: EC2 ::實例BlockDeviceMappings和卷
- 14. CloudFormation用戶數據創建了RedHat用戶
- 15. AWS SSM參數存儲與CloudFormation
- 16. AWS CloudFormation多區域特徵
- 17. AWS CloudFormation Internet網關出錯
- 18. AWS cloudformation -resource屬性錯誤
- 19. AWS Cloudformation不承認AutoScalingGroup
- 20. AWS CloudFormation鏈接功能
- 21. vpc none不存在。 - AWS CloudFormation
- 22. AWS cloudFormation LAMP堆棧失敗
- 23. AWS CloudFormation YAML或功能
- 24. AWS CloudFormation條件標記
- 25. AWS cloudformation綁定域名
- 26. AWS:如何在CloudFormation模板
- 27. AWS SNS主題策略Cloudformation
- 28. AWS Cloudformation:從Cloudformation啓用RDS中的PostGIS擴展
- 29. 如何使用CloudFormation創建OpsWorks用戶?
- 30. CloudFormation:如何在Mappings中使用AWS :: AccountId?
有什麼理由你不只是複製腳本文件到文件,並與雲的形成執行? – Edwin
我是一個新手到cloudformation。如果你正在談論從s3存儲桶中「wget」一個shell腳本並在更改權限後執行它,這是一個可行的選擇嗎? –
我在回答你的問題,但後來我意識到userdata和CloudFormation之間可能存在一些混淆。他們是獨立的概念。你當然可以做一個wget,並用userdata來執行。您是否有其他原因使用雲陣列? – Edwin