Terraformでlocal-execコマンドを使用してシェルスクリプトを実行しようとしています。これを実行すると、エラー"Can't open appsettings.sh"
が発生し続けます。このスクリプトは、手動で実行すると正常に実行されます。私が見逃しているアイデアはありますか?
resource "null_resource" "sp" {
triggers = {
Shell_hash = "${sha256(file("${path.module}/appsettings.sh"))}"
}
provisioner "local-exec" {
command = "appsettings.sh ${azuread_application.rbac-server-principal.application_id} ${azuread_application.rbac-client-principal.application_id}"
interpreter = ["sh"]
working_dir = "${path.module}"
}
}
エラーメッセージ:
Error: Error running command 'appsettings.sh 59942507-xxxx-xxxx-xxxxx 4c64-xxxx-xxxx-xxxxx': exit status 127. Output: sh: 0: Can't open appsettings.sh 59942507-xxxx-xxxx-xxxxx 4c64-xxxx-xxxx-xxxxx'
ここでの問題は、terraformが次のようにコマンドを実行することです。
["/bin/sh" "-c" "appsettings.sh arg1 arg2"]
したがって、コマンドインタープリターはappsettings.shをコマンド名として受け取ります。これは、以下のように実行するのと非常に似ています。
$appsettings.sh arg1 arg2
このようなコマンドがないため、これは実行できません。そのため、そのシェルスクリプトを実行するには、以下に示すように、シェルスクリプトの絶対パスまたは相対パスを指定する必要があります。
$ ./appsettings.h
$ /home/user/appsettings.sh # Example
これを達成するには、コマンド属性を次のように再配置します
command = "./appsettings.sh ${azuread_application.rbac-server-principal.application_id} ${azuread_application.rbac-client-principal.application_id}"
OR
command = "${path.module}/appsettings.sh ${azuread_application.rbac-server-principal.application_id} ${azuread_application.rbac-client-principal.application_id}"
つまり、追加./ appsettings
エラーメッセージは、スクリプトファイルを「開けない」ことを示しています。その理由は次のとおりです。
プログラム(Teraformやスクリプトなど)を介してコマンドを実行している場合は、シェルまたは適切なパスを指定する必要があります。例:
/bin/sh /path/to/script/myscript.sh
or
/bin/bash /path/to/script/myscript.sh
よくわかりませんが、local-exec
は、ls、echo、mkdirなどのローカルコマンドを実行するために使用され、remote-exec
はスクリプトの実行に使用されます。私はまだこれを使用していませんprovisioner
が、これを試してみることができます。
参考文献: https://www.terraform.io/docs/provisioners/local-exec.html