首页 > 解决方案 > Cloudfront createDistribution 上的 InvalidArgument 错误

问题描述

Node.js 版本 v12.16.2

SDK版本号 v2.727.0

当我尝试通过 API 创建新的 Cloudfront 分发时,我收到一条错误消息,指出 MinTTL 是必填字段,但是查看 sdk 文档,它说该属性已被弃用。当我将 MinTTL 放在 DefaultCacheBehaviour 字段上时,它说 ForwardedValues 是必需的,这是另一个不推荐使用的属性。我正在使用 Typescript 执行此操作,所以我也有类型检查告诉我这一切都很好。我还在构造函数上指定了最新的 API 版本。难道我做错了什么?

退货

{
  message: "The parameter MinTTL is required.",
  code: "InvalidArgument",
  statusCode: 400,
}
  import * as AWS from 'aws-sdk';

  constructor() {
    this.cloudfront = new AWS.CloudFront({
      credentials: {
        accessKeyId: awsConfig.accessKeyId,
        secretAccessKey: awsConfig.secretAccessKey,
      },
      region: awsConfig.cloudfront.region,
      signatureVersion: 'v4',
      apiVersion: '2020-05-31',
    });
  }

  public createDistribution(param: ICreateDistributionParam) {
    const { domain, certificateArn } = param;

    const uniqueId = `${domain}${v1()}`;

    return new Promise((resolve, reject) => {
      this.cloudfront.createDistribution(
        {
          DistributionConfig: {
            CallerReference: v1(),
            Enabled: true,
            Comment: `${domain} Production Distribution`,
            Aliases: {
              Quantity: 2,
              Items: [domain, `www.${domain}`],
            },
            Origins: {
              Quantity: 1,
              Items: [
                {
                  Id: uniqueId,
                  DomainName: awsConfig.ec2.prodLoadBalancer,
                  CustomOriginConfig: {
                    // custom origin config data
                  },
                },
              ],
            },
            ViewerCertificate: {
              ACMCertificateArn: certificateArn,
              CloudFrontDefaultCertificate: false,
              SSLSupportMethod: SSLSupportMethod.SNI_ONLY,
              MinimumProtocolVersion: MinimumProtocolVersion.TLSv1_2016,
            },
            DefaultCacheBehavior: {
              TargetOriginId: uniqueId,
              TrustedSigners: {
                Enabled: false,
                Quantity: 0,
              },
              AllowedMethods: {
                Quantity: 7,
                Items: ['GET', 'HEAD', 'OPTIONS', 'PUT', 'PATCH', 'POST', 'DELETE'],
              },
              ViewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
            },
            IsIPV6Enabled: true,
          },
        },
        (err, data) => {
          if (err) {
            return reject(err);
          }

          resolve(data);
        },
      );
    });
  }

我在调用中传递的最终对象是这样的:

{
  DistributionConfig: {
    CallerReference: "3e408c41-d8d6-11ea-b123-177f1e4dc4e3",
    Enabled: true,
    Comment: “teste.com.br Production Distribution",
    Aliases: {
      Quantity: 2,
      Items: [
        "teste.com.br",
        "www.teste.com.br",
      ],
    },
    Origins: {
      Quantity: 1,
      Items: [
        {
          Id: “teste.com.br3e408c40-d8d6-11ea-b123-177f1e4dc4e3",
          DomainName: “my-production-load-balancer-domain-name”,
          CustomOriginConfig: {
            HTTPSPort: 443,
            HTTPPort: 80,
            OriginProtocolPolicy: "http-only",
            OriginReadTimeout: 30,
            OriginKeepaliveTimeout: 5,
          },
        },
      ],
    },
    ViewerCertificate: {
      ACMCertificateArn: "arn:aws:acm:us-east-1:522904521474:certificate/e221dfd8-72b7-4431-b9db-b460fdsds3be9",
      CloudFrontDefaultCertificate: false,
      SSLSupportMethod: "sni-only",
      MinimumProtocolVersion: "TLSv1.1_2016",
    },
    DefaultCacheBehavior: {
      TargetOriginId: “teste.com.br3e408c40-d8d6-11ea-b123-177f1e4dc4e3",
      TrustedSigners: {
        Enabled: false,
        Quantity: 0,
      },
      AllowedMethods: {
        Quantity: 7,
        Items: [
          "GET",
          "HEAD",
          "OPTIONS",
          "PUT",
          "PATCH",
          "POST",
          "DELETE",
        ],
      },
      ViewerProtocolPolicy: "redirect-to-https",
    },
    IsIPV6Enabled: true,
  },
}

标签: javascriptnode.jsamazon-web-servicesamazon-cloudfrontaws-sdk-js

解决方案


推荐阅读