【问题标题】:Deploying imgproxy to AWS with Fargate使用 Fargate 将 imgproxy 部署到 AWS
【发布时间】:2020-12-24 19:06:54
【问题描述】:

我想使用 Fargateimgproxy 部署到 AWS,以提供来自 s3 存储桶的不同大小/格式的图像。理想情况下也在 Cloudfront 后面。

Imgproxy 有一个docker image

docker pull darthsim/imgproxy:latest
docker run -p 8080:8080 -it darthsim/imgproxy

来自 s3 的服务是 supported,例如:

docker run -p 8080:8080 -e AWS_ACCESS_KEY_ID=XXXX -e AWS_SECRET_ACCESS_KEY=YYYYYYXXX -e IMGPROXY_USE_S3=true -e IMGPROXY_S3_REGION=us-east-1  -it darthsim/imgproxy

使用 Fargate 部署

我关注Fargate wizard并选择了“自定义”

容器

我如下设置容器。使用 imgproxy Docker 镜像和映射端口 8080,我认为是它通常运行的那个?

在高级部分,我将command设置为

docker run -p 8080:8080 -e IMGPROXY_USE_S3=true -e IMGPROXY_S3_REGION=us-east-1  -it darthsim/imgproxy

任务

我将其保留为默认值:

服务

对于服务,我选择使用负载均衡器:

结果

等待启动完成后,我去负载均衡器复制DNS name

http://.us-east-1.elb.amazonaws.com:8080/

但我得到了503 Service Temporarily Unavailable

任务似乎启动失败

Status reason   CannotStartContainerError: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "docker run -p 8080:8080 -e IMGPROXY_USE_S3=true -e IMGPROXY_S3_REGION=us-east-1 -it darthsim/imgproxy": st
Entry point ["docker run -p 8080:8080 -e IMGPROXY_USE_S3=true -e IMGPROXY_S3_REGION=us-east-1 -it darthsim/imgproxy"]
Command ["docker run -p 8080:8080 -e IMGPROXY_USE_S3=true -e IMGPROXY_S3_REGION=us-east-1 -it darthsim/imgproxy"]

帮助

我最初想弄清楚如何以基本形式部署它,也许我需要对 IAM 角色做更多事情,所以它不需要 AWS 凭据?也许配置中的某些内容不正确?

那么我也想弄清楚如何将云前端带入图片中。

【问题讨论】:

    标签: amazon-web-services docker amazon-s3 aws-fargate imgproxy


    【解决方案1】:

    事实证明我过于复杂了。

    CMDENTRYPOINT 可以留空。

    然后我简单地设置环境变量:

    AWS_ACCESS_KEY_ID   
    AWS_SECRET_ACCESS_KEY   
    IMGPROXY_S3_REGION
    IMGPROXY_USE_S3 true
    

    在等待任务从PENDINGRUNNING 之后,我可以去复制负载均衡器的DNS 名称,然后会看到imgproxy“hello”页面。

    IAM 角色与信用

    我没有通过任务的 IAM 角色来完成这项工作。我尝试赋予ecsTaskExecutionRole s3 读取权限,但在容器环境中没有AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 的情况下,imgproxy 抱怨缺少凭据。

    最后,我刚刚创建了一个具有 s3 策略的用户,允许对相关 s3 存储桶进行读取访问,并将 id 和访问密钥复制到上述环境中。

    如果有人知道如何让 IAM 角色发挥作用,那就太好了。

    云端

    这只是将 cloudfront 源设置为集群的负载平衡器并将其 http 端口设置为 8080 以匹配 imgproxy 的情况。

    签名网址

    只需要在环境变量中添加以下内容

    IMGPROXY_KEY
    IMGPROXY_SALT
    

    它们可以使用echo $(xxd -g 2 -l 64 -p /dev/random | tr -d '\n') 生成。

    设置这些后,简单的/insecure URL 将不起作用。

    在 Python 中,可以生成签名的 url from the imgproxy example code。请注意,这里第 11 行的 url 应该是图像的 s3 url,例如“s3://somebucket/art/1.png”。并且您需要将密钥和盐替换为 ECS 环境中的十六进制编码。

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 2020-12-04
      • 1970-01-01
      • 2021-01-24
      • 2018-09-24
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2021-03-29
      相关资源
      最近更新 更多