Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Workflow

 Workflow

Oracle Cloud Hangout Cafe - ワークフローツールで楽々Job管理 資料

oracle4engineer

November 03, 2022
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Workflow Oracle Cloud Hangout Café Season6 #3 Yutaka Ichikawa Oracle

    Corporation Japan Solutions Architect Nov02, 2022
  2. Copyright © 2022, Oracle and/or its affiliate 2 Proflie Name

    • Yutaka Ichikawa/市川 豊 Belong • Solutions Architect Role • Principal Cloud Solution Engineer SNS • Twitter/GitHub/Qiita:cyberblack28 Blog • https://cyberblack28.hatenablog.com/ Materials • https://speakerdeck.com/cyberblack28/ Community • Oracle Cloud Hangout Cafe #ochacafe • CloudNative Days Tokyo #cndt #o11y2022 Certified • Certified Kubernetes Administrator • Certified Kubernetes Application Developer • Certified Kubernetes Security Specialist • Kubernetes and Cloud Native Associate Publications New
  3. Copyright © 2022, Oracle and/or its affiliate 5 ワークフローについて ワークフローとは?

    申請や承認などの仕事やタスクのプロセスをフロー、図式化したもの。 購入申請 直属の上長 承認 経理部長 承認 総務部長 承認 注文 例)会社で何かを購入してもらう場合 この一連の流れが ”ワークフロー” 「誰が」、「いつ」、「どんな目的で」、「誰の責任で」、「何を購入したか」を見える化
  4. Copyright © 2022, Oracle and/or its affiliate 6 ワークフローについて ワークフロー導入による改善

    • 業務プロセスの効率化による業務オペレーションのスピード向上 • 情報共有がスムーズとなり、不要な確認作業を削減 • 責任所在や全体管理の厳格化により、効率的で公正な業務運用が可能 ある目的において、ワークフローの整備、ルール化することによって、 効率的で公正な運用、目的達成を実現する
  5. Copyright © 2022, Oracle and/or its affiliate 7 ワークフローについて ワークフローシステムとは、業務やタスクの流れを自動化するシステム

    O K O K 紙によるワークフロー O K 電子化によるワークフロー O K • どの申請書を使うべきかわからない • 申請書の作成に時間がかかる • 申請書を誰に回せばよいか分からない • 印刷・保管のコストがかかる • 書類作成・承認作業の負担軽減 • ワークフローの可視化 • ペーパーレスの促進 • 内部統制の強化 など など
  6. Copyright © 2022, Oracle and/or its affiliate 10 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフローを考えてみる

    ある目的において、ワークフローの整備、ルール化することによって、 効率的で公正な運用、目的達成を実現する この内容をアプリケーション 開発に置き換えてみる • 効率的にテストを実施したい • 早く正確にサービスをリリースしたい • 安全にサービスをリリースしたい • 高い品質でサービスをリリースしたい • 開発体制、チーム、メンバー等が変わっても対応できる流れをつくりたい • 開発に集中したい ある目的 効率的で公正な運用、目的達成を実現 多種多様
  7. Copyright © 2022, Oracle and/or its affiliate 11 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフロー、CI/CD

    アプリケーション開発に必要となるビルド、テスト、成果物(アーティファクト)の保存までの工程を自動化して、継続的に 行われる状態にすること CI(Continuous Integration/継続的インテグレーション) CI環境を整備することで、早期バグの発見による品質向上、検証時間の短縮によるリリーススピード向上、開発者が開 発に集中できる環境でより良い開発サイクルを実現 ソースコード更新 アプリケーションビルド ユニットテスト コンテナイメージビルド コンテナイメージ 脆弱性スキャン コンテナイメージ レジストリ格納 コンテナアプリケーション開発を仮例とした作業(ジョブorタスク) ワークフロー
  8. Copyright © 2022, Oracle and/or its affiliate 12 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフロー、CI/CD

    CI(継続的インテグレーション)によって生み出された成果物(アーティファクト)を、実際の環境(ステージングやプロ ダクション)へ自動的に配置すること CD(Continuous Delivery/継続的デリバリー) CD環境を整備することで、エンドユーザに影響を与えることなく、高頻度、安全にアプリケーションのリリースを実現 承認管理 本番環境デプロイ コンテナアプリケーション開発を仮例とした作業(ジョブorタスク) ワークフロー
  9. Copyright © 2022, Oracle and/or its affiliate 13 アプリケーション開発におけるワークフロー アプリケーション開発におけるワークフロー、CI/CD

    CI(継続的インテグレーション)によって生み出された成果物(アーティファクト)を、実際の環境(ステージングやプロ ダクション)へ自動的に配置すること CD(Continuous Delivery/継続的デリバリー) アプリケーション開発に必要となるビルド、テスト、成果物(アーティファクト)の保存までの工程を自動化して、継続的に 行われる状態にすること CI(Continuous Integration/継続的インテグレーション) より良いサービスを速く安全に提供できることにより、 エンドユーザ様の満足度、企業競争力や収益の向上を実現する
  10. Copyright © 2022, Oracle and/or its affiliate 14 アプリケーション開発におけるワークフロー 主なツール/サービス

    Circle CI Travis CI GitHub Actions GitLab Runner TEKTON AWS Code Pipeline Cloud Build Azure DevOps OCI DevOps
  11. Copyright © 2022, Oracle and/or its affiliate 15 アプリケーション開発におけるワークフロー 主なツール/サービス

    Kubernetes-nativeなCIツールTEKTON KubernetesのCustomResourceとしてパイプラインを定義できるため、 マニフェストファイルの作成、適用(kubectl apply)の流れで、CI環境を構築。 2021年6月 #ochacafe 『CI/CD最新事情』 でデモ交えて解説 「git clone」「image build」「image push」 それぞれをタスクとしてTEKTONパイプライン作成して、 ワークフローを実行するデモを実施
  12. Copyright © 2022, Oracle and/or its affiliate 16 アプリケーション開発におけるワークフロー 主なツール/サービス

    GitHub Actions と ArgoCD を利用した GitOps デモ 2021年6月 #ochacafe 『CI/CD最新事情』 でデモ交えて解説
  13. Copyright © 2022, Oracle and/or its affiliate 17 アプリケーション開発におけるワークフロー 主なツール/サービス

    GitHub Actions の CI 構成(ワークフロー) このワークフローを GitHub Actions の main.yml の記述を確認しながら、実際に Kubernetes クラスタにデプロイするまでのデモを実施。 2021年6月 #ochacafe 『CI/CD最新事情』 でデモ交えて解説
  14. Copyright © 2022, Oracle and/or its affiliate 18 アプリケーション開発におけるワークフロー Argo

    Workflows Argo Workflows Argo CD Argo Rollouts Argo Events DAG と Step ベースのワークフ ローをサポートする Kubernetes ネイティブのワークフローエンジン。 フルロードされた UI による宣言 型の継続的デリバリー。 Canary や Blue-Green などの 高度な Kubernetes デプロイ戦 略を容易に実施。 Kubernetes のイベント ベースの 依存関係管理。 https://argoproj.github.io/ Argo Family
  15. Copyright © 2022, Oracle and/or its affiliate 19 アプリケーション開発におけるワークフロー Argo

    Workflows Argo Workflows とは? Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows is implemented as a Kubernetes CRD (Custom Resource Definition). Argo Workflows は、Kubernetes 上で並列ジョブを構成するオープンソースのコンテナネイティブワークフ ローエンジンです。 Argo Workflows は Kubernetes CRD (カスタム リソース定義) として実装されます。
  16. Copyright © 2022, Oracle and/or its affiliate 20 アプリケーション開発におけるワークフロー Argo

    Workflows ワークフローの定義を Kubernetes の CRD を利用して定義、実行可能 アプリケーションを GitHub からクローン アプリケーションビルド コンテナイメージビルド コンテナイメージ レジストリ格納 apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: buildkit spec: arguments: parameters: - name: repo value: https://github.com/argoproj/argo-workflows - name: branch value: master - name: path value: test/e2e/images/argosay/v2 - name: image value: alexcollinsintuit/argosay:v2 entrypoint: main ・ ・ ・ ・ 例
  17. Copyright © 2022, Oracle and/or its affiliate 21 アプリケーション開発におけるワークフロー Argo

    Workflows Install Kubernetes クラスタに Argo Workflows をインストールする方法は、3タイプ 1. kubectl apply $ kubectl create namespace argo $ kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v<<ARGO_WORKFLOWS_VERSION>>/install.yaml 2. Helm $ helm repo add argo https://argoproj.github.io/argo-helm $ helm install --create-namespace --namespace argo argo-workflows argo/argo-workflows Chart https://github.com/argoproj/argo-helm/tree/main/charts/argo-workflows 3. Kustomize https://github.com/argoproj/argo-workflows/blob/master/manifests/namespace-install/kustomization.yaml $ cat base/kustomization.yaml …
  18. Copyright © 2022, Oracle and/or its affiliate 22 アプリケーション開発におけるワークフロー Argo

    Workflows Install デフォルトでは、Namespace argo に Pod 2個、Service 1個 Namespace: argo Pod Service argo-workflows-server argo-workflows-workflow-controller argo-workflows-service Pod Replicas: 1 Deployment Port: 2746 port-forward/Service(NodePort/LoadBalancer)でアクセス可能 Web Access
  19. Copyright © 2022, Oracle and/or its affiliate 23 アプリケーション開発におけるワークフロー Argo

    Workflows CLI Install ワークフローの操作を argo コマンドで実行可能(Linux/Mac/Windows) Linux # Download the binary curl -sLO https://github.com/argoproj/argo-workflows/releases/download/v3.3.9/argo-linux-amd64.gz # Unzip gunzip argo-linux-amd64.gz # Make binary executable chmod +x argo-linux-amd64 # Move binary to path mv ./argo-linux-amd64 /usr/local/bin/argo # Test installation argo version Mac の場合は、linux の 箇所を darwin に変更 Windows の場合は、 exeファイルをダウン ロード https://github.com/argoproj/argo-workflows/releases/tag/v3.3.9
  20. Copyright © 2022, Oracle and/or its affiliate 24 アプリケーション開発におけるワークフロー Argo

    Workflows CLI Install argo-server の Pod でも argo コマンドは実行可能 $ kubectl exec -it argo-workflows-server-xxxxxxxxx-xxxxx -- argo auth token Bearer xxxxxxxxxxx… ※ベースイメージが scratch のため、argo コマンド以外はほぼ利用できない
  21. Copyright © 2022, Oracle and/or its affiliate 25 アプリケーション開発におけるワークフロー Argo

    Workflows containerRuntimeExecutor Argo Workflows では、Pod などの内部処理を実装された containerRuntimeExecutor で処理する バージョン3.3までは、emissary、docker、kubelet、k8sapi、pns という containerRuntimeExecutor があ り、バージョン3.2までは docker がデフォルト、バージョン3.3以降から emissary がデフォルトとなり、emissary 以外は Deprecated Removed となる バージョン3.4以前では、ワークフローがうまくいかなかったり、Pod が正常に終わらないなどトラブルの際に executor を 変更することで解決することがあった
  22. Copyright © 2022, Oracle and/or its affiliate 26 アプリケーション開発におけるワークフロー Argo

    Workflows UI • v3.0.0 以降から HTTPS で Listen がデフォルト • HTTP で Listen する場合は、argo-workflows-server の Pod の args に 「--secure=false」追加または「ARGO_SECURE=false」の環境変数を 設定、さらに readinessProbe を 「scheme: HTTP」に変更 • Helm の場合は、デフォルトで 「--secure=false」
  23. Copyright © 2022, Oracle and/or its affiliate 27 アプリケーション開発におけるワークフロー Argo

    Workflows UI Login • ログイン方式は、Server, Client, Single Sign-On の3タイプ • Server 認証方式は、UI の操作を argo-workflows-server の権限で実施する方式(v3以前はデフォルトの認証方式) • Client 認証方式は、UI の操作を特定のサービスアカウントで実施する方式(v3以降はこちらがデフォルトの認証方式) • Single Sign-On 認証方式は、外部に認証を任せて実施する方式
  24. Copyright © 2022, Oracle and/or its affiliate 28 アプリケーション開発におけるワークフロー Argo

    Workflows UI Login (Client) $ kubectl exec -it argo-workflows-server-xxxxxxxxx-xxxxx -- argo auth token Bearer eyJhbGciOiJSUzI1N… 「Bearer」+「Token」を 入力してログインボタン
  25. Copyright © 2022, Oracle and/or its affiliate 29 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 Argo Workflows では、各処理を template という概 念で管理、 name で指定するのが template 名 spec.entrypoint は必須項目、どの処理(tempate)から開始する かを指定 ワークフローの流れは、 steps として記述(DAG 形式も可) steps の内容は、上から書いた順に実行される 「- 」を2つ記述して、配列をネストさせる必要があり、 これにより、複数処理を並列に実行できる 処理の詳細は、template に記述、左例は steps 内から 「name: whalesay」 を参照 sample-workflows.yaml
  26. Copyright © 2022, Oracle and/or its affiliate 30 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 $ kubectl create -f sample-workflows.yaml workflow.argoproj.io/steps-bnnn8 created マニフェストを展開 Podのログ確認
  27. Copyright © 2022, Oracle and/or its affiliate 31 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 並列処理 sample-workflows-parallel.yaml 並列実行処理の記述
  28. Copyright © 2022, Oracle and/or its affiliate 32 アプリケーション開発におけるワークフロー Argo

    Workflows ワークフローの書き方 DAGとは? Directed Acyclic Graph = 有向非巡回グラフ(ゆうこうひじゅんかいぐらふ) 有向非巡回グラフ、有向非循環グラフ、有向無閉路グラフ(ゆうこうひじゅんかいグラフ、英: Directed acyclic graph, DAG)とは、グラフ理論における閉 路のない有向グラフのことである。有向グラフは頂点と有向辺(方向を示す矢印付きの辺)からなり、辺は頂点同士をつなぐが、ある頂点vから出発し、 辺をたどり、頂点vに戻ってこないのが有向非巡回グラフである Wikipedia(https://bit.ly/3erf4qg) 順序付けする必要があるタスクの集合図 A B C A B C A 一方向のみ前方向に流れる DAG またAに戻る巡回する実行順序 Not DAG
  29. Copyright © 2022, Oracle and/or its affiliate 33 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 DAG sample-workflows-dag.yaml 先行タスクとして、A を指定し ているため、並列実行 DAG形式の記述、dependencies で先行 task を指定可能
  30. Copyright © 2022, Oracle and/or its affiliate 34 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 パラメータ Parameters 定義は、 steps 内で template を呼び出す時と呼び出される template 側の両方で定義する必要がある sample-workflows.yaml 呼び出す側 arguments として定義 呼び出される側 inputs として定義
  31. Copyright © 2022, Oracle and/or its affiliate 35 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 パラメータ inputs.parameters の定義にデフォルト値の設定が可能 この場合、 steps の arguments が省略可能となり、hello1 が args となる sample-workflows.yaml 呼び出す、 arguments で違う値を定義した場合は、呼び出される inputs で定義したデフォルト値は、上書きされる
  32. Copyright © 2022, Oracle and/or its affiliate 36 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 処理済みのワークフロー削除 sample-workflows.yaml 処理が完了(成功/失敗)したワークフロー (Completed Pod)を自動で削除する定義 パラメータ 内容 secondsAfterCompletion 完了後に存続する秒数 secondsAfterSuccess 成功後に存続する秒数 secondsAfterFailure 失敗後に存続する秒数 ※ secondsAfterCompletion は、Succeess/Failure 以外の場合 ttlStrategy この設定をすることで、完了したPodで溢れることを回避
  33. Copyright © 2022, Oracle and/or its affiliate 37 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 スクリプト Script Templatesと各言語の実行環境となるコンテナイメージ を指定することによってスクリプトも実行可能 script-workflows.yaml
  34. Copyright © 2022, Oracle and/or its affiliate 38 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 Kubernetes リソース resource-workflows.yaml ワークフローを処理において、 Kubernetes のリソース作成も可能 • serviceAccountName が無い場合は、 namespace 内の default の権 限で実行 • serviceAccountName を設定することを推奨 Log
  35. Copyright © 2022, Oracle and/or its affiliate 39 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 リトライ1 retry-workflows.yaml retryStrategy • 処理失敗時の自動リトライ定義 • リトライ回数を limit で指定 • 上記例では、本実行と5回のリトライ、合わせて6回 • 最初の実行は、0番目
  36. Copyright © 2022, Oracle and/or its affiliate 40 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 リトライ2 retry-advance-workflows.yaml retryStrategy • backoff を利用して、リトライ間隔、リトライ時間を指定可能 • 上記の例では、duration 10秒待つ,20秒待つ,40秒待つ...(factor で何倍するのかを指定) • maxDuration が “1m” 1分(60秒)なので、limitで5回でも2回のリトライで終了
  37. Copyright © 2022, Oracle and/or its affiliate 41 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 処理の継続 continue-workflows.yaml • step に continueOn を設定することで、処理に失敗しても リトライせずフローを進める • 失敗したフローがあっても、ワークフロー全体としては成功となる C の処理が失敗しても D の処理が実行される
  38. Copyright © 2022, Oracle and/or its affiliate 42 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 サスペンド処理/ディレイ処理 suspend-workflows.yaml • suspend は、処理の途中で止めて、 確認後、処理を継続する場合に使用 • 処理を継続する場合 UI では RESUME ボタン CLIの場合、$ argo resume <ワークフロー名> suspend delay UI CLI “$ argo resume” • 処理の途中で止めて、一定時間過ぎ たら処理の継続を指定可能 UI CLI “$ argo resume” 20秒後処理が継続される 指定時間内であれば、RESUMEで処理も可能
  39. Copyright © 2022, Oracle and/or its affiliate 43 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 外部リソースの取得 artifact-workflows.yaml • GitHub や S3 からアプリケーション ソースをコンテナ内部に取得可能 • http も可能で、 GitHub からバイナリ をダウンロードして配置も可能 inputs.artifacts
  40. Copyright © 2022, Oracle and/or its affiliate 44 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 ファイルの受け渡し ワークフローの処理間でファイルの共有をボリュームを mount して行う volumeClaimTemplates volume を定義、 クラスタ上に PVC と PV が作 成される 各処理で mount 可能、ワークフローを消すと volume も消える
  41. Copyright © 2022, Oracle and/or its affiliate 45 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 ファイルの受け渡し S3 互換のオブジェクトストレージを利用することも可能 artifact artifact を ConfigMap で定義 artifact-repo-cm.yaml minio-workflows.yaml Workflow から ConfigMap を参照
  42. Copyright © 2022, Oracle and/or its affiliate 46 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 ファイルの受け渡し steps に artifacts を設定する クラスタ内の MinIO に格納される MinIO は s3 互換のオブジェクトストレージサーバ (OSS) https://github.com/minio/minio minio-workflows.yaml
  43. Copyright © 2022, Oracle and/or its affiliate 47 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 テンプレート • ワークフローテンプレートを利用することで、ワークフロー自体をテンプレート化して、効率的に管理 • YAML ファイルとしては、spec の内容が 「kind: Workflow」 と同じであるため、「kind: WorkflowTemplate」 にリネームして利用可能 • templateRef として、ワークフロー側から呼び出すことが可能 Workflow Workflow Template テンプレート呼び出し
  44. Copyright © 2022, Oracle and/or its affiliate 48 アプリケーション開発におけるワークフロー Argo

    Workflows Workflow 書き方 テンプレート $ kubectl create -f workflow-template.yaml $ kubectl create -f workflow-template-o.yaml WorkflowTemplate として登録 テンプレートを呼び出して、ワークフローを実行
  45. Copyright © 2022, Oracle and/or its affiliate 50 Argo Workflows

    Demo GitHub + OKE + DockerHub Namespace: argo Namespace: default PVC PV argo-workflows-server argo-workflows-workflow-controller buildkit-workflows-xxxxx-clone buildkit-workflows-xxxxx-build buildkit-workflows-xxxxx-image OKE git clone docker image build docker image push ① ② ③ go build Secret docker-config /work buildkit-workflows-work-xxxxx UI $ kubectl create -f dev-workflows.yaml CLI GitHub DockerHub $ kubectl create secret generic docker-config --from- literal="config.json={¥"auths¥": {¥"https://index.docker.io/v1/¥": {¥"auth¥": ¥"$(echo -n <repo-name>:<your-token>|base64)¥"}}}" 1 2 volumeClaimTemplates を利用して、git clone した ソースを /work で共有 DockerHub の認証情報を Secret にする
  46. Copyright © 2022, Oracle and/or its affiliate 51 Argo Workflows

    Demo ワークフロー解説 buildkit-workflows.yaml パラメータ設定 リポジトリ URL ブランチ ビルドする go ファイルのパス DockerHub のリポジトリ名とタグ
  47. Copyright © 2022, Oracle and/or its affiliate 52 Argo Workflows

    Demo ワークフロー解説 buildkit-workflows.yaml ボリューム設定 タスク設定 パラメータで指定した GitHub のリポジトリ /ブランチからソースコードをクローン処理 サンプルアプリケーションの go ファイルのビ ルド処理 Dockerfile からコンテナイメージビルド処 理と DockerHub へのプッシュ処理 Clone Build Image 各処理で受け渡すソース コードを共有する work ディレクトリ
  48. Copyright © 2022, Oracle and/or its affiliate 53 Argo Workflows

    Demo ワークフロー解説 buildkit-workflows.yaml クローン処理 Alpine の git コマンドを利用できるイメージから work ディレクトリをマウント、 そこにソースコードをクローン パラメータで指定したリポジトリとブランチに対して git clone コマンドを実行
  49. Copyright © 2022, Oracle and/or its affiliate 54 Argo Workflows

    Demo ワークフロー解説 buildkit-workflows.yaml アプリケーションビルド処理 go のビルドイメージから work ディレクトリをマウント、作業ディレクトリをパラメータで指定した パスで go のビルドを実行 go のビルド実行
  50. Copyright © 2022, Oracle and/or its affiliate 55 Argo Workflows

    Demo ワークフロー解説 buildkit-workflows.yaml イメージビルドとイメージプッシュ処理 DockerHub の認証情報がある Secret を参照 buildctl-daemonless.sh のスクリプトを実行して、Dockerfile からイメージビルド処理とイメージ プッシュ処理を実行 Buildkit イメージから work ディレクトリをマウント、作業ディレクトリをパラメータで指定したパスにす る、 .docker としてマウントする
  51. Copyright © 2022, Oracle and/or its affiliate 57 汎用的なワークフロー Apache

    Airflow https://airflow.apache.org/ • オープンソースのワークフロー管理プラットフォーム • 2014年に Airbnb 社が開発した OSS であり、2016年から Apache Software Foundation のプロジェクト • Python と DAG ベースにワークフローを表現
  52. Copyright © 2022, Oracle and/or its affiliate 58 汎用的なワークフロー Apache

    Airflow Principles • Airflow パイプラインは Python で 定義され、動的なパイプライン生成 が可能 • パイプラインを動的にインスタンス化 するコードを記述できる • Airflow にはモジュラー アーキテクチャ があり、メッセージキューを使用して任意 数のワーカーを調整 • Airflow は無限にスケーリングを準備 • 独自の演算子を簡単に定義し、ライブ ラリを拡張して、環境に適した抽象化の レベルに合わせられる • Airflow パイプラインは無駄がなく明 示的。 • パラメータ化は、強力な Jinja テン プレート エンジンを使用してコアに組 み込まれる
  53. Copyright © 2022, Oracle and/or its affiliate 59 汎用的なワークフロー Apache

    Airflow Features • 堅牢で最新の Web アプリケーション を介して、ワークフローを監視、スケ ジュールおよび管理 • 完了したタスクと進行中のタスクのス テータスとログを常に完全に把握でき る。 • 標準の Python 機能を使用して ワークフローを作成 • ワークフローを構築における柔軟性を 維持 • Airflow は、多くのサードパーティ サービスでタスクを実行可能 • 多くのプラグ アンド プレイ オペレー ターを提供 • Python の知識があれば誰でもワー クフローをデプロイ可能 • Airflow は、パイプラインの範囲を 制限せずに、ML モデルの構築、 データの転送、インフラストラクチャの 管理など可能
  54. Copyright © 2022, Oracle and/or its affiliate 60 汎用的なワークフロー Apache

    Airflow のマネージドサービス https://www.astronomer.io/ https://aws.amazon.com/jp/managed-workflows-for-apache-airflow/ Amazon Managed Workflows for Apache Airflow https://cloud.google.com/composer/docs/concepts/overview?hl=ja Cloud Composer Astronomer 柔軟で容易なリソース管理、耐障害性、クラウドサービスとの連携など、マネージドサービスならではのメリットを生 かして運用を効率化
  55. Copyright © 2022, Oracle and/or its affiliate 61 汎用的なワークフロー Apache

    Airflow Install https://airflow.apache.org/docs/apache-airflow/stable/installation/index.html デモ環境では、Helm を利用して Kubernetes クラスタにインストール
  56. Copyright © 2022, Oracle and/or its affiliate 62 汎用的なワークフロー Apache

    Airflow Install helm repo add apache-airflow https://airflow.apache.org helm repo update helm install airflow apache-airflow/airflow --create-namespace --namespace airflow 公式の Helm リポジトリを追加 リポジトリのアップデート airflow のインストール
  57. Copyright © 2022, Oracle and/or its affiliate 63 汎用的なワークフロー Apache

    Airflow Install kubectl edit service/airflow-webserver -n airflow kubectl get service/aiflow-webserver -n airflow NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE airflow-webserver LoadBalancer 10.96.110.188 144.xxx.xxx.xxx 8080:31703/TCP 12m UI アクセスのために、Service airflow-webserver を type: LoadBalancer に変更 EXTERNAL-IP を確認 http://EXTERNAL-IP:8080 にアクセス
  58. Copyright © 2022, Oracle and/or its affiliate 64 汎用的なワークフロー Apache

    Airflow Install Default Username : admin Default Password : admin
  59. Copyright © 2022, Oracle and/or its affiliate 66 汎用的なワークフロー Apache

    Airflow Install デフォルトでは、Namespace airflow に Pod 7個、Service 7個 Pod Service Namespace: airflow Service Port: 8080 port-forward/Service(NodePort/LoadBalancer)でアクセス可能 Pod airflow-webserver Web Access Pod Pod Pod Pod Pod Pod Service Service Service Service Service Service
  60. Copyright © 2022, Oracle and/or its affiliate 67 汎用的なワークフロー Apache

    Airflow Install Pod 名 概要 airflow-scheduler DAG 実行と DAG からの個々のタスクのスケジューリングを制御 airflow-worker DAG の個々のタスクを、Redis キューから取得して実行 airflow-postgresql Scheduler、Worker、Webserver の状態を保存 airflow-statsd Airflow のメトリック情報を取得 airflow-triggerer Deferrable Operators という worker を効率的に利用できる Operator を管理 airflow-redis DAG の個々のタスクのキューを保持 airflow-webserver Web UI の提供 コンポーネント概要
  61. Copyright © 2022, Oracle and/or its affiliate 68 汎用的なワークフロー Apache

    Airflow Install コンポーネント概要 Metadata Database Queue Worker Webserver Scheduler Executor DAGs Airflow cfg
  62. Copyright © 2022, Oracle and/or its affiliate 69 汎用的なワークフロー Apache

    Airflow Install サンプルワークフローの有効化 helm show values apache-airflow/airflow > values.yaml vim values.yaml values.yaml ファイルを書き出し values.yaml の編集 values.ymal を変更して upgrade することで有効化可能 ・ ・ <省略> ・ extraEnv: | - name: AIRFLOW__CORE__LOAD_EXAMPLES value: 'True' ・ ・ <省略> ・
  63. Copyright © 2022, Oracle and/or its affiliate 70 汎用的なワークフロー Apache

    Airflow Install サンプルワークフローの有効化 helm upgrade --install airflow apache-airflow/airflow -n airflow -f values.yaml values.yaml を適用 UI の DAGs に表示される
  64. Copyright © 2022, Oracle and/or its affiliate 72 Airflow Demo

    公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ ['/bin/bash', '-c', 'date'] ['/bin/bash', '-c', 'sleep 5'] ['/bin/bash', '-c', '¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n'] ① ② ③
  65. Copyright © 2022, Oracle and/or its affiliate 73 Airflow Demo

    公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ リストから、 tutorial を選択 上部メニュー Graph を選択 タスクと依存関係が表示
  66. Copyright © 2022, Oracle and/or its affiliate 74 Airflow Demo

    公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ 上部メニュー Code を選択 Python Code で定義されたワークフローが表示
  67. Copyright © 2022, Oracle and/or its affiliate 75 Airflow Demo

    公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ 必要なライブラリをインポート ワークフロー全体のオブジェクト パラメータを指定
  68. Copyright © 2022, Oracle and/or its affiliate 76 Airflow Demo

    公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ BashOperator: Bash シェルコマンドを実行できる Date コマンドを実行して、時刻表示 sleep 5 を実行して 5秒待つ
  69. Copyright © 2022, Oracle and/or its affiliate 77 Airflow Demo

    公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ Airflow の jinja テンプレート を利用して実装したスクリプトを呼び出す for : 5回 ds : 実行する日付 macros.ds_add (ds, 7) : 実行する日付の7日後 t1 を実行してから t2 t3 を実行
  70. Copyright © 2022, Oracle and/or its affiliate 78 Airflow Demo

    公式チュートリアル 公式チュートリアルのコードを見ながら、Airflow を学ぶ .doc or Markdown 形式で DAG と タスクにドキュメントを設定できる
  71. Copyright © 2022, Oracle and/or its affiliate 79 Airflow Demo

    公式チュートリアル ワークフローを手動実行、ログ確認 [2022-10-21, 15:48:14 JST] {subprocess.py:75} INFO - Running command: ['/bin/bash', '-c', 'date'] [2022-10-21, 15:48:14 JST] {subprocess.py:86} INFO - Output: [2022-10-21, 15:48:14 JST] {subprocess.py:93} INFO - Fri Oct 21 06:48:14 UTC 2022 [2022-10-21, 15:48:14 JST] {subprocess.py:97} INFO - Command exited with return code 0 print_date [2022-10-21, 15:48:18 JST] {subprocess.py:75} INFO - Running command: ['/bin/bash', '-c', 'sleep 5'] [2022-10-21, 15:48:18 JST] {subprocess.py:86} INFO - Output: [2022-10-21, 15:48:23 JST] {subprocess.py:97} INFO - Command exited with return code 0 sleep
  72. Copyright © 2022, Oracle and/or its affiliate 80 Airflow Demo

    公式チュートリアル ワークフローを手動実行、ログ確認 [2022-10-21, 15:48:18 JST] {subprocess.py:75} INFO - Running command: ['/bin/bash', '-c', '¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n¥n echo "2022-10-21"¥n echo "2022-10- 28"¥n¥n echo "2022-10-21"¥n echo "2022-10-28"¥n'] [2022-10-21, 15:48:18 JST] {subprocess.py:86} INFO - Output: [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-21 [2022-10-21, 15:48:18 JST] {subprocess.py:93} INFO - 2022-10-28 templated 1 2 3 4 5 ds : 実行する日付 macros.ds_add (ds, 7) : 実行する日付の7日後 for: 5回
  73. Copyright © 2022, Oracle and/or its affiliate 83 参考資料 Oracle

    Cloud Hangout Café Season4 #3 『CI/CD 最新事情』 動画: https://www.youtube.com/watch?v=K62nFSvHo60 資料: https://speakerdeck.com/oracle4engineer/oracle-cloud-hangout-cafe-cicdzui-xin-shi-qing 使いこなせ!Argo Workflows 動画: https://event.cloudnativedays.jp/cndt2021/talks/1272 資料: https://speakerdeck.com/makocchi/how-to-use-argo-workflows Argo Workflows Documentation https://argoproj.github.io/argo-workflows/ Airflow Documentation https://airflow.apache.org/docs/ デモ環境等の資材 https://github.com/oracle-japan/ochacafe-s6-3
  74. Copyright © 2022, Oracle and/or its affiliate 84 参考資料 Airflow

    : Tutorial を使って Python で実装された DAG の基礎を学ぶ https://kakakakakku.hatenablog.com/entry/2022/03/07/075039 Apache Airflow Tutorial https://hackmd.io/@woodythewip/S1isd2QaI Hands-On Guide to Argo Workflows on Kubernetes https://www.udemy.com/course/hands-on-guide-to-argo-workflows-on-kubernetes/ The Complete Hands-On Introduction to Apache Airflow https://www.udemy.com/course/the-complete-hands-on-course-to-master-apache-airflow/
  75. Copyright © 2022, Oracle and/or its affiliate 86 OCI Workflow

    開発者およびアーキテクト向けのグラフィカルなフロー・デザイナーを備えたサーバーレス・ワークフローエンジン ▪ ユースケース OCIの各サービスとのオーケストレーションとそれに伴うタスク処理の自動化 例:インフラストラクチャのプロビジョニング、移行、およびパッチ適用の自動化、 機械学習モデルのトレーニングタスク処理の自動化など ▪ 特徴 • OCI サービスとのオーケストレーション • スケジュールおよびイベントドリブンにワークフローをトリガー • ビジュアルデザインによるワークフローの作成と監視 • 組み込み済みのフロー制御 • 組み込み済みのリトライ・ロジックと拡張可能なエラー処理 • コンテキストとデータの管理 • ワークフローのバージョン管理 ▪ 価格 2022年10月時点では、β版のためLimited Availability(制限付き利用) プログラムを通じて利用可能 OCI Workflow OCI Cloud Native Services OCI Database Services OCI Network Services OCI Storage Services OCI AI/ML Services OCI IaaS Services OCI Workflow Visual Example https://www.oracle.com/cloud/cloud-native/workflow/
  76. Copyright © 2022, Oracle and/or its affiliate 87 2022/11/21-22 https://event.cloudnativedays.jp/cndt2022

    ハイブリッド開催! 有明セントラルタワーホール&カンファレンス +オンライン 参加費無料 #CNDT2022
  77. Copyright © 2022, Oracle and/or its affiliate 88 https://go.oracle.com/LP=131162 2022/11/18

    (金) 15:30-18:00 オンライン Oracle Cloud Infrastructure (OCI) のサービスである OCI DevOps を利用して、ソースコードの変更をトリガーに、コンテナイメージの ビルドからKubernetes クラスタへアプリケーション(サンプル)をデプロイ する CI/CD パイプライン環境を構築するハンズオンを実施します。コンテ ナアプリケーション開発における CI/CD の一歩を一緒に踏み出しましょう。
  78. Copyright © 2022, Oracle and/or its affiliate 89 https://www.jasa.or.jp/expo/ 11.18(金)

    12:00-13:30 | アネックスホール F201 TS3-02 『What is Cloud Native ? 2022』 日本オラクル(株) ソリューション・アーキテクト本部 プリンシパル クラウド ソリューション エンジニア 市川 豊