【问题标题】:Cloning an AWS apigateway API from existing apigateway from CLI从 CLI 的现有 apigateway 克隆 AWS apigateway API
【发布时间】:2019-06-25 14:04:25
【问题描述】:

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

  • API 类型为区域和 REST API
  • 添加 POST 方法
  • 方法执行设置
  • Invocation Type=Lambda Function 并选择各自的 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,并避免执行上述所有重复步骤。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      使用以下命令作为 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 生成为语句 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.."
      

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

      这里是执行上述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 操作系统,但以下是使用的 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/"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 2023-01-11
        • 2018-01-09
        • 2021-06-19
        • 2018-01-07
        相关资源
        最近更新 更多