AWSJSONpackerHashicorpHCL

`packer hcl2_upgrade` を実行し生成された `.pkr.hcl` ファイルに `"template: hcl2_upgrade:3: unexpected \"\\\\\" in operand"` が出力された

はじめに

Packer の v1.7.0 から Packer template の記述方法として JSON ではなく HCL2 を利用することが推奨されています。 JSON で記述された Packer template を HCL2 形式に変換する hcl2_upgrade コマンドを実行し生成された .pkr.hcl ファイルに、 "template: hcl2_upgrade:3: unexpected \"\\\\\" in operand" が出力されたときの対処法を記載します。

対処方法

今回はエスケープに利用している \" (escaped quote) が原因でうまく JSON をパース出来ていませんでした。 \" (escaped quote) を "`" (backtick) に変更することでこの問題を回避することが出来ます。

Before

下記のように定義された JSON ファイルに対して packer hcl2_upgrade を実行すると...

{
  "builders": [{
    "type": "amazon-ebs",
    ...
    "ami_name": "ami_name-{{isotime \"2006-01-02-15-04-MST\"| clean_resource_name}}"
  }],
}

下記のような .pkr.hcl ファイルが生成されます。

# could not parse template for following block: "template: hcl2_upgrade:3: unexpected \"\\\\\" in operand"

source "amazon-ebs" "autogenerated_1" {
  ami_name      = "ami_name-{{isotime \"2006-01-02-15-04-MST\"| clean_resource_name}}"

After

記述を変更し packer hcl2_upgrade を実行すると...

{
  "builders": [{
    "type": "amazon-ebs",
    ...
    "ami_name": "ami_name-{{isotime `2006-01-02-15-04-MST`| clean_resource_name}}"
  }],
}

"template: hcl2_upgrade:3: unexpected \"\\\\\" in operand".pkr.hcl ファイル内に出力されずに意図した形式 (legacy_isotime) を利用した .pkr.hcl ファイルが出力されます。

source "amazon-ebs" "autogenerated_1" {
  ami_name      = "ami_name-{{ clean_resource_name `${legacy_isotime("2006-01-02-15-04-MST")}` }}"

References