#amazon-web-services #amazon-ec2 #terraform
#amazon-web-services #amazon-ec2 #terraform
Вопрос:
При создании экземпляра ec2 с помощью Terraform я хочу ввести в скрипт весь файл ключа pem.
resource "aws_instance" "myinstance" {
...
user_data = base64encode(templatefile(
"${path.module}/userdata.sh", {
conf_tls_private_key = tls_private_key.mykey.private_key_pem
conf_tls_self_signed_cert = tls_self_signed_cert.mykey2.cert_pem
}
))
}
Реализация файла terraform такая же, как указано выше. При использовании terraform console я протестировал tls_private_key.mykey.private_key_pem
выражение, и оно дает мне обычный формат ЗАКРЫТОГО КЛЮЧА OPENSSH.
❯ tf console
> tls_private_key.boundary.private_key_pem
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAql5ImjYHynOkQGWL0DGT/3FGCIM6gouUi57MllyZCztzrBwp
FtWe zJNWWjAu WeyESqSnzmdFRnUiIqqo4Fq98yvF3 pjsbSMsC9s4H4wz/gp4o
ZzYXja4u7fBWGFMUKfU53M6zZS0FL0QQ/Tgt9u p9q6HlyhtxiNKY0e3aX4xdCMH
QSrBLBIHLlpapkl/bvWk1xkSPEPNkNHbTvBd 3z2iWtxANEqO6ARItCCI DcGyWP
W1FIwwKFBftNQAgxfs2pxdSnqpoaHSi4M9XjY7r7bADUItf9zpAy PbqJr F3Bzc
Однако, когда userdata.sh
выполняется в ec2, выдается ошибка, подобная приведенной ниже.
/var/lib/cloud/instance/scripts/part-001: line 8: RSA: command not found
/var/lib/cloud/instance/scripts/part-001: line 9: MIIEogIBAAKCAQEAql5ImjYHynOkQGWL0DGT/3FGCIM6gouUi57MllyZCztzrBwp: No such file or directory
/var/lib/cloud/instance/scripts/part-001: line 10: FtWe zJNWWjAu WeyESqSnzmdFRnUiIqqo4Fq98yvF3 pjsbSMsC9s4H4wz/gp4o: No such file or directory
/var/lib/cloud/instance/scripts/part-001: line 11: ZzYXja4u7fBWGFMUKfU53M6zZS0FL0QQ/Tgt9u p9q6HlyhtxiNKY0e3aX4xdCMH: No such file or directory
/var/lib/cloud/instance/scripts/part-001: line 12: QSrBLBIHLlpapkl/bvWk1xkSPEPNkNHbTvBd 3z2iWtxANEqO6ARItCCI DcGyWP: No such file or directory
/var/lib/cloud/instance/scripts/part-001: line 13: W1FIwwKFBftNQAgxfs2pxdSnqpoaHSi4M9XjY7r7bADUItf9zpAy PbqJr F3Bzc: command not found
Кажется, что каждая строка в файле интерпретируется как команда, чего я не предполагал.
Код userdata.sh
, вызвавший проблему, приведен ниже.
echo $conf_tls_private_key | sudo tee "/etc/pki/tls/boundary/boundary.key"
Есть ли что-нибудь, о чем я не знаю, или что-нибудь, что я могу исправить эту проблему? Большое спасибо!
Ответ №1:
Если вы можете, я бы рекомендовал проверить следующую версию userdata.sh
, которая использует heredoc:
#!/bin/bash
tee /etc/pki/tls/boundary/boundary.key << END
${conf_tls_private_key}
END
Это должен быть более естественный способ tee
записи многострочных строк /etc/pki/tls/boundary/boundary.key
, а также вывода их в стандартный вывод.