我为 EC2 创建了一个名为 terraform 的密钥对,将 pem 文件下载到我的 terraform 文件所在的同一目录,我发出 terraform apply 并得到:
aws_instance.windows: Creating...
Error: Error launching source instance: InvalidKeyPair.NotFound: The key pair 'terraform' does not exist
status code: 400, request id: 1ac563d4-244a-4371-bde7-ee9bcf048830
我通过环境变量指定键值对的名称。这是我用来创建 Windows 虚拟机的块的开始:
resource "aws_instance" "windows" {
ami = data.aws_ami.Windows_2019.image_id
instance_type = var.windows_instance_types
key_name = var.key_name
vpc_security_group_ids = [aws_security_group.allow_rdp_winrm.id]
associate_public_ip_address = true
subnet_id = aws_subnet.subnet1.id
get_password_data = "true"
user_data = file("scripts/user_data.txt")
显然我做错了什么,我是否需要告诉 terraform 哪个 aws 区域然后密钥对驻留在其中?
答案 0 :(得分:0)
密钥对是区域性的,因此如果您在一个区域中创建它们,则它们在另一个区域中不可用。
Terraform 将始终尝试在您告诉它运行的区域中查找和使用密钥,如果该密钥不存在,AWS 会抱怨此错误。
Terraform 也不喜欢带外创建的东西,您可能会遇到复杂情况。使用 terraform 创建密钥对也更简洁,您可以将其引用为 Atul has posted in his answer。
您也可以将密钥导入 Terraform 或使用 Terraform 的数据源来搜索和查找密钥作为替代方案,但这些方法有点高级,尤其是当您开始使用 Terraform 时。
答案 1 :(得分:0)
您需要先创建一个密钥对,然后才能使用它。
function myFunction() {
// get spreadsheet details
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1'); // change that to the name of your sheet
// provide some data
const sep_col = 3; // column you want to separate the data
const data = ["d1","d2","d3","d5","d6"];
const data1 = data.slice(0,sep_col);
const data2 = data.slice(sep_col,data.length);
// get current last row of document
const Lrow = sh.getLastRow();
// paste the data to separate ranges
const start_col = 1;
const space_col = 1;
sh.getRange(Lrow+1,start_col, 1, data1.length).setValues([data1]);
sh.getRange(Lrow+1,start_col+data1.length + space_col, 1, data2.length).setValues([data2]);
}
现在使用密钥作为
resource "aws_key_pair" "my_key_pair" {
key_name = var.key_name
public_key = file("${abspath(path.cwd)}/my-key.pub")
}