継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

SageMaker から Amazon OpenSearch Service への接続方法を調べた

タダです.

小ネタですが,SageMaker Notebook Instance から Amazon OpenSearch Service(Elasticsearch)への接続をする機会がありどうやってやるのかなと思って調べたり検証したので,この記事にまとめます.

TL;DR

SageMaker Notebook Instance にはセキュリティグループの設定ができるので,Amazon OpenSearch Service のセキュリティグループで HTTPS の接続を許可してあげれば接続ができるようになりました.

まとめ

やったことはないといえ,本当に小ネタでした.

GitHub Actions のコードをモノレポで管理したいと思った時に呼び出し方を試した

タダです.

プライベートリポジトリで GitHub Actions のコードを複数管理しているような状況で,呼び出す時どうすればいいのかなと思い,検証した時の小ネタをまとめていきます.

検証の概要

コードを管理するリポジトリでは下記のように GitHub Actions のコードがディレクトリ別に配備されていくような構成になっていたとします.この中で actions01 を呼び出したい場合に検証していった内容をまとめます.

.
├── actions01
└── actions02

検証した結果

検証した結果ですが,下記のような定義をしていきました.default セクションで Actions を実行するディレクトリを固定しつつ,uses でも Actions を実行するディレクトリで actions01 を指定すれば actions01 のコードが実行できました.

defaults:
  run:
    shell: bash
    working-directory: ./.github/actions/[repo-name]/actions01

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          repository: hoge/[repo-name]
          ref: main
          path: .github/actions/[repo-name]
          token: ${{ secrets.PERSONAL_GITHUB_TOKEN }} 
      - name: hoge actions
        uses: ./.github/actions/[repo-name]/actions01
        with:
          param1: value1
          param2: value2

まとめ

プライベートリポジトリの GitHub Actions で特定のディレクトリのコードを実行させたい場合の動作検証を行ったのでまとめました.

関連記事

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

GitHub Actions を初めて自作したので学んだことをまとめる

タダです.

GitHub Actions を初めて自作したのでその過程で学んだことをこの記事にまとめていこうと思います.

自作した GitHub Actions の概要

自作した GitHub Actions は TypeScript で書いた GraphQL を叩いて dependabot の情報を抽出するもので,プライベートリポジトリ間で使えるようにする必要がありました.このあたりで学んだことは関連記事に書いています.この記事では関連記事に書けていないことをまとめます.

関連記事

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

学んだこと一覧

TypeScript で作るために取っ掛かりとしてよかったもの

TypeScript で Actions を作るぞってなってもどう作るの?なんかサンプルが欲しいなと思っていました.そんな時に良かったのが, typescript-action です.これは TypeScript の GitHub Actions サンプルで自分のリポジトリにテンプレートして持ってこれるため,一番はじめにどういうふうなコードを書けばいいのか,必要なパッケージ類は何かなどを GitHubドキュメントと合わせて読んで理解を進めることができました.

github.com

結局何が必要なのか

結局,今回自作するために最低限必要になるなと感じたのは下記のものです.

  • Actions のソースコード
    • Actions を動かすためのコード本体.TypeScript,package-json が最低限必要.
  • action.yml
    • Actions の定義ファイル.これがないと呼び出し先で GitHub Actions が動作しない.
  • @actions/core
    • Actions が呼び出し先からインプットの情報を得るために必要.
  • @vercel/ncc
    • 後述する Actions を配布する時に必要.

Actions を使ってもらう時にパッケージ類をどうするか

TypeScript のコードを書いてローカルで意図通りに動作したから次はどう配布するかのときに悩みました.プライベートリポジトリ間の呼び出しは上述した記事に書いたように解決したものの,Actions を呼び出し先では package.json にあるパッケージは既にインストールされた状態で実行できなければ機能しないけど,どうやって配布するのかがわかりませんでした.結論として @vercel/ncc を使って TypeScript のコードをビルドしたものを呼び出し元のリポジトリに配置しておけば,呼び出し先で Actions が動作しました.

ビルド例

ncc build src/index.ts

