1 回答
TA贡献1796条经验 获得超7个赞
我能够弄清楚,问题最终变成了两件事:
内联脚本的格式需要没有制表符。
pulumi.Sprintf()
最终比使用ApplyT()
.EFS 卷在尝试安装时尚未准备好安装
mount -a
。
放在一起,它现在看起来像这样:
instanceArgs := &ec2.InstanceArgs{
// ... arg fields ...
}
script := `#!/bin/bash
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
mkdir -p %s
echo "%s.efs.%s.amazonaws.com:/ %s nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0" >> /etc/fstab
EFS_STATUS="unknown"
WAIT_TIME=10
RETRY_CNT=15
while [[ $EFS_STATUS != "\"available\"" ]]; do
echo "Waiting for EFS to start..."
sleep $WAIT_TIME
EFS_STATUS=$(aws efs describe-file-systems | jq '.FileSystems | map(select(.FileSystemId == "%s")) | map(.LifeCycleState) | .[0]')
done
while true; do
mount -a -t nfs4
if [ $? = 0 ]; then
echo "Successfully mounted EFS to instance."
break
fi;
if [ $RETRY_CNT -lt 1 ]; then
echo "EFS could not mount after $RETRY_CNT retries."
fi;
echo "EFS could not mount, retrying..."
((RETRY_CNT--))
sleep $WAIT_TIME
done`
userData := pulumi.Sprintf(script, mountDir, Efs.ID(), region, mountDir, Efs.ID())
instanceArgs.UserData = userData
ec2, err := ec2.NewInstance(ctx, fmt.Sprintf("%s_instance", name), instanceArgs)
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报