2016-11-22 43 views
2

我嘗試使用terraform實現aws lambda函數。如何在data.archive_file之前運行命令zip文件夾在Terraform中?

我只是有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" ] 
} 

最近發生的變化對terraform棄用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" ] 
} 

我錯過了什麼嗎?用最新版本做這件事的正確方法是什麼?

Terraform:v0.7.11 OS:Win10

+0

我認爲你是對的,不可能只使用Terraform。 –

回答

1

有一個在Terraform 0.8,external一個新的數據源,其可以運行外部命令並提取輸出。見data.external

數據源應用於一些depedency值的檢索,而不是npm install的執行,你還是應該做到這一點通過null_resource。由於這是一個Terraform數據源,它不應該有任何副作用(儘管在這種情況下你可能需要一些,不確定)。

因此,基本上,null_resource會執行相關操作,data.external會抓取一些您可以依賴的歸檔文件(例如目錄路徑),然後data.archive_file執行歸檔操作。

這可能最適合僞隨機目錄名稱,可能會使骯髒的檢查工作變得更簡潔。

相關問題