我正在使用 Docker 在一次性机器 (AWS-ECS) 中部署我的应用程序,将其拆分为用 Node.js 开发的微服务。查看用于获取签名令牌以访问cloudfront资源的API:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront/Signer.html,似乎必须强制将密钥对作为构造函数中的参数传递(初始化)。
我不想包含任何 CloudFront 密钥对,因为这些机器可能会死掉,并且在其中存储任何文件是没有意义的。有没有什么方法可以通过 IAM 策略(例如 CloudFrontFullAccess)向这些计算机授予权限来获取签名令牌?我已经部署了一项服务来获取 S3 签名的 URL,并且不需要使用密钥对,只需使用 IAM 策略即可。
amazon-s3 amazon-web-services amazon-ecs node.js amazon-cloudfront
我有一个网站托管在用 Angular 4 编写的 S3 存储桶上。
我在 Route 53 上有一个指向 CloudFront 分配的 URL,该分配指向 S3 存储桶的 index.html(设置为无缓存)。
在 S3 存储桶中,我有每个版本示例的文件夹:
mywebsite.com
-> v1.0.0
-> pricing.html
-> index.html
Run Code Online (Sandbox Code Playgroud)
在我的index.html 中我有
<base href="/v1.0.0/">
这非常完美,可以转到正确的页面,并且始终获得网站的最新版本,因为 index.html 没有被缓存。
然而,这使我的网址看起来像:
https://www.mywebsite.com/v1.0.0/pricing
如何隐藏 URL 中的“/v1.0.0/”?
CloudFront 通过 CloudFront TTL 设置在源使对象过期与调用 invalidate 之间有什么实际区别?
我部署了一个 lambda,它本身'Access-Control-Allow-Origin': '*'在其响应中返回一个标头。
我从 API 网关调用它。调用API网关URL时,CORS配置即可。
我将 CloudFront 放在 API 前面,但是现在我无法访问 API,因为 CORS 配置似乎被 CloudFront 覆盖,并且我不确定在 CloudFront 中的何处添加自定义标头。
如何在 CloudFront 中启用 CORS?
amazon-web-services amazon-cloudfront aws-lambda aws-api-gateway
我们希望在我们的 AWS 基础设施中使用 Cloudfront。问题是是否可以在 EC2 实例中拥有我们现在使用的相同弹性 IP。或者我们是否必须切换到 Cloudfront IP?
我们在 CloudFront 和 S3 上托管我们的 Web 应用程序。该基础设施是在 Terraform 模块中配置的。我们使用相同的模块(由 Terragrunt 管理)将我们的 Web 应用程序部署到我们的暂存和生产环境。
显然,我们不希望公众访问我们的暂存环境。因此,我们创建了一个 Lambda 函数来启用基本 HTTP 身份验证,并使用资源lambda_function_association内的aws_cloudfront_distribution来启用它。
问题是我们不希望 Lambda 也在我们的生产环境中运行。我无法有条件地设置资源的关联。
我还尝试创建两个具有相同名称的资源并设置属性,count以便仅存在这些资源。
例如
# Basic Auth Guard
resource "aws_cloudfront_distribution" "default" {
count = "${var.behind_auth_guard}"
...
}
# No Basic Auth Guard
resource "aws_cloudfront_distribution" "default" {
count = "${var.behind_auth_guard ? 0 : 1}"
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试部署代码时,我得到了aws_cloudfront_distribution.default: resource repeated multiple times.
有什么办法可以实现我想要的吗?
我考虑过的另一个选择是在两个版本上设置 Lambda,但让它在产品中不执行任何操作。然而,这似乎效率低下且成本高昂,因为每次请求都会调用 Lamdba,并且希望尽可能避免这种情况。
我有一个配置为用作静态网站的 S3 网站,以及一个以 S3 存储桶为源的 Cloudfront 发行版。
我的索引文件被调用index,并且我已将其指定为存储桶配置和 Cloudfront 分发配置中的索引文件。
但是,如果我访问https://example.com/directory/,我会收到如下错误文档,其中 RequestID 和 HostID 在每个请求上都会更改:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>7F09A18821FE70FD</RequestId><HostId>H5OR+AZpNSGlhrUX1ECegTbWkio728A1MIdGkO4bkCZIJa/XQ6Uv7Hu0GgNgyxL+snerPPDnzr8=</HostId></Error>
Run Code Online (Sandbox Code Playgroud)
如果我访问https://example.com/directory/index那么页面会正确显示。
如果我从 cloudfront URL 或 S3 网站端点(而不是我的自定义域)访问网站,则不会出现问题。
访问 S3 存储桶时如何正确提供目录索引页?
因此,我有一个托管在 Elastic Beanstalk 上的 NextJS 应用程序(它在 docker 文件中的端口 3000 上公开)。现在,我已在 Godaddy 注册了域名。我最初在 Godaddy 中设置了指向 Elastic Beanstalk 的 DNS。但后来我想使用 cloudfront 进行 CDN/缓存。
因此,我开始配置 Cloudfront(使用本文)。我创建了自定义 SSL 证书并通过 DNS 对其进行了验证。我将 cloudfront 中的原点设置为指向 ELB。
现在,部署 cloudfront 发行版后,我尝试使用 cloudfront URL xxxxx.cloudfront.net,但出现"504 ERROR - The request could not be satisfied"错误。
如果我访问 ELB URL,我就可以访问我的应用程序。所以,我不确定这里出了什么问题。如果 Cloudfront 指向 ELB 并且 ELB 有效,那么为什么 cloudfront URL 不起作用。
有什么建议/建议吗?
amazon-web-services amazon-cloudfront amazon-elb amazon-elastic-beanstalk
我正在尝试使用 github 操作将静态站点部署到 AWS S3 和 Cloudfront。我的 Github Action 代码是:
name: deploy-container
on:
push:
branches:
- master
paths:
- 'packages/container/**'
defaults:
run:
working-directory: packages/container
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: npm run build
- uses: chrislennon/action-aws-cli@v1.1
- run: aws s3 sync dist s3://${{secrets.AWS_S3_BUCKET_NAME}}/container/latest
env:
AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试构建时出现了这些错误
amazon-s3 amazon-web-services amazon-cloudfront webpack github-actions
我有一个托管在 Amazon S3 存储桶上的 Vue 应用程序。通过带有 http 的 S3 链接访问时,加载效果非常好。当我通过指向 cloudfront 的自定义 SSL 域链接访问该网站时,无法正确提供 javascript。JS 文件可以在浏览器中通过 https 完全访问,但不会在浏览器中执行,给我留下一个空白页面。对于 index.html 中的两个 javascript 链接,我收到以下错误:
无法加载模块脚本:需要 JavaScript 模块脚本,但服务器以 MIME 类型“text/plain”进行响应。根据 HTML 规范对模块脚本强制执行严格的 MIME 类型检查。
另外:我按照此处的说明进行操作:https://levelup.gitconnected.com/deploying-vue-js-to-aws-with-https-and-a-custom-domain-name-3ae1f79fe188
amazon-s3 ×5
aws-lambda ×2
amazon-ecs ×1
amazon-elb ×1
angular ×1
elastic-ip ×1
https ×1
javascript ×1
node.js ×1
terraform ×1
vue.js ×1
webpack ×1