使用Terraform构建带有签名的上传和下载配置

首先

我以前在AWS博客上发布的署名上传和下载配置已经在AWS管理控制台上进行了构建,但因为它似乎有很多使用的可能性,所以我决定将其转化为terraform并进行公开,也是为了学习terraform。

    【前】API Gateway、Cognito、Lambda、S3を使って署名付きアップロード・ダウンロードを実装する。

原始博客文章

    AWS のサーバーレスと Amazon S3 署名付き URL、クライアントサイド JavaScript で大きなサイズの複数ファイルの一括アップロード・ダウンロード機能を実現する方法

公共场所

这些内容已在GitHub上公开发布。

    https://github.com/sakai00kou/qiita

关于Terraform

由于本 terraform 使用了 VPC 等功能,无需根据环境进行修改即可执行。

另外,每个资源的名称等都按照上一篇文章中设定的名称进行调整。

请根据环境进行相应修改,因为每个资源的名称等信息都在variables.tf文件中统一保存。

我将针对以下重要事项进行说明。

短信外部标识

上次,我們在Cognito中進行了短信驗證的設置,但是如果從畫面上執行,系統會自動設置外部短信ID等識別ID,但如果使用terraform創建,可能需要手動設置這些ID。

如果不需要与其他外部服务进行协作,就没有必要去关注这一点,只需要选取一个适当的UUID并指定即可。

因为可以使用以下命令生成UUID,所以请先输入生成的ID。

uuidgen | tr "[:upper:]" "[:lower:]"

将文件上传至S3。

使用aws_s3_object资源将文件上传到S3时,上传的文件的Content-Type将变为binary/octet-stream,这会导致JavaScript无法在上传和下载过程中执行。

我们通过使用Terraform模板目录模块并添加Content-Type来避免了这个问题。

如果文件有更新,则进行上传。

据说,通过在 aws_s3_object 资源中设置 etag,当文件发生更新时会进行哈希值比较,如果文件已经更新,则会执行上传操作。非常方便!

terraform apply后的访问

由于在输出功能中设置了入口页面的URL,所以在申请后将访问输出的URL。

(省略)
Outputs:

Entrance_Page_URL = "https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/web/entrance.html"

访问时的注意事项

使用Terraform创建时,可以在几十秒内完成构建,但由于会进行API Gateway等部署工作,建议等待大约10分钟。

页面可以访问,但如果在部署过程中,上传和下载将会失败。

最后

这次只是按照博客介绍的方式使用terraform进行了配置,没有考虑扩展性,也没有使用模块等。但正好作为学习,熟悉terraform非常合适。

我觉得能够在今后的某个系统中引入基于这次构建的认证方式会很好,同时也可以进行一些改变。

广告
将在 10 秒后关闭
bannerAds