【问题标题】:How to access key value pairs stored in aws parameter store using terraform script如何使用 terraform 脚本访问存储在 aws 参数存储中的键值对
【发布时间】:2022-01-21 20:29:07
【问题描述】:

要求是我想在运行时将我的 SSH 密钥传递给 ec2 实例,该密钥使用 terraform 代码存储在参数存储中。

  data "aws_ssm_parameter" "key_pair" {                                                                          
 name = "/Test/keystest"    
} 

这是我的启动配置

 resource "aws_launch_configuration" "app" {
image_id  = data.aws_ssm_parameter.ami.value
instance_type = "t2.micro"
key_name = data.aws_ssm_parameter.key_pair.value
security_groups = [ aws_security_group.sg_web.id ]
  associate_public_ip_address = true

  user_data = <<USER_DATA
#!/bin/bash
sudo su
yum update -y
yum install httpd -y
cd /var/www/html
echo "MyGoogle-2" > index.html
service httpd start
chkconfig httpd on
  USER_DATA

  lifecycle {
    create_before_destroy = false
  }
}

当我执行上述 tf 代码时,出现以下错误

Error creating launch configuration: ValidationError: 1 validation error detected: 
Value 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBBBnLT+Q2ga26mv4coeobj4flEDtX/lfmP4tCWYhMW868UqHIJw4C+Ns1yh3Ondp1sW094UR6NCJHKJeGkFrzB7/EaPKLt/z3wJceIsXKSsqS539YiaslIY54t7fDpM0qcE/Y6K+zS21lGLEuAys/OwgutZGgFxDSDWtTleU0kRvnI4MVsPtWLMu4AzfvrlHrYkv2fGiwfJzq/UjnF+TvHTPoYMp3TImjvhLzrmL1y2XrWesj7Q1E1xsgMgs4N5WIbXGI45KuRBcJVNmSpw/quv5vz/3NxtRQwmQcPriJo+Fucj14+UsW+CD3agbPn4arh4PE8E2Gel Test' at 'keyName' failed to satisfy constraint: Member must have length less than or equal to 255
│       

status code: 400, request id: f5bf125c-54b8-4bf5-ad13-aead7176f3a3


  

【问题讨论】:

  • 你真的尝试过为此编写任何 TF 代码吗?
  • 那么分享代码并解释为什么它不能处理错误消息。
  • @Marcin 更新了问题,请您调查一下。没有提供正确的细节是我的错。
  • 错误是关于“启动配置”,但您的代码中没有显示启动配置。
  • @Marcin 我正在从参数存储中获取 AMI ID,但无法从参数存储中获取此密钥对值...希望您得到我的问题陈述。

标签: amazon-web-services terraform terraform-provider-aws


【解决方案1】:

您将 ssh 密钥数据传递给 key_name。您必须将 ssh 密钥名称传递给 key_name。现在,如果您需要 EC2 中的 ssh 密钥。使用用户数据传递它。安装 AWS cli,然后使用 ssm get 参数获取 EC2 中的密钥。

【讨论】:

    【解决方案2】:

    错误表示您的key_name 错误。您正在尝试将 ssh 密钥传递给它,但它应该是一个名称,例如“MyKeyPair”,您使用aws_key_pair 创建。这是您指定public_key 的地方。

    【讨论】:

    • 要求是我想在运行时将我的SSH密钥传递给ec2实例,它使用terraform代码存储在参数存储中,我的要求是否有意义/是否可以将SSH密钥存储在参数存储在安全字符串类型中。
    • @JayaKrishna 那么你必须只使用 user_data。
    • 如果可能,请您详细说明示例代码。
    • @JayaKrishna 我的回答解决了您报告的错误。 user_data 是一个新问题,因此应该提出新问题。此外,如果我当前的回答有助于克服您最初的“ValidationError”问题,那么我们将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 2021-11-11
    • 1970-01-01
    • 2020-08-19
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多