繁体   English   中英

Cloudfront UpdateDistribution 操作因 ServiceUnavailable 而失败

[英]Cloudfront UpdateDistribution operation failing with ServiceUnavailable

我正在尝试使用 Boto3 将 Origin 和 Behaviors 添加到现有的 CloudFront 分配,但它失败并出现以下错误,还添加了重试。 我尝试使用独立脚本和 CloudFormation 自定义资源,但都失败了。 之前在这里报告的相同问题: https://github.com/aws/aws-cdk/issues/15891#issuecomment-1243756855 ,有什么解决方法可以解决这个问题吗?

Traceback (most recent call last):
  File "/Users/test/Desktop/cf_test/test.py", line 194, in <module>
    create_origin_and_behavior(config)
  File "/Users/test/Desktop/cf_test/test.py", line 159, in create_origin_and_behavior
    cloudfront.update_distribution(
  File "/usr/local/lib/python3.10/site-packages/botocore/client.py", line 514, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python3.10/site-packages/botocore/client.py", line 938, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ServiceUnavailable) when calling the UpdateDistribution operation (reached max retries: 4): CloudFront encountered an internal error. Please try again.

这是脚本:

#!/usr/bin/python
import boto3

cloudfront = boto3.client('cloudfront')
response_data = {}


def create_origin_and_behavior(config):
    distribution_config_response = cloudfront.get_distribution_config(Id=config['DistributionId'])
    distribution_config = distribution_config_response['DistributionConfig']
    distribution_etag = distribution_config_response['ETag']

    origin = {
        # 'Id': config['StackName'],
        'Id': "new-test",
        # 'DomainName': config['MediaPackageEgressHlsDomainName'],
        'DomainName': '3423434234.mediapackage.us-west-2.amazonaws.com',
        'OriginPath': '',
        'CustomOriginConfig': {
            'HTTPPort': 80,
            'HTTPSPort': 443,
            'OriginProtocolPolicy': 'match-viewer',
            'OriginReadTimeout': 30,
            'OriginSslProtocols': {
                'Quantity': 1,
                'Items': [
                    'TLSv1.2'
                ]
            },
            'OriginKeepaliveTimeout': 5
        },
        'CustomHeaders': {
            'Quantity': 1,
            'Items': [
                {
                    'HeaderName': "X-MediaPackage-CDNIdentifier",
                    # 'HeaderValue': config['MediaPackageCDNIdentifier']
                    'HeaderValue': '23423-3242'
                }
            ]
        }
    }
    distribution_config['Origins']['Items'].append(origin)
    distribution_config['Origins']['Quantity'] += 1

    vtt_path_behavior = {
        # 'PathPattern': config['MediaPackageEgressHlsPath'].replace("index.m3u8", "*.vtt"),
        'PathPattern': "out/v1/test/*.vtt",
        # 'TargetOriginId': config['StackName'],
        'TargetOriginId': 'new-test',
        'Compress': False,
        'ViewerProtocolPolicy': 'redirect-to-https',
        'SmoothStreaming': False,
        'AllowedMethods': {
            'Quantity': 2,
            'Items': [
                'GET', 'HEAD'
            ],
            'CachedMethods': {
                'Quantity': 2,
                'Items': [
                    'GET', 'HEAD'
                ],
            }
        },
        'TrustedSigners': {
            'Enabled': True,
            'Quantity': 1,
            'Items': [
                # config['Account']
                '2343243242'
            ]
        },
        'ForwardedValues': {
            'Headers': {
                'Quantity': 3,
                'Items': [
                    'Origin', 'Access-Control-Request-Method', 'Access-Control-Request-Headers'
                ]
            },
            'QueryString': True,
            'QueryStringCacheKeys': {
                'Quantity': 3,
                'Items': [
                    "m", "start", "end"
                ]
            },
            'Cookies': {
                'Forward': 'none'
            }
        },
        'MinTTL': 0,
        'DefaultTTL': 86400,
        'MaxTTL': 31536000,
        # 'ResponseHeadersPolicyId': config['ResponseHeadersPolicyId'],
        'ResponseHeadersPolicyId': '2423423',
        'LambdaFunctionAssociations': {
            'Quantity': 1,
            'Items': [
                {
                    # 'LambdaFunctionARN': config['OriginResponseEdgeFunctionARN'],
                    'LambdaFunctionARN': 'arn:aws:lambda:us-east-1:2345235235:function:test:1',
                    'EventType': 'origin-response'
                }
            ]
        },
        'FieldLevelEncryptionId': ""
    }

    if distribution_config['CacheBehaviors']['Quantity'] == 0:
        distribution_config['CacheBehaviors']['Items'] = []

    distribution_config['CacheBehaviors']['Items'].append(vtt_path_behavior)
    distribution_config['CacheBehaviors']['Quantity'] += 1

    cloudfront.update_distribution(
        DistributionConfig=distribution_config,
        Id=config['DistributionId'],
        IfMatch=distribution_etag)

    print('Mediapackage Egress Cloudfront input create completed for stack {} '.format(config['StackName']))

    # response_data['DistributionId'] = config['DistributionId']
    # response_data['StackName'] = config['StackName']

    response_data['DistributionId'] = 'test'
    response_data['StackName'] = 'new-test'

    return response_data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM