通过CLI从现有apigateway克隆AWS apigateway API

时间:2019-02-01 02:17:10

标签: amazon-web-services aws-api-gateway

我必须创建许多AWS apigateway API。所有API都会使用Lambda函数进行调用。这些新的API也将包括以下常见步骤。

  • API类型为区域和REST API
  • 添加POST方法
  • 方法执行设置
  • 调用类型= Lambda函数,并选择相应的Lambda 功能。
  • CORS设置
  • Lambda权限
  • 集成响应设置
  • 部署API
  • 在API使用计划中包括阶段
  • 重新部署API

这是apigateway克隆API简介。

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>]

如何从CLI的现有apigateway API中克隆apigateway API,并避免执行上述所有重复步骤。

2 个答案:

答案 0 :(得分:0)

使用以下命令作为Shell脚本,并使用上述参数执行脚本。参数名称不言自明。

这是完整的脚本,并解释了每个部分。

#!/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 API ID

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生成为statement-id

SID=`uuidgen`

为API网关添加执行Lambda函数的权限

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

在Usageplan中添加API阶段

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.."

注意:在不同的步骤中需要适当的时间延迟(等待)(如sleep命令以秒为单位)。

这里是执行上述Shell脚本的示例。(假设脚本名称为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

以上命令可用于任何AWS CLI版本和任何Linux OS,但以下是所使用的CLI和OS版本。

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/"

答案 1 :(得分:0)

在通过控制台创建新API时,也可以从现有API克隆。

enter image description here