aws s3 static website

Aws S3 加上cloudfront,可以直接代替nginx。并且有更高的可用性。于是告诉给架构师这个方案后,就开始配置了。

  1. 开bucket,设置静态托管

image.png

  1. 设置bucket policy,所有资源均为public

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
    "Version": "2012-10-17",
    "Id": "Policy1586756429373",
    "Statement": [
    {
    "Sid": "Stmt1586756xxxx5",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::xxx-speedup/*"
    }
    ]
    }
  2. 开始Cloudfront,限定只允许GET,HEAD 两种method。还有开启Gzip。暂时用最简单的配置。

    image.png

  3. 上传资源到S3

    Jenkins plugin 本有一个S3插件,可是依赖maven 3.5版本,由于现在开发团队在用3.4,于是放弃该插件。

    改用传统的步骤:jenkins执行shell,

    AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEY,就取巧通过参数化构建过程带入吧!恰巧这个插件会将参数设置为环境变量,所以就这么办了。(Pipeline + Credentials会更加优雅)

    注意上传前,自己先gzip一下,因为S3可是不会自动帮你压缩的。当然这个也可以通过event驱动Lambda来优雅实现。

    1
    2
    find ./ -type f -exec gzip "{}" \; -exec mv "{}.gz" "{}" \;
    aws s3 mv ./ s3://xxx-speedup --recursive --exclude ".git/*" --content-encoding "gzip"

    image.png

Author: Chandler Kwok
Link: http://yoursite.com/2020/04/15/aws-s3-static-website/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.