gpt4 book ai didi

amazon-web-services - 在 Amazon CloudFront 中为特定文件类型添加内容类型?

转载 作者:行者123 更新时间:2023-12-04 23:17:10 25 4
gpt4 key购买 nike

我有一个 S3 存储桶,我正在使用 CloudFront 提供服务。我想从中提供一些 JSON 文件。

开箱即用,CF 响应不包含任何 Content-Type这种文件类型的头文件。该文件只是由浏览器作为任何常规文件下载。但是,我希望它有一个正确的 mime 类型标题:Content-Type: application/json .

我知道,我可以在 S3 中手动为任何单个文件设置自定义 header ,但是,是否可以为特定文件扩展名指定一些规则以将特定 HTTP header 添加到 Amazon CloudFront 的响应中?

最佳答案

如果您无法控制如何将对象上传到您的 S3 存储桶,您可以使用 Lambda@Edge覆盖响应头的函数如下:

(这种方法的缺点是它会增加延迟并产生额外的成本)

  • 创建将在下一步中附加到您的 lambda 函数角色的 IAM 策略:
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "StatementForCloudWatchLogs",
    "Effect": "Allow",
    "Action": [
    "logs:CreateLogGroup",
    "logs:CreateLogStream",
    "logs:PutLogEvents"
    ],
    "Resource": "*"
    },
    {
    "Sid": "StatementForLambdaFunction",
    "Effect": "Allow",
    "Action": [
    "lambda:EnableReplication",
    "lambda:GetFunction"
    ],
    "Resource": [
    "arn:aws:lambda:us-east-1:{YOUR_ACCOUNT_ID}:function:{FUNCTION_NAME}:{FUNCTION_VERSION}"
    ]
    },
    {
    "Sid": "StatementForIAMServiceLinkedRoles",
    "Effect": "Allow",
    "Action": [
    "iam:CreateServiceLinkedRole"
    ],
    "Resource": "arn:aws:iam::{YOUR_ACCOUNT_ID}:role/*"
    },
    {
    "Sid": "StatementForCloudFrontDistributions",
    "Effect": "Allow",
    "Action": [
    "cloudfront:CreateDistribution",
    "cloudfront:UpdateDistribution"
    ],
    "Resource": "*"
    }
    ]
    }
  • 为 lambda 创建一个新的 AWS 服务 IAM 角色并将您在步骤 1 中创建的策略附加到它。在 下信任关系 ,确保两者都有; lambda.amazonaws.comedgelambda.amazonaws.com作为受信任的实体。
  • 创建您的 lambda 函数,然后发布新版本(在 操作 下)。您必须使用 nodejs6.10 运行时属性创建函数:
    'use strict';

    exports.handler = (event, context, callback) => {
    const response = event.Records[0].cf.response;

    if (response.status === '200') {
    response.headers['content-type'] = [{
    'value': 'application/json', // <-- Your desired content type.
    'key': 'Content-Type'
    }];
    }

    callback(null, response);
    };
  • 为 CloudFront 分配中的 json 文件创建一个新行为(例如 path/to/your/json/*.json )并确保它位于 Default (*) 之上行为。
  • 下Lambda 函数关联 对于新创建的行为,选择 来源回复 事件类型并输入在步骤 3 中创建的 lambda 函数的 ARN。例如:arn:aws:lambda:us-east-1:{YOUR_ACCOUNT_ID}:function:{FUNCTION_NAME}:{FUNCTION_VERSION} . ( 注意 :您的 lambda 函数必须在美国东部(弗吉尼亚北部)区域创建,并且函数 ARN 必须具有编号版本,而不是 $LATEST 或别名)。
  • 为您的 path/to/your/json/* 创建 CloudFront 失效文件。

  • 请务必阅读 Requirements and Restrictions on Lambda Functions .

    另见 Lambda Event Structure了解更多信息。

    关于amazon-web-services - 在 Amazon CloudFront 中为特定文件类型添加内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37307132/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com