More than 1 year has passed since last update.

はじめに

本稿では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/configrole_arn の記述をして、 aws --profile (プロフィール名) のようにオプションをつければ、Assume
Roleによる自動クレデンシャル取得でのawsコマンド実行が可能になります。

なお、awsのコマンドを事前にインストールする必要ありです。
aws cli install mac - Qiita

~/.aws/config
[profile sample-site]
# 111122223333
role_arn = arn:aws:iam::111122223333:role/role-name
source_profile = default
[default]
output = json
region = us-west-2
~/.aws/credentials
[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(コマンドラインインターフェース)を試してみる | もふもふ技術部

package.json
{
  "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アップロードすることができました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.