GitLab-CIでAWSローカル環境を使ったテストを行う



Page content


AWS環境に接続する実装のテストを行う際、ローカルにAWS環境を再現する便利なツールがある。

これをGitLab-CIで使う際、servicesのparameterで簡単にDocker環境を準備でき便利。


Localstackを使う

Localstackは、AWS各種サービスのモックフレームを提供するツールで、料金を気にせずテストや動作確認ができる。

CIでは、以下のDocker imageを利用。

  • localstack/localstack

    my_aws_test:
    services:
    - localstack/localstack:0.12.8
    variables:
    DYNAMODB_ENDPOINT: http:localstack-locakstack:4566
    S3_ENDPOINT: http:localstack-locakstack:4566
    script:
    - cd aws && pytest test ...

portは指定できず、imageのデフォルトを使う。
最近のバージョンだとサービスを問わずport 4566で接続できそう。


DynamodDB Localを使う

DynamoDB Localは、Amazon DynamoDBのモックツール。

Localstacldと比べるとパフォーマンスも良さそうで、DynamoDBだけを使うならこちらを採用したいところ。

以下のDocker imageを利用。安心の公式提供。

  • amazon/dynamodb-local

    my_dynamodb_test:
    services:
    - amazon/dynamodb-local:1.15.0
    variables:
    DYNAMODB_ENDPOINT: http:amazon-dynamodb-local:8000
    script:
    - aws dynamodb create-table --endpoint-url $DYNAMODB_ENDPOINT --table-name my-table ...
    - cd dynamodb && pytest test ...

portはデフォルト (8000)を使う。


fake-s3を使う

fake-s3はS3のモックツール。

以下のDocker imageを利用。

  • lphoward/fake-s3

    my_s3_test:
    services:
    - lphoward/fake-s3:14.04
    variables:
    S3_ENDPOINT: http:lphoward-fake-s3:4569
    script:
    - aws s3 mb --endpoint-url $S3_ENDPOINT s3://my-bucket
    - cd s3 && pytest test ...

portはデフォルト (現状4569)を使う。

なお、fake-s3に対してlist objectsの操作をする場合は注意点がある。