Hugo博客迁移AWSCloudFront

博客转向Amazon

之前的CDN是由render的cdn托管的,之前的cdn属于fastly,国内访问速度还是可以的,但是最近render将CDN转为free的cloudflare了,那么完全没有了优势,所以将网站转为手动上传到aws的s3,再进行cloudfront托管。

预计流程

1.下架相关域名,

2.更改上传方式,添加ignore将public屏蔽。

chocolate 安装

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

3.添加rclone到系统Path位置,添加s3的秘钥

chocolatey.exe install rclone

4.考虑使用Picgo上传的图床方式,还是硬编码将链接格式不直接用static。而是将网址硬编码进去。

chocolatey.exe install picgo

5.public 写好脚本上传。

6.添加cloudfront,调整流量限流方式,防止被打DDOS。

7.计费项高于3刀时,手动将图片转为自己的VPS图床,使用lysky图床自建。(其他静态资源可以用cdn)

本机配置rclone,aws-cli

按照提示来,

测试:

rclone ls blog.fengidea.com:blog.fengidea.com.1/

rclone sync -P .\public\ blog.fengidea.com:blog.fengidea.com.1/

写脚本到git目录下。

本地配置aws-cli

因为cloudfront 需要缓存刷新,所以需要安装aws-cli,下载位置是

https://awscli.amazonaws.com/AWSCLIV2.msi

下载后安装,配置sk,ak。

aws-cli 报 ssl错误

查找后是代理没有认证可用的证书,需要手动添加证书到环境变量中。

setx AWS_CA_BUNDLE "C:\Program Files\Amazon\AWSCLIV2\awscli\botocore\cacert.pem"

windows下找到对应的ca证书,设置变量,请仔细检查ca位置,不要漏路径。

或者用–no-verify-ssl 命令

 aws s3 ls --no-verify-ssl

可能需要添加代理

setx http_proxy http://127.0.0.1:10809

setx https_proxy http://127.0.0.1:10809

aws s3 ls 测试成功

aws-cli 刷新cloudfront 缓存

