在AWS CDK中请求验证

我通过cdk和typescript启用请求验证的工作没有奏效。在解决了一些已知的环境总线问题之后,我得出了以下结论:

  const req = new apiGateway.RequestValidator(this, lambdaName, {
    restApi: this._api,
    requestValidatorName: lambdaName,
    validateRequestBody: false,
    validateRequestParameters: true
  });
  // this._methodOptions.requestValidator = {},
  this._methodOptions.requestValidator = req;

我收到的错误是TypeError: Cannot read property 'children' of undefined

TypeError: Cannot read property 'children' of undefined
    at synthNestedAssemblies (proj\cdk\node_modules\@aws-cdk\core\lib\private\synthesis.ts:50:33)
    at synthNestedAssemblies (proj\cdk\node_modules\@aws-cdk\core\lib\private\synthesis.ts:54:7)
    at synthNestedAssemblies (proj\cdk\node_modules\@aws-cdk\core\lib\private\synthesis.ts:54:7)
    at synthNestedAssemblies (proj\cdk\node_modules\@aws-cdk\core\lib\private\synthesis.ts:54:7)
    at Object.synthesize (proj\cdk\node_modules\@aws-cdk\core\lib\private\synthesis.ts:14:3)
    at App.synth (proj\cdk\node_modules\@aws-cdk\core\lib\stage.ts:188:23)
    at process.App.process.once (proj\cdk\node_modules\@aws-cdk\core\lib\app.ts:123:45)
    at Object.onceWrapper (events.js:277:13)
    at process.emit (events.js:189:13)
    at process.EventEmitter.emit (domain.js:441:20)

我怀疑仍然存在一些问题。任何人都知道如何使它工作吗?

编辑:添加有关如何建立_methodOptions的信息

  private _reqValidatorQueryStrHeaders: apiGateway.RequestValidator;


  // Create validators to use in method options
  private _initValidators() {
    this._reqValidatorAll = this._api.addRequestValidator("validate-request-all", {
      requestValidatorName: "req-validator-all",
      validateRequestBody: true,
      validateRequestParameters: true,
    });

    this._reqValidatorBody = this._api.addRequestValidator("validate-request-body", {
      requestValidatorName: "req-validator-body",
      validateRequestBody: true,
      validateRequestParameters: true,
    });

    this._reqValidatorQueryStrHeaders = this._api.addRequestValidator("validate-request-query-etc", {
      requestValidatorName: "req-validator-query-and-headers",
      validateRequestBody: true,
      validateRequestParameters: true,
    });
  }

 private _initDefMethodOptions(uniqueId: string) {
    this._defMethodOptions = {

  // Method Request Quadrant:
  // ------------------------
    
    // Cognito Auth
      authorizer: {authorizerId: this._auth.ref},
      authorizationType: apiGateway.AuthorizationType.COGNITO,

    // Request Validation - works *with* requestParameters & requestModels 
      requestValidator: {
        Name: uniqueId 
      },
      requestParameters: {
        'method.request.querystring.unused': false // required True
      },

      // apiKeyRequired: false,
  
  // Method Response Quadrant:
  // ------------------------
      methodResponses: [
        {
          // Successful response from the integration
          statusCode: '200',
          // Define what parameters are allowed or not
          responseParameters: {
            'method.response.header.Access-Control-Allow-Origin': true,
            // 'method.response.header.Content-Type': true,
            // 'method.response.header.Access-Control-Allow-Credentials': true // don't need this with cognito credentials...
          },
          // // Validate the schema on the response
          // responseModels: {
          //   'application/json': responseModel
          // }
        },
        {
          // Same thing for the error responses
          statusCode: '400',
          responseParameters: {    //is this necessary with the api wide default set above?         
            'method.response.header.Access-Control-Allow-Origin': true,
          //   'method.response.header.Content-Type': true,
          //   'method.response.header.Access-Control-Allow-Credentials': true
          },
          // responseModels: {
          //   'application/json': errorResponseModel
          // }
        },
        {
          statusCode: '403',
          responseParameters: {
            'method.response.header.Access-Control-Allow-Origin': true,
          },
        },
        {
          statusCode: '500',
          responseParameters: {
            'method.response.header.Access-Control-Allow-Origin': true,
          },
        }
      ]
    };
    return this._defMethodOptions;
  }


  /* In other function */
  this._methodOptions = this._initDefMethodOptions(lambdaName);
  let queryList : string[] = options.reqParams;
    if (typeof (queryList) !== "undefined") {
      // this._methodOptions.requestValidator = { Name: lambdaName };                      // does nothing. Wrong class. 
      // this._methodOptions.requestValidator = this._getRequestValidator(lambdaName);  // crashes!


      // Using the fix from answer: 
      this._methodOptions.requestValidator = this._reqValidatorQueryStrHeaders;
Balu vyamajala

我们可以将验证器传递给“方法选项”。

/**
 * Basic Rest Api
 */
const myRestApi = new apigateway.RestApi(this, "rest-api", {});

/**
 * A Validator
 */
const myValidator = myRestApi.addRequestValidator("validate-request", {
  requestValidatorName: "my-request-validator",
  validateRequestBody: true,
  validateRequestParameters: true,
});

/**
 * Simple Method attaching the validator.
 */
const postMethod = myRestApi.root.addMethod(
  "POST",
  new apigw.MockIntegration(),
  {
    requestValidator: myValidator,
  }
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在AWS CDK中请求验证

来自分类Dev

限制AWS CDK中的AppSync权限

来自分类Dev

AWS Lambda验证来自Slack的请求

来自分类Dev

AWS Lambda中的HTTP请求

来自分类Dev

如何在AWS CDK中创建侦听器规则?

来自分类Dev

AWS CDK如何在IAM策略中包含主体?

来自分类Dev

无法使用python在AWS CDK中写入策略文档

来自分类Dev

如何将AWS CDK打包到Lambda层中?

来自分类Dev

我可以在AWS CDK中复制DependsOn行为吗?

来自分类Dev

AWS CDK中的VPC和cfnVPC有什么区别?

来自分类Dev

如何在CDK(AWS)中获取api密钥的值

来自分类Dev

AWS Lambda中的Python请求超时

来自分类Dev

控制HTTP请求在AWS中的去向

来自分类Dev

Python 中的 AWS IoT HTTP POST 请求?

来自分类Dev

验证AWS中ebs卷的加密

来自分类Dev

JavaScript 中的 AWS 身份验证

来自分类Dev

无法在 AWS 中验证或上传 CloudFormation 模板

来自分类Dev

如何使用AWS Cognito从移动到AWS服务(即CloudSearch)发出经过身份验证的请求?

来自分类Dev

AWS ssh请求密码

来自分类Dev

AWS证书请求失败

来自分类Dev

对 AWS Lambda 的并发请求

来自分类Dev

AWS Glue 中的 AWS 区域

来自分类Dev

AWS签名,编码,验证

来自分类Dev

“ -e”是什么意思。在AWS CDK中的requirements.txt中?

来自分类Dev

AWS CDK应用程序如何“参考”已创建的aws lambda函数(而不在堆栈中创建新的函数)?

来自分类Dev

错误:“条件必须由供应商提供。” 在AWS CDK中创建角色的说明

来自分类Dev

AWS CDK如何覆盖自动伸缩组中的默认启动配置?

来自分类Dev

如何在AWS CDK创建的Python Lambda函数中安装外部模块?

来自分类Dev

如何将AWS CDK中的``any''传递给存储桶策略

Related 相关文章

热门标签

归档