- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
AWS ec2 使用 Terraform 创建具有 SSH 访问权限的 ec2 实例。 resource "aws_instance" "inst1" { instanc-6ren">
我的设置是:地形 --> AWS ec2
使用 Terraform 创建具有 SSH 访问权限的 ec2 实例。
resource "aws_instance" "inst1" {
instance_type = "t2.micro"
ami = data.aws_ami.ubuntu.id
key_name = "aws_key"
subnet_id = ...
user_data = file("./deploy/templates/user-data.sh")
vpc_security_group_ids = [
... ,
]
provisioner "file" {
source = "./deploy/templates/ec2-caller.sh"
destination = "/home/ubuntu/ec2-caller.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /home/ubuntu/ec2-caller.sh",
]
}
connection {
type = "ssh"
host = self.public_ip
user = "ubuntu"
private_key = file("./keys/aws_key_enc")
timeout = "4m"
}
}
上面的位有效,我可以看到供应商正在复制和执行“ec2-caller.sh”。我不想将我的私钥以明文形式传递给 Terraform 供应商。无论如何我们可以将文件复制到新创建的 ec2 而无需使用配置器或不将私钥传递给配置器?
干杯。
最佳答案
Terraform 文档部分 Provisioners are a Last Resort提出了提供和传递凭据的必要性,作为提供者成为“最后手段”的理由之一,然后继续为 passing data into virtual machines and other compute resources 建议一些其他策略.
您似乎已经在使用 user_data
来指定要运行的其他一些脚本,因此要遵循该文档中的建议,需要将这些全部组合到一个 cloud-init 中。配置。 (我假设您的 AMI 已安装 cloud-init,因为这通常负责将 user_data
解释为要执行的 shell 脚本。)
Cloud-init 支持 several different user_data
formats , 主要的是 cloud-init's own YAML configuration file format, "Cloud Config" .您还可以使用 multipart MIME message将多个不同的 user_data
有效负载打包到一个 user_data
主体中,只要有效负载的组合大小符合 EC2 的 user_data
上限大小,即 16kiB。
从您的配置来看,您似乎需要 cloud-init 处理两个步骤才能使用 cloud-init 完全解决此问题:
./deploy/templates/user-data.sh
脚本。/home/ubuntu/ec2-caller.sh
放在具有适当权限的磁盘上。假设这两个步骤相互独立,您可以向 cloud-init
发送一个多部分 MIME 消息,其中包括您最初单独使用的用户数据脚本和 一个 Cloud Config YAML 配置,用于将 ec2-caller.sh
文件放在磁盘上。 The Terraform provider hashicorp/cloudinit
有数据源cloudinit_config
它知道如何为 cloud-init 构建多部分 MIME 消息,您可以像这样使用它:
data "cloudinit_config" "example" {
part {
content_type = "text/x-shellscript"
content = file("${path.root}/deploy/templates/user-data.sh")
}
part {
content_type = "text/cloud-config"
content = yamlencode({
write_files = [
{
encoding = "b64"
content = filebase64("${path.root}/deploy/templates/ec2-caller.sh")
path = "/home/ubuntu/ec2-caller.sh"
owner = "ubuntu:ubuntu"
permissions = "0755"
},
]
})
}
}
resource "aws_instance" "inst1" {
instance_type = "t2.micro"
ami = data.aws_ami.ubuntu.id
key_name = "aws_key"
subnet_id = ...
user_data = data.cloudinit_config.example.rendered
vpc_security_group_ids = [
... ,
]
}
上面的第二个部分
block 包括基于云初始化示例的 YAML Writing out arbitrary files ,您可以引用它以了解其他可能的设置。 Terraform's yamlencode
function无法生成该示例中某些文件中使用的特殊 !!binary
标记,但设置 encoding: b64
允许传递 base64 编码的文本作为一个普通的字符串。
关于amazon-web-services - 使用 Terraform 将文件传递给新创建的 ec2 实例而不共享 "connection"部分中的私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72159273/
使用 caret::train() 运行逻辑回归模型时出现问题。LR = caret::train(Satisfaction ~., data= log_train, method = "glm",
我正在尝试将nginx容器作为我所有网站和Web服务的主要入口点。我设法将portainer作为容器运行,并且可以从互联网上访问它。现在,我正在尝试访问由另一个Nginx容器托管的静态网站,但这样做失
我有一个在 Windows XP SP3 x86 上运行的 Visual Studio 2008 C# .NET 3.5 应用程序。在我的应用程序中,我有一个事件处理程序 OnSendTask 可以同
我在 Eclipse 中创建了作为独立程序执行的此类,它可以毫无问题地连接所有 http URL(例如:http://stackoverflow.com),但是当我尝试连接到 https(例如 htt
我在我的 nginx 错误日志中收到大量以下错误: connect() failed (111: Connection refused) while connecting to upstream 我的
我正在尝试将新的 log4j2 与 Socket Appender 一起使用,但我有点不走运。这是我的 XML 配置文件:
我目前正在尝试寻找 Android 应用程序后端的替代方案。目前,我使用 php servlet 来查询 Mysql 数据库。数据库(Mysql)托管在我大学的计算机上,因此我无法更改任何配置,因为我
类MapperExtension有一些方法,before_insert, before_update, ...都有一个参数connection. def before_insert(self, map
嗨,我正在尝试更改位于连接库 (v 5.5) 中的文档的文档所有者,我仍在等待 IBM 的回复,但对我来说可能需要太长时间,这就是我尝试的原因逆向工程。 我尝试使用标准编辑器 POST 请求将编辑器更
我在 nginx( http://52.xx.xx.xx/ )上访问我的 IP 时遇到 502 网关错误,日志只是这样说: 2015/09/18 13:03:37 [error] 32636#0: *
我要实现 Connected-Component Labeling但我不确定我应该以 4-connected 还是 8-connected 的方式来做。我已经阅读了大约 3 种 Material ,但
我在Resources ->JMS ->Connection Factories下有两个连接工厂。 1) 连接工厂 2)集成连接工厂 我想修改两个连接工厂下连接池的最大连接数。资源 ->JMS ->连
我在将 mongoengine 合并到我的 django 应用程序时遇到问题。以下是我收到的错误: Traceback (most recent call last): File "/home/d
上下文 我正在关注 tutorial on writing a TCP server last week in Real World Haskell .一切顺利,我的最终版本可以正常工作,并且能够在
我在访问我的域时遇到了这个问题:我看到了我的默认 http500 错误 django 模板正在显示。 我有 gunicorn 设置: command = '/usr/local/bin/gunicor
我更换了电脑,并重新安装了所有版本:tomcat 8 和 6、netbeans 8、jdk 1.7、hibernate 4.3.4,但是当我运行 Web 应用程序时,出现此错误。过去使用我的旧电脑时,
您好,我是这个项目的新手,我在 CentOS7 ec2 实例上托管它时遇到问题。当我访问我的域时出现此错误: 2017/02/17 05:53:35 [error] 27#27: *20 connec
在开始之前,我已经查看了所有我能找到的类似问题,但没有找到解决我的问题的方法。 我正在运行 2 个 docker 容器,1 个用于 nginx,1 个用于 nodejs api。我正在使用 nginx
使用 debian 包将 kaa -iot 平台配置为单节点时。我收到以下错误。 himanshu@himpc:~/kaa/deb$ sudo dpkg -i kaa-node-0.10.0.deb
我是我公司开发团队的成员,担任管理员角色。我可以通过 https://developer.apple.com/ 访问团队的成员(member)中心 但是,当我尝试在 https://itunescon
我是一名优秀的程序员,十分优秀!