json構文で二重引用符を含むAWS CLIコマンドを渡すことはできません。

json構文で二重引用符を含むAWS CLIコマンドを渡すことはできません。

以下のスクリプトを使用していますが、Secret Managerで資格情報を取得できないため、構文エラーが発生します。 「ユーザー名」:「入力したアクセスキーのAWS CLIコマンド」、「パスワード」:「入力したキーのAWS CLIコマンド」。誰かが助けることができれば良いでしょう。

#!/bin/bash

# Send the POST request and capture the response
response=$(curl -k \
-H "Content-Type: application/json" \
-X POST \
-d \
'{
"username":"'aws secretsmanager get-secret-value --region ap-south-1 --secret-id poc | jq --raw-output '.SecretString' | jq -r '.Access_Key''",
"password":"'aws secretsmanager get-secret-value --region ap-south-1 --secret-id poc | jq --raw-output '.SecretString' | jq -r '.Secret_Key''"
}' \
https://<region>/api/v1/authenticate)

答え1

どうすればいいですか?シェルを使うここに文書があります:

#!/bin/bash

username=$(aws secretsmanager get-secret-value ... | jq '...')
password=$(aws secretsmanager get-secret-value ... | jq '...')
anotherVariable=foobar

# Send the POST request and capture the response
response=$(
    curl -k \
        -H "Content-Type: application/json" \
        https://<region>/api/v1/authenticate
        -d @/dev/stdin <<EOF
        {
            "username": $username,
            "password": $password,
            "anotherKey": "$anotherVariable"

        }
EOF
)

-X POST使用には必要ありません-d


慣れたら、jq@Kusalanandaの回答を選択または混合してみてください。そうでなければ、慣れていない場合jq

答え2

ペイロードデータの参照に問題があり、これらのコマンドパイプラインは自動的には実行されません。

代わりに、まずJSONペイロード文書を準備してから、準備されたcurlデータで呼び出すことを検討してください。

#!/bin/sh

# Prepare JSON payload containing username and password.
payload=$(
        aws secretsmanager get-secret-value --region ap-south-1 --secret-id poc |
        jq '.SecretString | fromjson | {username: .Access_Key, password: .Secret_Key}'
)

# Submit the payload to the API and capture the response.
response=$(
        curl --silent \
                -H 'Content-Type: application/json' \
                -d "$payload" \
                "https://{{region}}/api/v1/authenticate"
)

複数のデータを JSON オブジェクトに一度にインポートできるため、AWS 認証情報を取得するにはaws+ 呼び出しを一度だけ行うことができます。キー値は埋め込みJSONオブジェクトであるため、埋め込みフィールドにアクセスする前に式でそれをデコードします。jqjqSecretStringfromjsonjq

関連情報