github.com

まとめ

GitHub Actions を初めて自作したのでその過程で学んだことをまとめました.これまで使うばかりだったのですが,自作できる経験がなかったので今後も作っていきたいです.

プライベートリポジトリで自作 GitHub Actions を動作させるために必要な設定

タダです.

業務で GitHub Actions を開発したのですが,その Actions はプライベートリポジトリに起き,別のプライベートリポジトリから Actions を呼び出すことをやったので小ネタとしてまとめます.

概要

リポジトリ A に Actions のコードが入っており,リポジトリ B で Actions を呼び出すとします.

リポジトリ B の workflow 設定

.github/workflows 配下にリポジトリ A の Actions を呼び出す定義を書いてみます.

設定例

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          repository: hoge/リポジトリ A
          ref: main
          path: .github/actions/リポジトリ A
          token: ${{ secrets.PERSONAL_GITHUB_TOKEN }} 
      - name: test actions
        uses: ./.github/actions/リポジトリ A
        with:
          param1: value1
          param2: value2

上記の設定でリポジトリ A で main ブランチにあるコードをチェックアウトしてきます.その際に,Personal Access Token を使っているので,発行して Secrets に登録しておきます.この際に設定する権限は repo 全般の権限で確認しました.actions/checkoutが通れば,自作している Actios を実行するのに必要なパラメータをセットしたりすればよいですが,usesでチェックアウトで指定したパスを指定してます.指定したパスに action.yml がないとエラーで何回か失敗したので指定には注意ください.

関連情報

github.com

zenn.dev

まとめ

プライベートリポジトリ間での GitHub Actions の呼び出し方法をまとめました.今回の経験でこれまで Actions はパブリックリポジトリじゃないと呼べないのだろうと一方的に勘違いしていたのを正せました.また,企業内のリポジトリであれば,こういった使い方はありうると思いますしあまり記事を見かけたなかったので記事にしてみました.

SRE NEXT 2022 Day2 参加レポート #srenext

タダです.

SRE NEXT 2022 の Day2 参加レポートを書いていきます.自分が聞いたセッションでのメモを転記しながら感想を書きます.

sre-next.dev

Day1 の参加レポート

sadayoshi-tada.hatenablog.com

SRE bridge the gap: Feature development to Core API / 機能開発チームとコアAPIチームの架け橋としてのSRE

Shopify の SRE の記事を見てから気になっていたキーノートでした.Shopify の中での SRE の実践でやっていった内容も興味深かったのですが,Shopify の中での信頼性に関する考えやキャリアの多様な在り方を認める文化って素敵だと感じました.

sre-next.dev

メモ

  • どういったタイミングで Production Engineering モデルが導入され,SRE チームが何を担っているか
    • Production Engineeringの独立組織を作ってえた効果(2016~2017頃)
      • 機能開発チームで自分たちの環境を自律的に運用するためのツール開発
      • スケーラビリティやレジリエンシーへの投資
        • 結果として3倍のデプロイ頻度が増えた
    • Production Engineeringのチームも大きくなってきた(2020年ころ)
      • Incident Manager On Call(IMOC)を担い始めた
        • SLO 違反になりそうなインシデント
    • 信頼性について
      • Shopifyの考え:信頼性を脅かすことを享受すること(必要なこと)でしなやかなシステムにできる
        • 未来のRPMにするために学ぶ
      • Shopifyの複雑さ
        • フラッシュセール:トラフィックがスパイキー
        • ショップごとに機能要件が異なる
      • 対応
        • Semian
          • 外部サービスへの通信して遅くなったら失敗したときにサーキットが落とす 関連記事
        • Load Shedder
        • Toxiproxy
          • 外部サービスの失敗したのシミュレーションできる
            • Game Dayで失敗をして学ぶ
        • 文化やプロセス
  • キャリアの話
    • キャリアの3つの観点
      • 機能開発
      • CoreAPI
      • SRE
    • 機能開発
      • 剣を使う人
        • どれだけ早くエンドユーザーにリリースできるかが関心事
    • Core API
    • SRE
      • 剣を研ぐ人
        • 分散型システムの失敗パターンに対するエキスパート
    • それぞれのキャリア分野を掛け算ができる
      • 1つのチームの中で計画をする際に,違った視点を入れていく

