1. ホーム
  2. linux

[解決済み] Terraform - ローカルexecで複数のコマンドを実行できない

2022-02-14 10:03:33

質問

Terraformの世界に入ったばかりです。Terraformを使ってシェルスクリプトを実行しようとしています。

以下は、main.tf ファイルです。

#Executing shell script via Null Resource

resource "null_resource" "install_istio" {
 provisioner "local-exec" {
    command = <<EOT
      "chmod +x install-istio.sh"
      "./install-istio.sh"
    EOT
    interpreter = ["/bin/bash", "-c"]
    working_dir = "${path.module}"
  }
}

以下は、install-istio.shを実行するために必要なファイルです。

#!/bin/sh

# Download and install the Istio istioctl client binary

# Specify the Istio version that will be leveraged throughout these instructions
ISTIO_VERSION=1.7.3

curl -sL "https://github.com/istio/istio/releases/download/$ISTIO_VERSION/istioctl-$ISTIO_VERSION-linux-amd64.tar.gz" | tar xz

sudo mv ./istioctl /usr/local/bin/istioctl
sudo chmod +x /usr/local/bin/istioctl

# Install the Istio Operator on EKS
istioctl operator init

# The Istio Operator is installed into the istio-operator namespace. Query the namespace.
kubectl get all -n istio-operator

# Install Istio components
istioctl profile dump default

# Create the istio-system namespace and deploy the Istio Operator Spec to that namespace.
kubectl create ns istio-system
kubectl apply -f istio-eks.yaml

# Validate the Istio installation
kubectl get all -n istio-system


以下のような警告が表示されるのですが。

Warning: Interpolation-only expressions are deprecated
  on .terraform/modules/istio_module/Istio-Operator/main.tf line 10, in resource "null_resource" "install_istio":
  10:     working_dir = "${path.module}"
Terraform 0.11 and earlier required all non-constant expressions to be
provided via interpolation syntax, but this pattern is now deprecated. To
silence this warning, remove the "${ sequence from the start and the }"
sequence from the end of this expression, leaving just the inner expression.
Template interpolation syntax is still used to construct strings from
expressions when the template includes multiple interpolation sequences or a
mixture of literal strings and interpolations. This deprecation applies only
to templates that consist entirely of a single interpolation sequence.

main.tfにある上記のスクリプトは、バックグラウンドでコマンドを実行します。

どなたか、足りない部分を教えてください。また、どうすれば警告メッセージを消すことができますか?

あなたの助けに感謝します、ありがとうございます

解決方法は?

実は関係ない2つのことが起きていると思うのですが。

ここでの主な問題点は local-exec スクリプトを作成します。

    command = <<EOT
      "chmod +x install-istio.sh"
      "./install-istio.sh"
    EOT

これが以下のようなシェルスクリプトになって実行されます。

"chmod +x install-istio.sh"
"./install-istio.sh"

最初のコマンドラインを引用符で囲むことで、あなたはシェルに対して、次のようなプログラムを実行しようとするよう指示しています。 chmod +x install-istio.sh 引数なしで。つまり、シェルは実行ファイルをあなたの PATH と呼ばれる chmod +x install-istio.sh という名前のコマンドを実行しようとするのではなく chmod を引数として指定することができます。

コマンドラインを囲む引用符を削除すると、このようになります。どちらのコマンドも引用符で囲む必要があるような特殊な文字を含んでいないため、引用符は必要ではありません。

    command = <<-EOT
      chmod +x install-istio.sh
      ./install-istio.sh
    EOT


補間のみの式に関する警告メッセージは、これらのコマンドの実行の問題とは無関係です。これは、後方互換性のためにまだサポートされているが、もはや推奨されないレガシー構文を使用したことを告げているのです。

この記事を書いている時点で Terraform の最新版 (v0.15 以降) を使っているなら、このモジュールディレクトリに移動して、このような警告を解決できるかもしれません。 terraform fmt これは、設定を更新して期待されるスタイル規約に一致させるためのコマンドです。

あるいは、このコマンドで自動的に更新される内容を手動で変更することもできます。 path.module :

    working_dir = path.module