I have slightly changed An introduction to Terraform code. My goal is to deploy cluster of web servers My code,main.tf

provider "aws" { region = "eu-central-1"}

resource "aws_launch_configuration" "example" {
    ami = "ami-df8406b0"
    image_id      = "${data.aws_ami.ubuntu.id}"
    instance_type = "t2.micro"
    vpc_security_group_ids = ["${aws_security_group.instance.id}"]

user_data = <<-EOF
   echo "Hello, World" > index.html

lifecycle {
    create_before_destroy = true

variable "server_port" {
  default = 8080

resource "aws_security_group" "instance" {
 name = "terraform-example-instance"
 ingress {
   from_port = "${var.server_port}"
   to_port = "${var.server_port}"
   protocol = "tcp"
   cidr_blocks = [""]

lifecycle {
    create_before_destroy = true


data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]

  filter {
    name   = "virtualization-type"
    values = ["hvm"]

  owners = ["099720109477"] # Canonical

resource "aws_autoscaling_group" "example" {
    launch_configuration = "${aws_launch_configuration.example.id}"
    min_size = 2
    max_size = 10

    tag {
        key = "Name"
        value = "terraform-asg-example"
        propagate_at_launch = true

When I go for terraform plan

2 error(s) occurred:

* aws_launch_configuration.example: : invalid or unknown key: ami
* aws_launch_configuration.example: : invalid or unknown key: vpc_security_group_ids

I am a little bit confused with data,it serves for what? Where is my mistake?


The error is that you have specified two arguments to a aws_launch_configuration resource which aren't valid; namely ami and vpc_security_group_ids, see the documentation for what's valid.

I suspect you've changed from using a single aws_instance resource to an aws_launch_configuration resource, however they don't use the same arguments.

  • I have taken a look at documentatiom,still I do not understand how to specify my ami?Yes,that is true that I have changed from single instance. – MikiBelavista Jan 3 '18 at 16:15
  • The howto you linked to shows you how to do this. See the "Deploy a cluster of web servers" section and its first code section. You need to remove those two invalid arguments from the resource before Terraform will even try and create your infrastructure. – bodgit Jan 3 '18 at 16:29
  • 1
    @MikiBelavista aws_instance takes ami, where aws_launch_configuration takes image_id. They are different, in large part because this functionality was added very early in the Terraform project, and done before they had much consistency between resource-types. – sysadmin1138 Jan 3 '18 at 16:36

Your Answer

