Клонирование API-интерфейса AWS apigateway из существующего apigateway из CLI - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно создать много apis apigateway AWS.Все apis будут использовать лямбда-функцию для вызова.Эти новые API-интерфейсы будут также включать следующие общие шаги:

  • Тип API в качестве регионального и REST API
  • Добавить метод POST
  • Настройки выполнения метода
  • Тип вызова = Лямбда-функция, а также выберите соответствующую Лямбда-функцию.
  • Настройки CORS
  • Лямбда-разрешения
  • Настройки ответа интеграции
  • Развертывание API
  • Включить этап в API Usageplan
  • Повторное развертывание API

Вот описание клона API-интерфейса Apigateway.

SYNOPSIS
            create-rest-api
          --name <value>
          [--description <value>]
          [--clone-from <value>]
          [--binary-media-types <value>]
          [--minimum-compression-size <value>]
          [--api-key-source <value>]
          [--endpoint-configuration <value>]
          [--policy <value>]
          [--api-version <value>]
          [--cli-input-json <value>]
          [--generate-cli-skeleton <value>]

Как клонировать API-интерфейс Apigateway из существующего apigatewayAPI от CLI и избегайте выполнения всех повторных шагов, упомянутых выше.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Вы также можете клонировать из существующего API при создании нового API с помощью консоли.

enter image description here

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

Используйте приведенные ниже команды в качестве сценария оболочки и выполните сценарий с указанными параметрами.Имена параметров не требуют пояснений.

Вот полный сценарий, и каждая часть объяснена.

#!/bin/bash
APINAME=${1}
STAGENAME=${2}
LAMBDANAME=${3}
CLONEAPIID=${4}
USAGEPLANID=${5}
AWS_PROFILE=[PROFILENAME]
AWS_REGION=[AWSREGION]
AWS_ACCOUNT=[AWSACCOUNT]
METHOD=POST

Клонировать API из существующего API

echo "Closing API ${APINAME} from API ${CLONEAPIID}"
RESTAPIID=`aws apigateway create-rest-api --name "${APINAME}" --description "${APINAME}" --clone-from ${CLONEAPIID} --endpoint-configuration '{"types":["REGIONAL"]}' --profile ${AWS_PROFILE} | grep '"id"' | sed 's/,//g;s/ //g;s/"//g;' | awk -F: '{ print $2 }'`

Показать новый Rest APIID

echo RESTAPIID: ${RESTAPIID}

Получение ресурса

echo "Getting Resource"
RESOURCEID=`aws apigateway get-resources --rest-api-id ${RESTAPIID} --profile ${AWS_PROFILE} | grep '"id"' | sed 's/,//g;s/ //g;s/"//g;' | awk -F: '{ print $2 }'`

echo RESOURCEID: ${RESOURCEID}

Установка URI и Lambda в качестве вызова

echo "Setting Lambda ${LAMBDANAME}"
LAMBDA_URL="arn:aws:apigateway:${AWS_REGION}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS_REGION}:${AWS_ACCOUNT}:function:${LAMBDANAME}/invocations"
aws apigateway put-integration --rest-api-id ${RESTAPIID} --resource-id ${RESOURCEID} --http-method ${METHOD} --type AWS --integration-http-method ${METHOD} --uri "${LAMBDA_URL}" --profile ${AWS_PROFILE} | grep uri

Генерация UUID в качестве идентификатора оператора

SID=`uuidgen`

Добавление разрешений для шлюза API для выполнения лямбда-функции

aws lambda add-permission --function-name arn:aws:lambda:${AWS_REGION}:${AWS_ACCOUNT}:function:findPostcode --source-arn arn:aws:execute-api:${AWS_REGION}:${AWS_ACCOUNT}:${RESTAPIID}/*/*/* --principal apigateway.amazonaws.com --action lambda:InvokeFunction --statement-id ${SID} --profile ${AWS_PROFILE}

Настройка ответа интеграции

aws apigateway put-integration-response --rest-api-id ${RESTAPIID} --resource-id ${RESOURCEID} --http-method ${METHOD} --status-code 200 --selection-pattern 200 --response-parameters '{"method.response.header.Access-Control-Allow-Origin": "'"'"'*'"'"'"}' --selection-pattern "" --response-templates '{"application/json": ""}' --profile ${AWS_PROFILE}

Создание начального развертывания

echo "Creating Initial Deployment for ${APINAME} API and Stage ${STAGENAME}"
DEPLOYMENTID=`aws apigateway create-deployment --rest-api-id ${RESTAPIID} --stage-name '' --profile ${AWS_PROFILE} | grep '"id"' | sed 's/,//g;s/ //g;s/"//g;' | awk -F: '{ print $2 }'`

Создание этапа

aws apigateway create-stage --rest-api-id ${RESTAPIID} --stage-name ${STAGENAME} --description ${STAGENAME} --deployment-id ${DEPLOYMENTID} --profile ${AWS_PROFILE} | grep stageName
sleep 10

Добавление этапа API в Usageplan

echo "Adding Stage in Usageplan"
aws apigateway update-usage-plan --usage-plan-id ${USAGEPLANID} --patch-operations op="add",path="/apiStages",value="${RESTAPIID}:${STAGENAME}" --profile ${AWS_PROFILE} | grep name
sleep 10

Повторное развертывание этапа

echo "Redeploying Stage"
aws apigateway create-deployment --rest-api-id ${RESTAPIID} --stage-name ${STAGENAME} --description ${STAGENAME} --profile ${AWS_PROFILE} | grep description
sleep 5
echo "REST API Endpoints configured and deployed successfully.."

Примечание. Надлежащая временная задержка (ожидание) необходима на разных этапах (как указано в секундах командами сна)).

Вот пример выполнения вышеуказанного сценария оболочки (при условии, что имя сценария cloneapi.sh)

./cloneapi.sh MyAPI MyAPIStage MyLambdaFunction apxxxxx upxxxx

Где

MyAPI is New API Name
MyAPIStage is new API Stage Name
MyLambdaFunction  is Lambda Function Name for New API
apxxxxx is the API ID (Cloning from)
upxxxx is Usage Plan ID

Вышеприведенные команды могут бытьиспользуется с любой версией CLI AWS и в любой ОС Linux, но ниже приведен CLIи используемая версия ОС.

aws --version

aws-cli/1.15.80 Python/2.7.14 Linux/4.14.94-89.73.amzn2.x86_64 botocore/1.10.79

cat / etc / os-release

NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
...