MinIOをGithub Actionsで利用してみる

MinIOを触ってみた」という記事を書いてから、MinIOをなんかで利用できないかな〜と考えていた。 そんで「GitHub ActionsでMinIOを動かせれば、S3のAPIを利用したアプリケーションのCI/CDで役立つんじゃね?」と思ったので試してみることにした。

MinIOサーバを立てるためのコンテナがDocker Hubにあった

適当にぐぐってみると、同じことを考えている人はいるみたいで、すでにGitHub Actionsで利用することを想定したコンテナが作られていた。 ありがたや〜。

wktk/minio-server

というわけでこれを使うことにする。 Docker Hubを見ながらyamlを書くだけですんなり動いた。

Dockerfileを見ると最新のminioのコンテナを起動するという素直な内容なので、 minioのコンテナをつかってyamldocker runコマンドをベタ書きしても動くはず。 でもせっかく用意されているものがあるのなら使ってみようってことで。

aws-cliを利用してMinIO Serverにリクエストを投げてみる

Actions上でMinIO ServerにPUT/GETができるかも確認しておきたいところ。 ubuntu-latestならaws-cliが最初から入ってたりしないかな〜とおもって、ダメ元でyamlを書いたら実行できた。 というわけで最初から入ってるaws-cliを使うことにした。

GitHub Actionsでaws-cliを使うときの注意点

runで実行するコマンドを表現して、envにAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを指定すれば動くだろうと思ってたどそんなことはなかった。

f:id:rsym1290:20210423212127p:plain

調べてみて引っかかった記事がこれ。

GitHub Actions の AWS CLI がエラーで失敗するようになった場合の原因と対策

AWS_DEFAULT_REGIONAWS_EC2_METADATA_DISABLED: trueも明示する必要があるらしい。 そのとおりに書いたらこのエラーは解消した。

完成品

諸々を経て出来上がったコードがこちら。

name: minio-on-github-actions
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      AWS_DEFAULT_REGION: us-east-1
      AWS_EC2_METADATA_DISABLED: true
    services:
      minio:
        image: wktk/minio-server
        ports:
          - 9000:9000
        env:
          MINIO_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }}
          MINIO_SECRET_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    steps:
      - name: Add 127.0.0.1 minio to /etc/hosts
        run: echo "127.0.0.1 minio" | sudo tee -a /etc/hosts
      - name: make bucket
        run: aws --endpoint-url http://minio:9000/ s3 mb s3://sample-bucket
      - name: put object
        run: echo "sample-key" | aws --endpoint-url http://minio:9000/ s3 cp - s3://sample-bucket/sample/key
      - name: list objects
        run: aws --endpoint-url http://minio:9000/ s3 ls s3://sample-bucket/ --recursive

Actionsのログはこちら。 ちゃんとMinIO Serverが利用できていそう。

f:id:rsym1290:20210423212848p:plain

さいごに

MinIOをGitHub Actionsで活用してみた。MinIOではなくS3をGithub Actionsで利用する場合、バケットやIAMユーザを用意する必要があるだろう。 でもMinIOならそういうのを省いて手軽に利用できるところは大きなメリットだと思った。

今回はaws-cliを併用して検証したけど、 endpoint-urlを明示しておけばAWS SDK for Rubyなどの各APIでも利用できるはず。 自分もS3のAPIを利用できる(だいぶ雑に作った)簡易CLIを作ってるからそのテストで利用しようかな〜。