2017-06-16 4 views
0

私はTerraformを使用してAWS設定を行っています。私は現在実行中の問題を把握するのに苦労しています。VPCの自動スケーリンググループの問題 - Terraform

私がしようとしているのは、経路/サブネット/セキュリティグループが設定されたラボVPC内でラボインデクサーの自動スケーリンググループをスピンアップさせることです。 `terraform apply 'を実行すると、スクリプトは' lab-indexer '部分でハングアップし、タイムアウトします。私が設定したタイムアウトメッセージ以外のエラーは出ません。 vpc_zone_indentifier行をコメントアウトすると、インデックスが正しく構成されていなくてもエラーなしでスピンアップします。これは、私が自分のVPC設定内で何らかの設定エラーを起こしていると思うようになります。

私はTerraform Docs、スタックオーバーフロー、およびthis comprehensive guide to Terraformを検索しました。私は問題を見つける運がなかった。

私はTerraform(3週間使用しています)とAWS(2か月前に開始された)に比較的新しいです。私は愚かな間違いをしていると確信していますが、私は問題を見つけるのに苦労しています。助けていただければ幸いです。あなたはここに私のコードを見つけることができます:https://paste.ofcode.org/duZScjhHbCn57sUXEkqAve

UPDATE: 私はコンソールにログインし、ASG内のインスタンスが作成されていた間、ASGの活動をチェックすることができました。ステータスとして「取り消された」インスタンスを作成しようとしていることに気付きました。調査の結果、私は次のメッセージを見ました。

説明:新しいEC2インスタンスを起動説明:I-0bf6afd70895e8212。ステータス理由:ロードバランサの更新に失敗しました lab-asg-indexer:EC2インスタンスi-044ff993c34bc237aがELBと同じ VPCにありません。ロードバランサ設定を更新する

原因失敗しました:2017-06-19T13で原因:00:41Zインスタンスは は0から3

に容量を増加させる、所望の実際の容量との差に応じて開始されました

この問題をVPCで修正する方法についてはわかりません。

subnets   = ["${aws_subnet.lab-Subnet.id}"] 

経由でELBをVPCに追加しましたが、これは問題を解決していません。何か案は?

+0

を行く方法を知ってみましょう。ELBヘルスチェックを修正するか、EC2ヘルスチェックに切り替えます(ハイパーバイザーに関する基本的なシステムチェックをパスしますか?)。 – ydaetskcoR

+0

あなたが役に立つかもしれないterraformスクリプトを投稿できるかどうか。 – strongjz

+0

@ydaetskcoR - ありがとうございます。タイプをEC2に変更しましたが、私は同じ結果を持っています。コンソールは、ASGのaws_autoscaling_group.lab-indexer:still creating ... '' 'を作成して、必然的にタイムアウトするまでそのメッセージを繰り返しています。 –

答えて

0

設定の一部が間違っていました。

  1. まずあなたが として設定launch_configurationは "$ {aws_launch_configuration.lab-indexer.id}" $ {} data.aws_availability_zones.all.names
  2. でなければなりません。また、キーを作成するには何のリソースがありませんでしたペアで設定します
  3. ELBセキュリティグループに関連付けられたVPC IDはありません。

私はあなたのためにこれを修正し、私のシステムからテストして、現在動作しています。私はそれはあなたがASGのELBヘルスチェックを使用しますが、実際にあなたのELBヘルスチェックを設定していないので、私はそれを推測すると思います一目で

# --------------------------------------------------------------------------------------------------------------------- 
# GET THE LIST OF AVAILABILITY ZONES IN THE CURRENT REGION 
# Every AWS accout has slightly different availability zones in each region. 
# --------------------------------------------------------------------------------------------------------------------- 
data "aws_availability_zones" "all" {} 

# -------------------------------------------------------------------------------------------------------------------- 
# CREATE VPC 
# -------------------------------------------------------------------------------------------------------------------- 
resource "aws_vpc" "lab-VPC" { 
    cidr_block = "10.0.0.0/16" 

    tags { 
    Name = "lab-VPC" 
    } 
} 

# -------------------------------------------------------------------------------------------------------------------- 
# CREATE SUBNET 
# -------------------------------------------------------------------------------------------------------------------- 
resource "aws_subnet" "lab-Subnet" { 
    vpc_id     = "${aws_vpc.lab-VPC.id}" 
    availability_zone  = "us-east-1a" 
    cidr_block    = "10.0.0.0/24" 
    map_public_ip_on_launch = "false" 
} 


# -------------------------------------------------------------------------------------------------------------------- 
# CREATE ROUTE TABLE 
# -------------------------------------------------------------------------------------------------------------------- 
resource "aws_route_table" "lab-RouteTable-Private" { 
    vpc_id = "${aws_vpc.lab-VPC.id}" 
    route { 
    cidr_block = "0.0.0.0/0" 
    gateway_id = "${aws_internet_gateway.gw.id}" 
    } 
} 

resource "aws_route_table_association" "lab-associatedVPS" { 
    subnet_id  = "${aws_subnet.lab-Subnet.id}" 
    route_table_id = "${aws_route_table.lab-RouteTable-Private.id}" 
} 

# --------------------------------------------------------------------------------------------------------------------- 
# CREATE THE AUTO SCALING GROUP 
# --------------------------------------------------------------------------------------------------------------------- 
resource "aws_autoscaling_group" "lab-indexers" { 
    launch_configuration = "${aws_launch_configuration.lab-indexer.name}" 
    # availability_zones = ["${data.aws_availability_zones.all.names}"] 
    # availability_zones = ["${var.region}a"] 
    vpc_zone_identifier = ["${aws_subnet.lab-Subnet.id}"] 

    min_size = 3 
    max_size = 9 

    load_balancers   = ["${aws_elb.lab-indexer-elb.name}"] 
    health_check_type   = "ELB" 
    wait_for_capacity_timeout = "5m" 

    tag { 
    key     = "Name" 
    value    = "lab-indexer" 
    propagate_at_launch = true 
    } 
} 

# -------------------------------------------------------------------------------------------------------------------- 
# CREATE IGW 
# -------------------------------------------------------------------------------------------------------------------- 
resource "aws_internet_gateway" "gw" { 
    vpc_id = "${aws_vpc.lab-VPC.id}" 

    tags { 
    Name = "lab-IGW" 
    } 
} 

variable "PATH_TO_PUBLIC_KEY" { 
    default = "myKey.pub" 
} 

###create key 
resource "aws_key_pair" "mykeypair" { 
    key_name = "mykeypair" 
    public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}" 
    lifecycle { 
    ignore_changes = ["public_key"] 
    } 
} 


# --------------------------------------------------------------------------------------------------------------------- 
# CREATE A LAUNCH CONFIGURATION THAT DEFINES EACH EC2 INSTANCE IN THE ASG 
# --------------------------------------------------------------------------------------------------------------------- 
resource "aws_launch_configuration" "lab-indexer" { 
    # AWS Linux AMI (HVM), SSD Volume Type in us-east-1 
    image_id  = "ami-c58c1dd3" 
    instance_type = "t2.micro" 
    security_groups = ["${aws_security_group.instance.id}"] 
    key_name  = "${aws_key_pair.mykeypair.key_name}" 

# This device contains homePath 
    ebs_block_device { 
    device_name   = "/dev/xvdb" 
    volume_size   = 8 
    volume_type   = "gp2" 
# encrypted    = true 
    delete_on_termination = true 
    } 

    ebs_block_device { 
    device_name   = "/dev/xvdc" 
    volume_size   = 8 
    volume_type   = "gp2" 
# encrypted    = true 
    delete_on_termination = true 
    } 

    lifecycle { 
    create_before_destroy = true 
    } 
} 

# --------------------------------------------------------------------------------------------------------------------- 
# CREATE THE SECURITY GROUP THAT'S APPLIED TO EACH EC2 INSTANCE IN THE ASG 
# --------------------------------------------------------------------------------------------------------------------- 
resource "aws_security_group" "instance" { 
    name = "lab-indexer" 
    vpc_id = "${aws_vpc.lab-VPC.id}" 

    # Inbound SSH 
    ingress { 
    from_port = "22" 
    to_port  = "22" 
    protocol = "tcp" 
    cidr_blocks = ["66.196.30.124/32"] 
    } 

    # Outbound All Protocols 
    egress { 
    from_port = "0" 
    to_port  = "0" 
    protocol = "-1" 
    cidr_blocks = ["0.0.0.0/0"] 
    } 

    lifecycle { 
    create_before_destroy = true 
    } 
} 

# --------------------------------------------------------------------------------------------------------------------- 
# CREATE AN ELB TO ROUTE TRAFFIC ACROSS THE AUTO SCALING GROUP 
# --------------------------------------------------------------------------------------------------------------------- 
resource "aws_elb" "lab-indexer-elb" { 
    name    = "lab-asg-indexer" 
    security_groups = ["${aws_security_group.elb.id}"] 
# availability_zones = ["${data.aws_availability_zones.all.names}"] 
    subnets    = ["${aws_subnet.lab-Subnet.id}"] 

    # will work on this later 
    # health_check { 
    # healthy_threshold = 5 
    # unhealthy_threshold = 5 
    # timeout = 3 
    # interval = 30 
    # target = "HTTP:80/" 
    # } 

    # This adds a listener for incoming HTTP requests. 
    listener { 
    lb_port   = 80 
    lb_protocol  = "http" 
    instance_port  = "80" 
    instance_protocol = "http" 
    } 
} 

# --------------------------------------------------------------------------------------------------------------------- 
# CREATE A SECURITY GROUP THAT CONTROLS WHAT TRAFFIC AN GO IN AND OUT OF THE ELB 
# --------------------------------------------------------------------------------------------------------------------- 
resource "aws_security_group" "elb" { 
    name = "lab-indexer-elb" 
    vpc_id = "${aws_vpc.lab-VPC.id}" 

    # Allow all outbound 
    egress { 
    from_port = 0 
    to_port  = 0 
    # -1 is semantically equivalent to "all." So all protocols are allowed 
    protocol = "-1" 
    cidr_blocks = ["0.0.0.0/0"] 
    } 

    # Inbound HTTP from anywhere 
    ingress { 
    from_port = 80 
    to_port  = 80 
    protocol = "tcp" 
    cidr_blocks = ["0.0.0.0/0"] 
    } 
} 
+0

あなたの返信ありがとう!キーペアはそこにありましたが、私はコードのその部分を除外することを選択しました。 起動時のconfig = $ {data.aws_availability_zones.all.names}に関する最初の変更を行いましたが、起動設定がリストではなく1つの値でなければならないというエラーが表示されます。これは、すべての空き領域がリストされているためです。私はこのアプローチをあまり理解していないので、正直言ってここからどこに行くのかはわかりません。 –

+0

私は同じエラーが発生していないので、上記の貼り付けconfig iを使用していますか? –

+1

上記の「EC2インスタンスi-044ff993c34bc237aがELBと同じVPCにない」というエラーを複製することができました。上記の3の解決策を参照してください。設定には他にも問題がありますが、tfファイルを修正してテストしています。上記の貼り付けたものを使用してください。あなたのニーズを並べ替えることができます。それがどうなるか教えてください –

関連する問題