Posted at

CircleCIからS3にアップロードするための設定

More than 3 years have passed since last update.


About

CicleCIでbuildしたものをmasterにマージした際にS3の特定のバケットにアップロードしたかったので調べました。


AWSのIAM設定

不要な権限を渡したくなかったので、aws s3 cpで特定のバケット全体にアップロードする権限を絞りました。

{

"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::sample*"
}
]
}

今回の検証の範囲では"PutObject"だけで問題ありませんでした。ListObjectないとダメという噂も見かけたのですが、バケットを指定してやるぶんには問題ないみたいでした。

sampleの後の*がキモでこれがないとエラーになったので、要注意です。


CircleCIの設定


事前設定

CircleCIのProject settingsより、AWS Permissionsを選択肢、アクセス情報を設定します。


circle.yml


circle.yml

machine:

timezone:
Asia/Tokyo

dependencies:
pre:
- sudo pip install awscli
post:
- touch application-`date +"%Y-%m%d-%I-%M-%S"` && mv application-* $CIRCLE_ARTIFACTS

deployment:
master:
branch: master
commands:
- sh script/upload-s3.sh


dependenciesや`testの中で作成した成果物がある場合は、それを$CIRCLE_ARIFACTSにおくことで、deploymentタスクにてその成果物をアップロードすることができます。中身は適当です。


script/upload-s3.sh

#!/bin/bash

aws s3 cp $CIRCLE_ARTIFACTS/application* $S3_BUCKET/assets/


これを動かすとアップロードできました。