我是 cloudformation yaml 的新手。
我有以下内容需要在启动配置中用作用户数据:
UserData:
Fn::Base64: !Sub
- |
#!/bin/bash -x
apt-get -y update && apt install -y awscli mysql-client libmysqlclient-dev python-pip
for item in certs user_prop config log
do
echo "... preparing ${item} database and config"
MYSQL_DB_NAME="ext_as_${item}"
LOCAL_DB_NAME=$(echo ${item}|tr -d '_')
LOCAL_DB_FILE="/path/to/db/${LOCAL_DB_NAME}"
DB_KEY="${item}_db"
#- set db configuration value
sed -i "s|${DB_KEY}=.*|${DB_KEY}==mysql://${DB_FQDN}/${MYSQL_DB_NAME}|" /path/to/config.conf
#- create mysql db
mysql --defaults-file=${MYSQL_PREF} -e "CREATE DATABASE IF NOT EXISTS $${MYSQL_DB_NAME};"
#- import local DB schema into MySql if no tables exist
mysql --defaults-file=$${MYSQL_PREF} --silent --skip-column-names \
-e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '${MYSQL_DB_NAME}';"|grep -e ^0 -q \
&& ./dbcvt -t ${item} -s sqlite:///${LOCAL_DB_FILE} -d mysql://${DB_FQDN}/${MYSQL_DB_NAME} -p ${MYSQL_PREF}
done
popd
-
DB_FQDN:
'Fn::ImportValue': 'OVPNConfigDbEndpoint'
现在问题DB_FQDN
得到了解决,但是LOCAL_DB_FILE
, LOCAL_DB_NAME
, DB_KEY
, MYSQL_DB_NAME
, 并MYSQL_PREF
没有得到解决。现在的问题是:
- 如果我对其他值进行硬编码,如何在 userdata shell 脚本中使用 for 循环?
- 我是否必须始终使用Alex在https://stackoverflow.com/a/54535452/4035062中提到的 Fn::Join ?
用Fn::Join
写一个简单的shell脚本似乎相当复杂。 - 是什么
+
意思!Sub |+
?