はじめに
本稿ではAssumeRoleによる自動クレデンシャル取得を利用したS3アップロードの方法をご紹介します。
基本的には以下の記事の手法をコマンドに落とし込んだだけです。
(すべてを理解しているわけではないので無駄なコード等あるかもしれません!)
AWS CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました! | Developers.IO
Gulpを用いたS3アップロード
普段の業務で、サーバーサイドの動的な要素がないサイトの公開をする方法として、S3にまるまる一式アップロード、という方法を使うことがあります。
GulpでS3アップロードを実行する場合、以下の辺りのnpmが有名なものとして挙げられます。
gulp-awspublish
gulp-s3-upload
仕事でも、一時期前まではgulp-awspublishを利用していたのですが、
最近社内でのAWSの運用方針が変わり、
Node.jsで可能なACCESS KEYとSECRET ACCESS KEYだけで認証する方法が使えなくなってしまいました。
参考: AssumeRole が面倒な人向け簡易 shell script - Qiita
実装
冒頭で紹介したページでは、 ~/.aws/config
に role_arn
の記述をして、 aws --profile (プロフィール名)
のようにオプションをつければ、Assume
Roleによる自動クレデンシャル取得でのawsコマンド実行が可能になります。
なお、awsのコマンドを事前にインストールする必要ありです。
aws cli install mac - Qiita
[profile sample-site]
# 111122223333
role_arn = arn:aws:iam::111122223333:role/role-name
source_profile = default
[default]
output = json
region = us-west-2
[default]
aws_access_key_id = AKIAXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
aws --profile sample-site s3 sync ../../public s3://site.example.com/ --delete --acl public-read --cache-control 'no-cache'
これをNode.jsで実行するには、ルートディレクトリーで package.json
に以下のような script
を記述することで、 npm run publish
というコマンドを叩けばS3にアップロードできます。
参考: aws s3へフォルダ毎でダウンロードとアップロードする方法| prophet STAFF BLOG
参考: AWS S3のCLI(コマンドラインインターフェース)を試してみる | もふもふ技術部
{
"name": "sample-site",
"version": "0.0.1",
"description": "SAMPLE SITE",
"main": "gulpfile.js",
"engines": {
"node": ">=5.0.0"
},
"scripts": {
"start": "gulp",
"serve": "gulp serve",
"build": "gulp build",
"publish": "aws --profile sample-site s3 sync ../../public s3://site.example.com/ --delete --acl public-read --cache-control 'no-cache'"
},
...
}
最終的に、Gulpコマンドではないものの、Node.jsでS3アップロードすることができました。