0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[AWS]CodeBuild エージェント&dindを利用した場合のVolumeの扱い

Last updated at Posted at 2024-02-04

目的

AWSを利用した開発をする場合、localstackの利用するケースが多いと思います。
UnitTestもそのままlocalstackを利用できれば、より本番環境に近いテストができます。
ということで、やりたかったことは以下のようなもの。

pic1.png

そして、実際の業務の開発では、実環境で動作する前にローカルで確認したいことも多いとおもいます。
この構成をローカルで実行する場合は、一癖あるから注意してね、というのが本記事の趣旨とします。

前提

AWS CodeBuildをローカルで実行する環境は公式から公開されており、この手順でローカル実行を行っています。

実環境との差異

以下のようなdocker-compose.ymlを使ったとします。

docker-compose.yml
version: '3.8'
services:
  app:
    container_name: unittest
    build:
      context: .
      dockerfile: Dockerfile
    working_dir: /workspace
    volumes:
      - ./:/workspace
    depends_on:
      - "aws"    
    network_mode: service:aws
    command: >
      sh -c "
      cd /workspace/local-template &&
      sh deploy.sh &&
      cd /workspace &&
      chmod +x gradlew &&
      ./gradlew test      
      "

  aws:
    container_name: localstack
    image: public.ecr.aws/localstack/localstack:latest
    ports:
      - "4566:4566"
buildspec.yml
version: 0.2

phases:
  pre_build:
    commands:
      - docker-compose build

  build:
    commands:
      - docker-compose run app

  post_build:
    commands:
      - docker-compose down

これらは実際のCodeBuild上では問題なく動作します。
しかし、ローカル環境では動きません。問題となるは以下。

docker-compose.yml
    volumes:
      - ./:/workspace

docker-compose.ymlが存在するフォルダを/worksspaceへmountしたいだけなので、通常であれば間違った記述ではありません。

これで動作しない理由は、以下のIssueで議論されてるとおり、CodeBuildエージェント環境の場合、volumeがホスト側で解決されるためです。

解決方法

上記のIssueにもある通り、ホスト上のパスを指定することで動作するようになります。

docker-compose.yml
    volumes:
      - /home/senioris/app_folder:/workspace
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?