2
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?

MicroAd (マイクロアド)Advent Calendar 2024

Day 18

新卒エンジニアがDigdagの学習環境を作った話

Last updated at Posted at 2024-12-18

この記事は MicroAd Advent Calendar 2024の18日目の記事です。

はじめに

 はじめまして!新卒エンジニアのホンマです。本記事が初投稿になります!新人ゆえ間違いがあるかもしれませんが優しくご指摘いただけると幸いです。

 さて、私が所属するバッチ開発チームではワークフローエンジンとしてDigdagを使用しています。配属以降なんとなくで使っていた状態が続いていたためこの機会に色々研究してみようと思います。とはいえ、いきなり全て勉強するのは難しいので今回は環境構築のみやってみようと思います。またDockerを使用するため新しくバッチ開発チームに入った方の学習環境としても利用できるのではという狙いもあります。

この記事のゴール

  • Digdagを触れる環境をdockerで作る
  • ワークフローを1つ実行する

検証環境

  • Macbook Air M1 2020
  • Docker Engine v27.3.1
  • Docker Compose v2.29.7

リポジトリ

今回作成したリポジトリはこちらです。

使い方

コマンド一つで起動・削除できます。

起動:docker compose up -d

削除:docker compose down (-vオプションでデータを削除できます)

解説

とりあえずdocker-compose.yml見ていきます。

version: "3"

services:
  #digdagサーバー
  digdag_server:
    container_name: digdag_server
    build:
      context: .
      dockerfile: ./docker/digdag_server/dockerfile
    depends_on:
      - digdag_postgres
    volumes:
      - ./docker/digdag_server:/opt/etc/digdag
      - /var/run/docker.sock:/var/run/docker.sock
      - /tmp:/tmp
    command: ["server", "-c", "/opt/etc/digdag/server.properties"]
    ports:
      - 8080:65432
    networks:
      - digdag_network

  #digdagクライアント(このコンテナでdigdagコマンドを使う)
  digdag_client:
    container_name: digdag_client
    build:
      context: .
      dockerfile: ./docker/digdag_client/dockerfile
    volumes:
      - .:/workspace
    ports:
      - 8081:65432
    tty: true
    depends_on:
      - digdag_server
    networks:
      - digdag_network
    develop:
      watch:
        - action: sync
          path: ./
          target: /workspace

  #digdagのデータ保存用PostgreSQL
  digdag_postgres:
    image: postgres:14-alpine
    container_name: digdag_postgres
    ports:
      - 8082:5432
    volumes:
      - db-store:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: digdag_db
    networks:
      - digdag_network

  #dozzleサーバー(digdagサーバーのログ確認用)
  dozzle_server:
    container_name: dozzle_server
    image: amir20/dozzle:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 8083:8080
    depends_on:
      - digdag_server
    networks:
      - digdag_network

networks:
  digdag_network:
    driver: bridge

volumes:
  db-store:

今回はコンテナを4つ立てています。簡単に説明します。

1. digdagサーバー

今回のメインターゲットのdigdagサーバーです。http://localhost:8080/ でUIが確認できます。
image (4).png

2. digdagクライアント

このコンテナからdigdagサーバに対してリクエストを送ります。

3. PostgreSQL

PostgreSQLは用意しなくてもDigdag自体は動作するのですが、実務では使用することが多いと思うので用意しました。今回は特に触れませんが入っているテーブルを確認してみると面白いです。
(ちなみにPostgeSQLとDigdag接続するのにめちゃくちゃ苦労しました笑)

4. dozzle

こちらも必須ではありませんがログの確認用に設置しました。http://localhost:8083/ で確認できます。Docker DesktopのUIからログを見ても問題ないです。
スクリーンショット 2024-12-17 23.08.46.png

ワークフロー実行

以下digファイルに書かれたワークフローを実行します。今回はPythonのコードを実行してみようと思います。

wf_sample.dig
timezone: UTC

_export:
  docker:
    image: "python:3.11.0-alpine"
    docker: "/usr/local/bin/docker"
    run_options: [ "-m", "1G" ]
    pull_always: true
    selinux: true
    
+step1:
  py>: src.sample.hello

Pythonのコード

src/sample.py
def hello():
    print("Hello World!")

PythonのコードはDigdagサーバーが別途コンテナを立てて実行します。今回はDigdagサーバー自体がコンテナであり、「コンテナからコンテナを起動する」という構図になっているため動作させるのに一苦労しました。解説は割愛しますがdoodという方式をとることで解決しました。

ではワークフローを実行していきます。
まずはdigdag_clientコンテナに入ります。

docker exec -it digdag_client bash

digdag_serverに向けてプロジェクトをプッシュします。

digdag push my-project -e http://digdag_server:65432

UIを確認するとプロジェクトがプッシュされていることがわかります。
image.png

ワークフローを実行します。今回はUIからRUNボタンを押して実行します。
image (1).png

ワークフローが成功しました。
image (3).png

dozzleにも期待通りにログが出ています。
image (2).png

まとめ

今回は単純な実行のみでしたがスケジュール実行やサーバーの細かい設定などまだまだ検証できそうな部分もあるので引き続き遊んで行こうと思います。

2
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
2
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?