programing

Amazon AWS CLI에서 페이로드 매개 변수에 유효한 JSON을 허용하지 않음

telebox 2023. 3. 8. 21:03
반응형

Amazon AWS CLI에서 페이로드 매개 변수에 유효한 JSON을 허용하지 않음

AWS CLI에서 lambda 함수를 호출하려고 하면 오류가 발생합니다.CLI 버전2 를 사용하고 있습니다.합격해야 한다는 것을 알고 있습니다.--payload인수는 JSON 개체를 포함하는 문자열입니다.

aws lambda invoke --function-name testsms  --invocation-type Event --payload '{"key": "test"}' response.json 

다음의 에러가 표시됩니다.

Invalid base64: "{"key": "test"}"

JSON 이스케이프 캐릭터 등 여러 가지 변종을 시도해 보았습니다.또, 이 기능을 사용해 본 적이 있습니다.file://test.jsonoption 같은 에러도 마찬가지입니다.

@MCI가 말했듯이 AWS V2는 기본 64 입력으로 설정됩니다.고객님의 사례를 성공시키려면--cli-binary-format raw-in-base64-out명령어에 대한 매개 변수입니다.

aws lambda invoke --function-name testsms \
    --invocation-type Event \
    --cli-binary-format raw-in-base64-out \
    --payload '{"key": "test"}' response.json

awscli v2에는 base64로 인코딩된 파라미터가 필요한 것 같습니다.

기본적으로 AWS CLI 버전 2는 모든 바이너리 입력 및 바이너리 출력 파라미터를 base64 인코딩 문자열로 전달합니다.바이너리 입력이 필요한 파라미터의 유형은 설명서에서 blob(바이너리 대형 객체)으로 지정되어 있습니다.

payload 파라미터:lamba invoke이 중 하나입니다.blobbase64-syslog 형식이어야 합니다.

--blob(블러브)람다에 제공하려는 JSON이 입력으로 기능합니다.

하나의 솔루션은 openssl base64를 사용하여 payload를 부호화하는 것입니다.

echo '{"key": "test"}' > clear_payload  
openssl base64 -out encoded_payload -in clear_payload
aws lambda invoke --function-name testsms  --invocation-type Event --payload file://~/encoded_payload response.json

첫째, 문자열은 유효한 json입니다.

저 같은 경우에는 이런 문제가 있었습니다.

$ aws --profile diegosasw lambda invoke --function-name lambda-dotnet-function --payload "Just Checking If Everything is OK" out

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Could not parse payload into json: Unrecognized token 'Just': was expecting ('true', 'false' or 'null')
 at [Source: (byte[])"Just Checking If Everything is OK"; line: 1, column: 6]

이 문제는 AWS CLI가 JSON으로 변환하려고 했기 때문입니다.큰따옴표를 피하면 효과가 있었다

$ aws --profile diegosasw lambda invoke --function-name lambda-dotnet-function --payload "\"Just Checking If Everything is OK\"" out
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}

Windows 에서는, 다음의 조작을 실시했습니다만, 효과가 있었습니다.

aws lambda invoke --function-name testsms  --invocation-type Event --cli-binary-format raw-in-base64-out --payload {\"key\": \"test\"} response.json 

주의: 추가--cli-binary-format raw-in-base64-out명령어로 excape "를 사용하여 payload로 \"

이 솔루션은 나에게 효과가 있었고 매번 올바른 플래그가 있는지 man 페이지를 기억하거나 확인하는 것보다 간단하다는 것을 알았습니다.

aws lambda invoke --function-name my_func --payload $(echo "{\"foo\":\"bar\"}" | base64) out

LocalStack을 실행하는 Windows PowerShell에서는 다음을 사용해야 했습니다.

--payload '{\"key\": \"test\"}' response.json

언급URL : https://stackoverflow.com/questions/60310607/amazon-aws-cli-not-allowing-valid-json-in-payload-parameter

반응형