失效次数,会进行计费,但是全部刷新/*只会记一次的失效费用。当然s3的流量费另计。

自行更换对应的d-id。

aws cloudfront create-invalidation --distribution-id E3Q0O3D0J34TN6 --paths "/*" 
设置s3 sync cp命令
aws s3 sync .\public\  s3://blog.fengidea.com.1

sync 默认上传修改过的内容,不上传全站

aws s3 cp .\public\  s3://blog.fengidea.com.1/ --recursive

cp强制覆盖全部内容,上传全站。

Amazon配置S3

区域选择

因为要选用cloudfront,利用1T流量,同时防止访问量打在S3上,不选择Hong Kong 节点,而是Japan节点,同时有DDOS防御。

创建同名存储桶。选择ACL为“阻止公有访问”。(公开访问可能会有用户直接访问s3,)

配置静态网页

在存储桶的“属性”选项卡,“静态网站托管”一栏,选择“启用”,同时添加默认“index.html”和错误“404.html”.

配置cloudfront 源

配置cloudfront 证书

需要配置cname确认本人拥有域名

到DNS上配置CNAME验证

基本配置成功

编辑cloudfront源

1.源域选择对应的AWS源。这里选择s3存储桶上的源。

2.源路径默认不写,如果有子文件夹作为源路径,那就要写。

3.使用OAI创建更新存储桶策略,限制只访问Cloudfront.

这里会更新s3存储桶上的Policy策略,限制允许Cloudfront访问。

4.启用源护盾。默认选择东京节点。部分网站会直接访问源护盾。

添加Lambda@Edge关联

5 .Lambda@Edge函数关联 : arn:aws:lambda:us-east-1:676045833814:function:serverlessrepo-standard-r-StandardRedirectsForClou-YMVnvbBHqete:1

这里需要注意,需要末尾加上版本号 :1

函数的目的将所有的无index.html 位置内部定向到index.html。

因为函数会创建IAM权限,所以使用网络上的配置好的cloudformation函数。https://github.com/digital-sailors/standard-redirects-for-cloudfront

在这个页面添加cloudformation https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:621073008195:applications~standard-redirects-for-cloudfront

只有弗吉尼亚北部区域有edge
  1. 通过以下网址登录 AWS Management Console并打开 AWS Lambda 控制台:https://console.aws.amazon.com/lambda/。

    重要

    确保您位于 **US-East-1(弗吉尼亚北部)**区域 (us-east-1)。您必须位于该区域,才能创建 Lambda@Edge 函数。

  2. 在这个页面添加cloudformation https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:621073008195:applications~standard-redirects-for-cloudfront

配置cloudfront 证书

需要配置cname确认本人拥有域名

基本配置成功

配置index.html 的转发

hugo中,默认导向只有根号,没有index.html,需要配置lambda@Edge将所有子文件夹的请求转向到index.html上。

image-20220324222349370

选择cloud formation 创建

https://github.com/digital-sailors/standard-redirects-for-cloudfront

标准重定向,可以创建出IAM函数,注意需要先将Lambda函数区域转到us-east-1,仅这个存在对应Lambda@Edge。

image-20220324222511443

其他备注

arn的使用版本
您可以使用限定的 ARN 或非限定的 ARN 来引用您的 Lambda 函数。
  • 限定的 ARN – 具有版本后缀的函数 ARN。以下示例引用 helloworld 函数的版本 42。

    arn:aws:lambda:aws-region:acct-id:function:helloworld:42
    
  • 非限定的 ARN – 不具有版本后缀的函数 ARN。

    arn:aws:lambda:aws-region:acct-id:function:helloworld
    

Note:不使用HongKong节点

Don’t choose an Amazon S3 bucket in any of the following Regions, because CloudFront doesn’t deliver standard logs to buckets in these Regions:

  • Africa (Cape Town) af-south-1
  • Asia Pacific (Hong Kong) ap-east-1
  • Asia Pacific (Jakarta) ap-southeast-3
  • Europe (Milan) eu-south-1
  • Middle East (Bahrain) me-south-1

Amplify Build

Amplify Build需要付费,说是选择了8G的服务器build,价格比较贵,我就是一个hugo应用没必要使用。

所以还是本地build后转到s3存储桶吧。

image-20220324224900914

CloudFront缓存刷新

由于cloudfront默认缓存是24小时,所以每次上传后需要aws 命令行刷新,或者指定缓存失效,这里需要使用命令行,rclone的方式不行(好伤感)。

Lambda@Edge 定价详情

Lambda@Edge 根据三个因素向您收费:函数调用总数、所需的计算容量和计算持续时间。 Lambda@Edge 针对全球的 CloudFront 事件每开始执行一次响应,就计算一次调用。调用定价为每 100 万次调用 0.60 USD(每次调用 0.0000006 USD)。容量和持续时间按使用的 GB/秒数量一起计算。持续时间从代码开始执行时算起,直到它返回或终止为止。对于所使用的 GB/秒数量,您需要支付 0.00005001 USD。例如,如果您每调用一次 Lambda@Edge 函数即可分配 128MB 的可用内存,那么您的持续时间费用为每使用 128MB/秒收费 0.00000625125 USD。注意,Lambda@Edge 函数的最小计费时间单位为 1ms。Lambda@Edge 目前不提供免费套餐。

被DDos的思路

虽然我们用不了WAF,太贵了,但是我们可以使用SNS报警通知系统,用cloud Function 的触发器设置高流量报警后的工作流,达到每分钟超过一定量之后就关Cloudfront的思路。

同时SNS可以接入aws chatbot,手机自动提醒。nice。

警报的免费层级

image-20220325083043698

博客换到oss的香港如何

17**dfkjgklfdjg** 315 天前阿里云 OSS,基本买个域名( 1 年 10+),OSS 选香港,买个对象存储 OSS 资源包( 2 年才 18 ),然后开通一下免费的 Web 应用托管服务,SSL 证书找个免费的就好。

阿里云的新客没有便宜了

image-20220408092843016

以后各大云厂商也会是现在的情况了。所以huawei云的可以考虑买了,可以做

1.网站

2.nps

3.frp代理

4.卖备案码