2016-11-22 5 views
2

私はterraformを使ってawsラムダ関数を実装しようとします。data.archive_fileがTerraformのzipsフォルダの前にコマンドを実行するには?

ローカルプロビジョニングを持つnull_resourceと、すべての準備が完了した後にソースコードを圧縮するresource.archive_fileがあります。

resource "null_resource" "deps" { 

    triggers = { 
    package_json = "${base64sha256(file("${path.module}/src/package.json"))}" 
    } 

    provisioner "local-exec" { 
    command = "cd ${path.module}/src && npm install" 
    } 
} 

resource "archive_file" "function" { 
    type = "zip" 
    source_dir = "${path.module}/src" 
    output_path = "${path.module}/function.zip" 

    depends_on = [ "null_resource.deps" ] 
} 

最近の変更はresource.archive_fileを非推奨テラフォームするために、そうdata.archive_fileを代わりに使用してください。残念ながら、dataはリソースより前に実行されるため、zipが作成された後は従属リソースからのローカルプロビジョーがウェイと呼ばれます。だから、コードはもはや警告を生成しませんが、まったく動作しません。

resource "null_resource" "deps" { 

    triggers = { 
    package_json = "${base64sha256(file("${path.module}/src/package.json"))}" 
    } 

    provisioner "local-exec" { 
    command = "cd ${path.module}/src && npm install" 
    } 
} 

data "archive_file" "function" { 
    type = "zip" 
    source_dir = "${path.module}/src" 
    output_path = "${path.module}/function.zip" 

    depends_on = [ "null_resource.deps" ] 
} 

私に何かが不足していますか?最近のバージョンでこれを行う正しい方法は何ですか?

テラフォーム:v0.7.11 OS:Win10

+0

私はあなたが正しいと思うし、Terraformだけではできません。 –

答えて

1

あなたが外部コマンドを実行し、出力を抽出することができますテラフォーム0.8、externalの新しいデータソースがあります。 data.external

データソースは、一部だけdepedency値の検索に使用することは、npm installのない実行が、あなたはまだそれを経由してnull_resourceを行う必要があります必要があります参照してください。これはTerraformのデータソースなので、副作用があってはいけません(この場合はいくつか必要かもしれませんが、わかりません)。

だから基本的には、null_resourcedata.externalは、アーカイブ(例えば、ディレクトリ・パス)のために依存することができ、いくつかの値をつかみ、依存関係を行い、その後、data.archive_fileは、アーカイブを実行します。

これは恐らく疑似乱数のディレクトリ名を使用すると効果的ですが、ダーティーチェックを少しでもうまく機能させることができます。