はじめに
前回、AWSブログで公開されていた署名付きアップロード・ダウンロードの構成をAWSマネジメントコンソール画面から構築しましたが、色々と使えそうなので、terraformの勉強も兼ねてterraform化したので公開しようと思います。
元のブログ記事
公開場所
以下GitHubで公開しています。
terraformについて
本terraform
はVPC等を使用していないため、環境に合わせて修正したりしなくても実行できるかと思います。
また、各リソースの名前等は前回の記事で設定している名前に合わせています。
各リソースの名前等はvariables.tf
にまとめているので、環境に合わせて修正してください。
以下、特記事項について示します。
SMS External ID
前回、Cognito
でSMS認証の設定を行いましたが、画面上から行った場合は自動でSMSの外部IDといったIDが設定されますが、terraform
で作成する場合は自分で設定する必要があるようです。
他の外部サービスと連携したりしなければ、意識する必要はないようなので、適当なUUID
を指定しておきます。
以下コマンドでUUIDを生成できるので、生成したIDを入力しておきます。
uuidgen | tr "[:upper:]" "[:lower:]"
S3へのファイルアップロード
aws_s3_object
リソースを使ってS3にファイルをアップロードすると、アップロードしたファイルのContent-Type
がbinary/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
に慣れるのにはちょうどよかったです。
今回の構成をベースに認証方式を変えたりしながら、今後どこかのシステムに導入できれば良いなと感じました。