Who owns the Service Level?

二年前の SLO Review の発表からの振り返りを共有いただいたセッションでした.なにかアクションを取る時に自己完結化できるようにすることは重要だと自分の経験上感じていたり,そのための権限や調整も必要だと思っていました.その中で組織内の技術戦略にまで踏み込んでいったお話は自分にとってなかった考えで,いろんな人々を巻き込んで進めることを体現されているなと感じました.

sre-next.dev

資料

メモ

  • SRE を実現するために必要な要素
    • 指標をもとに完全し続ける文化
    • 自己完結化を支えるプラットフォーム
    • 優先順位を変更するための技術戦略
  • SRE でやること
    • ユーザーが期待する信頼性を保っていること
      • やりすぎなくていい
    • SLI/SLO を設定して非機能、機能の優先度決定するのに活用している
    • 目標値のモニタリングとポリシーがチームで同意されている
    • 定期的に見直されている
  • チムトポ
    • SRE と 開発チームの関係性
      • SRE : Platform(APIを使って提供),Enabling(専門家として他のチームが自律的に運用できるようにする)
      • 開発チーム : Stream Aligned (自分たちで必要なものを自分たちで用意できる/自己完結化)
  • MVVの話
    • Mission
      • 自己完結化の重要な理由:他チームに必要なものを用意するために時間がかかってもったいない
        • 自己完結化が進むと,Dev vs Opsのような関係から And の関係になる
  • SLO Review の発表振り返り
    • 良かったこと
      • 開発チームの認知不可を徹底的に下げることに拘った
    • うまくいかなかった
      • エラーバジェットができなかった
        • SLI / SLO に従って行動できなかった
          • 非機能要求に対する権限・予算不足
      • SLO 違反したら全ての開発を止めてその修正を行うのは現実的ではないが、目標値を下回ったときのアクションを決める
        • 全員で負担する
  • 技術戦略
    • ビジネスの速度に追随するため、技術戦略が必要
      • 変更をしやすいシステム・コード・組織にする
        • 変更速度を妨げる要因を排除
    • 技術的課題・負債をコントロール下におく
      • 特定の人に依存しないようにする

SLO決定のためのArt of SLO

転職先でも SLO の策定の話が出てきたので改めて決定に至るプロセスを確認したくて参加しました.CUJ -> SLI -> SLO -> エラーバジェットを策定するのが良さそう,加えてワークショップの紹介や質疑応答で SLO で追う目標値の数は 3~5 個で良いや SLO が顧客の期待に応えているかを見るのは難しいものの山口さんより参考情報をいただけたのは参考になりました.

sre-next.dev

メモ

  • CUJ
    • Critical User Journey
    • シーケンス図を書く
  • CUJからSLIを導き出すプロセス => 3~5くらいにするといい(振り返りで有効なものを選ぶ)
    • SLIを導き出すメニューが有る
    • SLI を導くイベントをもとに見るべき数値やメトリクスが決まってくる
  • SLO決定のためのプロセス
    • 目標値と測定期間が必要
      • 過去データを参考にどれくらいのユーザーをカバーできているかを確認する
      • リクエストをカバーしないと収益に問題ないか
  • The Art of SLO ワークショップ
    • グループワークで進めるコンテンツのためチームで SLO 策定の際にやってみると良さそう
    • 下記のブログでも CUJ から SLI/SLO/エラーバジェットを定めるプロセスをさらえる

medium.com

まとめ

Day2 で参加したセッションとそのメモ,所感をまとめてみました.運営の皆さん,登壇された皆さん,お疲れさまでした! Podcast でも雑談しました.

anchor.fm

Day2 の公開された資料

直接セッションを見に行けてないですが,公開された資料のリンクをまとめてくださっている方がいたのでリンクを貼らせていただきます.

docs.google.com