2017-01-03 7 views
1

main.tfに変更を加えることなく、Terraformは既存のセキュリティグループルールを追加します。 Terrafrom新しいルールとしてmain.tfの各SGのルールを識別します(ただし、これらのルールは、前の実行の結果として、AWSに既にある)と私はコマンドを実行するときにそれらを再作成してみてください(terrafrom計画/適用)同じセキュリティグループルールを再作成する "terrafrom apply/plan"を実行するたびに

このテラフォームの出力は、コマンドに

~ module.application_sg.aws_security_group.security_group 
    ingress.#:       "3" => "1" 
    ingress.2358522502.cidr_blocks.#:  "1" => "0" 
    ingress.2358522502.cidr_blocks.0:  "20.0.1.0/24" => "" 
    ingress.2358522502.from_port:   "443" => "0" 
    ingress.2358522502.protocol:   "tcp" => "" 
    ingress.2358522502.security_groups.#: "0" => "0" 
    ingress.2358522502.self:    "false" => "false" 
    ingress.2358522502.to_port:   "443" => "0" 
    ingress.3250959853.cidr_blocks.#:  "1" => "0" 
    ingress.3250959853.cidr_blocks.0:  "20.0.1.0/24" => "" 
    ingress.3250959853.from_port:   "8080" => "0" 
    ingress.3250959853.protocol:   "tcp" => "" 
    ingress.3250959853.security_groups.#: "0" => "0" 
    ingress.3250959853.self:    "false" => "false" 
    ingress.3250959853.to_port:   "8080" => "0" 
    ingress.753360330.cidr_blocks.#:  "0" => "0" 
    ingress.753360330.from_port:   "0" => "0" 
    ingress.753360330.protocol:   "-1" => "-1" 
    ingress.753360330.security_groups.#: "0" => "0" 
    ingress.753360330.self:    "true" => "true" 
    ingress.753360330.to_port:   "0" => "0" 

+ module.rule1.aws_security_group_rule.rule 
    cidr_blocks.#:   "1" 
    cidr_blocks.0:   "20.0.1.0/24" 
    from_port:    "80" 
    protocol:     "tcp" 
    security_group_id:  "sg-17c13770" 
    self:      "false" 
    source_security_group_id: "<computed>" 
    to_port:     "80" 
    type:      "ingress" 

を適用している。このルールは、すでに我々が環境に新しいルールを追加しようとしているとき、これは理解することは非常に困難であるとして、これを避けるために役立つone.Please存在しています。

答えて

1

状態ファイルを確認してください。これは通常、Terraformが変更を適用したが状態ファイルを更新していないときに発生します。

あなたが使用して場所のための状態ファイルに何一覧表示することができます:それは状態ファイルに欠けている場合は、に、既存のリソースをインポートするには、テラフォームのインポートコマンドを使用することができるはず

terraform state list 

以下のようなものを持つ状態ファイル:

terraform import aws_security_group.security_group sg-123456 
+0

しかし、私がterraform refreshコマンドを実行すると、変更は検出されません。これは、terraform状態ファイルと実際のインフラストラクチャが同じであることを意味します。 しかし、私がterraform applyまたはpalnを実行すると、以前のテラフォーム実行の結果として既に存在するセキュリティグループルールを追加しようとします。私が本当に新しいルールを追加したいとき、私は誤解や見つけにくい本当に新しく追加されたルールを教えてください – UtpMahesh

+0

状態ファイルを見ると、それはまったく表示されますか?リフレッシュは、管理しているリソース(TFによって構築され、TFの外で変更されたELBの構成など)のリソースのTerraformのビューのみを更新します。それが状態ファイルに全くない場合、リフレッシュは役に立ちません。 – ydaetskcoR

0

aws_security_groupオブジェクトに入口/出口ルールを入れないでください。ルールを管理するにはaws_security_group_ruleを使用してください。

例えば、

resource "aws_security_group" "my-secret-group" { 
    name = "my-secret-group" 
    vpc_id = "vpc-12345678" 
} 

resource "aws_security_group_rule" "ssh-external-to-node" { 
    type = "ingress" 
    security_group_id = "${aws_security_group.my-secret-group.id}" 
    from_port = 22 
    to_port = 22 
    protocol = "tcp" 
    cidr_blocks = ["0.0.0.0/0"] 
} 

resource "aws_security_group_rule" "http-external-to-node" { 
    type = "ingress" 
    security_group_id = "${aws_security_group.my-secret-group.id}" 
    from_port = 80 
    to_port = 80 
    protocol = "tcp" 
    cidr_blocks = ["0.0.0.0/0"] 
} 
関連する問題