0

動作する API ゲートウェイを作成しました。https://example-api.amazonaws.com/Prod/some/endpointAPIによってエンドポイントを手動でトリガーすると、望ましい結果が得られます。また、パスに/api/*.

クラウドフロント ディストリビューションを介してエンドポイントにアクセスするhttps://xxxxxxx.cloudfront.net/some/endpointと、404 エラーが発生します。Cloudfront は /prod をパスに正しく追加します。これは、少なくとも何かが機能していることを示しています。

より具体的には、次のようになります。

404 Not Found
Code: NoSuchKey
Message: The specified key does not exist.
An Error Occurred While Attempting to Retrieve a Custom Error Document

正しくリダイレ​​クトされるため、クラウドフロント ディストリビューションが機能していることがわかります。私はしばらくこれに苦労してきました。このエラー コードは役に立たないほどあいまいですか?

さらに掘り下げた後、クラウドフロントディストリビューションが私のs3でキーを持つオブジェクトを探しているようです。そのため、何らかの理由でPathPattern: /api/v1/*が にリダイレクトされませんAPIOrigin

Cloudformation テンプレートを以下に添付しました。

Resources:
  WebsiteCloudfront:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Comment: Cloudfront Distribution pointing to S3 bucket and API Gateway.
        Origins:
          - Id: S3Origin
            DomainName: bucket-for-static-files.amazonaws.com
            CustomOriginConfig:
              HTTPPort: 80
              HTTPSPort: 443
              OriginProtocolPolicy: http-only
          - Id: APIOrigin
            DomainName: example.api.endpoint.amazonaws.com
            OriginPath: /prod
            CustomOriginConfig:
              # HTTPPort: 80
              HTTPSPort: 443
              OriginProtocolPolicy: https-only
              OriginSSLProtocols:
                - TLSv1.2
        Enabled: true
        HttpVersion: 'http2'
        DefaultRootObject: index.html
        Aliases:
          - !Ref DomainName
        DefaultCacheBehavior:
          AllowedMethods:
            - DELETE
            - GET
            - HEAD
            - OPTIONS
            - PATCH
            - POST
            - PUT
          Compress: true
          # Logging: Logging
          TargetOriginId: S3Origin
          ForwardedValues:
            QueryString: true
            Cookies:
              Forward: none
          ViewerProtocolPolicy: redirect-to-https
        CacheBehaviors:
          - TargetOriginId: APIOrigin
            ViewerProtocolPolicy: https-only
            PathPattern: /api/v1/*
            ForwardedValues:
              QueryString: true
              Headers:
                - Host
            AllowedMethods:
              - DELETE
              - GET
              - HEAD
              - OPTIONS
              - PATCH
              - POST
              - PUT
        PriceClass: PriceClass_All
        ViewerCertificate:
          AcmCertificateArn: arn:aws:acm:SOME_HARD_CODED_ARN
          SslSupportMethod: sni-only
          MinimumProtocolVersion: TLSv1.2_2019

ただし、クラウドフロントディストリビューションが/prod. pathPattern が API Gateway に正しくルーティングされているかのように見せかけます。

編集:現在、API ゲートウェイのヘッダーが欠落している可能性があると考えています。

4

0 に答える 0