2017-10-16 3 views
1

terraform実行環境の公開IPを特定し、それをawsセキュリティグループインバウンドに追加して他の環境からのアクセスを防止します。terraform実行環境のパブリックIPを特定してセキュリティグループに追加したい

現在、私はvariables.tfファイルの値を手動で編集しています。私はローカルホスト上の「カールifconfig.co」コマンドを実行し、自動的に結果

に基づいてセキュリティグループを設定したい

variables.tf

variable public_ip_address { 
    default  = "xx" 
} 

はする方法はありますそんなことをする?

local-execの結果を変数 に入れてやることができますが、どうやってそれを行うのか分かりません。

私の質問をお読みいただきありがとうございます。

答えて

0

私が思い付く最もエレガントな解決策は、「外部データソース」プロバイダを使用することです。 https://www.terraform.io/docs/providers/external/data_source.html

これは、人々がlocal-exec、null-resourceおよびvarsを組み合わせてローカルに何かを注入する目的で作成されたものです。

とにかく、小さなスクリプトを書くことなくこれを行うことができます。これは、JSONの読み込みを想定している「外部データソース」です。だから私の例では、私はちょうどプログラムのJSON文字列を構築し、そのプログラムを呼び出します。

data "external" "example" { 
    program = ["sh", "test.sh" ] 
} 

output "commandout" { 
    value = "${data.external.example.result}" 
} 

ここに私のシェルスクリプト(test.sh)である:私はここに私のmain.tfファイルがされて...

これはエコーやJQを使用して1つのライナーで行うことができると確信しています技術的には

#!/bin/bash 

echo {\"ip\":\""`hostname -I`"\"} 

あなたが使用することができます。このような状況たら:あなたのvar入力として

${data.external.example.result} 

を。

ここでは、terraformの出力を使った私の動作例です。あなたが唯一のNICを持っている場合hostname -Iは、そうでない場合は、代替コマンドを使用するか、ご希望の結果の出力をカット:) OKであることを

data.external.example: Refreshing state... 

Apply complete! Resources: 0 added, 0 changed, 0 destroyed. 

Outputs: 

commandout = { 
    ip = 10.0.2.15 
} 

注意。

+0

awesome !! main.tfに関する質問があります main.tfはterraformで初めて実行されますか? main.tfで定義された設定をどこでも使用できますか? – sukho

+0

テラフォームは* .tfをワークスペースにロードするため、現在のワークスペースで値を入手するか、リモートデータでインポートする必要があります。 –

+0

@AnshuPrateek私の新しい質問が見えますか?私は基本的な問題をまだ解決していない。リンクはこちらですhttps://stackoverflow.com/questions/47311916/how-to-put-in-varable-tf-to-run-script-with-data-external-in-terraform – sukho

関連する問題