Я создал строку JSON с помощью шаблона / интерполяции. Мне нужно передать это в local-exe c, который, в свою очередь, использует шаблон Powershell для вызова CLI.
Первоначально я пытался просто сослаться на шаблон json в самой команде Powershell
--cli-input-json file://lfsetup.tpl
.. однако шаблон не интерполируется.
Затем я попытался установить json на локальный. Однако это многострочный интерфейс, и это не нравится CLI. Может быть, если бы я мог преобразовать в одну строку?
Любые предложения или рекомендации приветствуются !! Спасибо
JSON (.tpl или переменная)
{
"CatalogId": "${account_id}",
"DataLakeSettings": {
"DataLakeAdmins": [
{
"DataLakePrincipalIdentifier": "arn:aws:iam::${account_id}:role/Role1"
},
{
"DataLakePrincipalIdentifier": "arn:aws:iam::${account_id}:role/Role2"
}
],
"CreateDatabaseDefaultPermissions": [],
"CreateTableDefaultPermissions": []
}
}
.tf
locals {
assume_role_arn = "arn:aws:iam::${local.account_id}:role/role_to_assume"
lf_json_settings = templatefile("${path.module}/lfsetup.tpl", { account_id = local.account_id})
cli_region = "region"
}
resource "null_resource" "settings" {
provisioner "local-exec" {
command = templatefile("${path.module}/scripts/settings.ps1", { role_arn = local.assume_role_arn, json_settings = local.lf_json_settings, region = local.cli_region})
interpreter = ["pwsh", "-Command"]
}
}
.ps
$ErrorActionPreference = "Stop"
$json = aws sts assume-role --role-arn ${role_arn} --role-session-name sessionname
$accessTokens = ConvertFrom-Json (-join $json)
$env:AWS_ACCESS_KEY_ID = $accessTokens.Credentials.AccessKeyId
$env:AWS_SECRET_ACCESS_KEY = $accessTokens.Credentials.SecretAccessKey
$env:AWS_SESSION_TOKEN = $accessTokens.Credentials.SessionToken
aws lakeformation put-data-lake-settings --cli-input-json file://lfsetup.tpl --region ${region}
$env:AWS_ACCESS_KEY_ID = ""
$env:AWS_SECRET_ACCESS_KEY = ""
$env:AWS_SESSION_TOKEN = ""
Вывод: Для это я поместил вывод шаблона в локальный и передал локальный в PowerShell. Затем сделал вариации с / out jsonencde и попытался заменить '\ n'. Странные результаты в некоторых случаях: введите описание изображения здесь