0
0

More than 1 year has passed since last update.

署名付きアップロード・ダウンロードの構成をterraformで作る。

Posted at

はじめに

前回AWSブログで公開されていた署名付きアップロード・ダウンロードの構成をAWSマネジメントコンソール画面から構築しましたが、色々と使えそうなので、terraformの勉強も兼ねてterraform化したので公開しようと思います。

元のブログ記事

公開場所

以下GitHubで公開しています。

terraformについて

terraformはVPC等を使用していないため、環境に合わせて修正したりしなくても実行できるかと思います。

また、各リソースの名前等は前回の記事で設定している名前に合わせています。

各リソースの名前等はvariables.tfにまとめているので、環境に合わせて修正してください。

以下、特記事項について示します。

SMS External ID

前回、CognitoでSMS認証の設定を行いましたが、画面上から行った場合は自動でSMSの外部IDといったIDが設定されますが、terraformで作成する場合は自分で設定する必要があるようです。

他の外部サービスと連携したりしなければ、意識する必要はないようなので、適当なUUIDを指定しておきます。

以下コマンドでUUIDを生成できるので、生成したIDを入力しておきます。

UUIDの生成
uuidgen | tr "[:upper:]" "[:lower:]"

S3へのファイルアップロード

aws_s3_objectリソースを使ってS3にファイルをアップロードすると、アップロードしたファイルのContent-Typebinary/octet-streamとなってしまうことで、アップロード・ダウンロードを行う際にJavaScriptが実行できなくなります。

Terraform Template Directory Moduleを使用して、Content-Typeを付与することで回避しました。

ファイルが更新された場合のアップロード

aws_s3_objectリソースでetagを設定しておくと、ファイルが更新された際にハッシュ値比較して、ファイルが更新されていればアップロードを行うようになるそうです。便利!

terraform apply後のアクセス

OutputでエントランスページのURLを出力するようにしているため、apply後は出力されたURLにアクセスします。

(省略)
Outputs:

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

アクセス時の注意点

terraformで作成すると、数十秒程度で構築できますが、裏でAPI Gateway等のデプロイ作業が行われているので、10分程度は待つようにしましょう。

ページアクセスはできますが、デプロイ途中の場合、アップロード、ダウンロードに失敗します。

おわりに

今回はブログで紹介されていた構成をそのままterraformで作っただけなので、拡張性は考えずmodule等も使用しておりませんが、勉強がてらterraformに慣れるのにはちょうどよかったです。

今回の構成をベースに認証方式を変えたりしながら、今後どこかのシステムに導入できれば良いなと感じました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0