Невозможно передать значение списка в метод обновления apigateway, получая недопустимый тип для параметра patchOperations [2] .value - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь обновить метод authorizationScopes значением списка, используя следующую команду:

aws apigateway update-method --rest-api-id xxxxxxxxxx --resource-id yyyyy --http-method ANY \
--patch-operations "op=replace,path=/authorizationType,value=COGNITO_USER_POOLS" "op=replace,path=/authorizerId,value=zzzzz" \
"op=replace,path=/authorizationScopes,value=app-identifier/token,app-identifier/personProfile"

, но получил эту ошибку:

Parameter validation failed:
Invalid type for parameter patchOperations[2].value, 
value: [u'app-identifier/token', u'app-identifier/personProfile'],
 type: <type 'list'>, valid types: <type 'basestring'>

Также попробуйте эту команду с[]:

aws apigateway update-method --rest-api-id xxxxxxxxxx --resource-id yyyyy --http-method ANY \
--patch-operations "op=replace,path=/authorizationType,value=COGNITO_USER_POOLS" "op=replace,path=/authorizerId,value=zzzzz" \
"op=replace,path=/authorizationScopes,value=[app-identifier/token,app-identifier/personProfile]"

, но также получая ту же ошибку, что и выше.

Если я установлю ее вручную из консоли и получу ее из этой команды: aws apigateway get-method --rest-api-id xxxxxxx --resource-id yyyy --http-method ANY

дайте мне этот вывод:

{
    "apiKeyRequired": false,
    "httpMethod": "ANY",
    "methodIntegration": {
        "passthroughBehavior": "WHEN_NO_MATCH",
        "timeoutInMillis": 29000,
        "requestParameters": {},
        "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:111111:function:app:${stageVariables.ENV}/invocations",
        "httpMethod": "POST",
        "requestTemplates": {},
        "cacheNamespace": "xxxx",
        "type": "AWS_PROXY",
        "cacheKeyParameters": []
    },
    "authorizationScopes": [
        "app-identifier/token",
        "app-identifier/personProfile"
    ],
    "authorizationType": "COGNITO_USER_POOLS",
    "authorizerId": "yyyyy"
}

ограничение awscli или я передаю его неверным образом

Ссылка: https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html

1 Ответ

0 голосов
/ 22 февраля 2019

Я фанат синтаксиса JSON, поэтому я думаю, что вы можете решить свои проблемы простым способом.Таким образом, вы можете создать файл с именем sample-update.json со следующим содержимым:

    {
        "restApiId": "xxxxxxxxxx",
        "resourceId": "yyyyy",
        "httpMethod": "ANY",
        "patchOperations": [
            {
                "op": "replace",
                "path": "/authorizationType",
                "value": "COGNITO_USER_POOLS",
                "from": "anything_you_like_or_ignore"
            },
            {
                "op": "replace",
                "path": "/authorizerId",
                "value": "zzzzz",
                "from": "anything_you_like2_or_ignore"
            }
        ]
    }

Затем выполните строку;

aws apigateway update-method --cli-input-json file://sample-update.json

Я считаю, что это упрощает вашу проблему ичтобы продолжить с другой задачей :).В качестве альтернативы, если вы предпочитаете не использовать JSON, вы можете запустить следующий эквивалент:

aws apigateway update-method \
    --rest-api-id xxxxxxxxxx \
    --resource-id yyyyy \
    --http-method ANY \
    --patch-operations \ 
    "op=replace,path=/authorizationType,value=COGNITO_USER_POOLS,from=anything" \ 
    "op=replace,path=/authorizerId,value=zzzzz,from=anything" 

Что касается / authorizationScope, вы не можете выполнять операции замены над ними.Я пропустил это первый раз, отвечая на ваш вопрос.См. API-интерфейс шлюза

...