CircleCI

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

More than 1 year has 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/

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