7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AtraeAdvent Calendar 2017

Day 18

AWS CodeBuild で Rails アプリケーションの docker build

Last updated at Posted at 2017-12-17

業務で、Rails アプリケーションの docker buildAWS CodeBuild で行なっており、assets:precompile 時に assets を Amazon S3 にアップロードしています。
その際に、AWS CodeBuild サービスロールで全てを行うために設定したことをまとめます。

結論

  • Asset Sync では、 aws_iam_roles: Yes で設定する。
  • docker build 時に AWS CodeBuild のコンテナの環境設定変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI を参照する。

前提

  • Rails アプリケーションを Docker で運用している。
  • assets:precompile 時に Asset Sync を利用して assets を Amazon S3 にアップロードしている。
  • docker build は、AWS CodeBuild で実行している。

詳細

Asset Sync の設定

Asset Sync では、 README に書かれているように、 IAM ロール を利用すればアクセスキーを設定する必要はありません。
具体的には、こちらfog-aws に設定が引き渡されています。

config.rb#L197-L200
if aws_iam?
    options.merge!({
        :use_iam_profile => true
    })

docker build 時の環境設定変数

上記の設定により、fog-aws では、 こちら にて認証情報を取得しています。

credential_fetcher.rb#L16
if options[:use_iam_profile]

さらにコードを読むと以下のような条件が存在します。

credential_fetcher.rb#L21
if ENV["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"]

AWS のコンテナ (CodeBuild) では、インスタンスのメタデータ取得先が Amazon EC2 とは異なります。そのため、上記の環境設定変数の参照が必要となっています。

docker build で変数を利用したい場合は、 ARG を利用します。こちらの値を assets:precompile の際に参照させるようにしてください。

ARG AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

最終的に、 AWS CodeBuild で利用する buildspec.yml の docker build の部分は、以下のようになります。

buildspec.yml
build:
    commands:
      - |
        docker build -t app \
        --build-arg AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI} \
        .

参考

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?