※当サイトの記事には、広告・プロモーションが含まれます。

GitHub Actions内のAnsibleのタスクをAzure Bastionを経由しての多段SSH接続で実行する方法が知りたいのだが...

nazology.kusuguru.co.jp

最近、東アフリカ大陸の「分裂」が予想以上のスピードで進行していることが、米カリフォルニア大学サンタバーバラ校(UCSB)らの研究で報告されています。

アフリカ大陸の「分裂」が急速に進行中!「第6の海洋」が誕生する見込み - ナゾロジー

研究者によれば、この分裂は従来考えられていた数千万年単位ではなく、100万〜500万年以内に完了する可能性があるとのこと。

アフリカ大陸の「分裂」が急速に進行中!「第6の海洋」が誕生する見込み - ナゾロジー

それにより分裂した大陸の間に海水がなだれ込み、「第6の海洋」が誕生する見込みです。

アフリカ大陸の「分裂」が急速に進行中!「第6の海洋」が誕生する見込み - ナゾロジー

⇧ 100万年って、人間の寿命で1世代100年とした場合に、

 100年(1世代) \times 100 \times 100 = 1,000,000

となることから、およそ、10000世代を経た後の世界ということで想像を絶しますな...

ヒト属(ホモ属)はおよそ200万年前にアフリカアウストラロピテクス属から別属として分化し、ヒトの属するホモ・サピエンスは40万から25万年前に現れた。またこれらの他にも、すでに絶滅したヒト属の種が幾つか確認されている

人類の進化 - Wikipedia

⇧ 何と言うか、「100万年~500万年」って、人類にとっては、悠久の時にも感じられることは間違いないが、見積もりについては証明のしようが無いのよね...

100万年後に、まだ地球や人類が存在しているかは分かりませんが、後世の人たちにジャッジしてもらう感じになるってことですかね...

GitHub Actionsとは

公式のドキュメントによりますと、

docs.github.com

概要

GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる継続的インテグレーションと継続的デリバリー (CI/CD) のプラットフォームです。 

https://docs.github.com/ja/actions/about-github-actions/understanding-github-actions

リポジトリに対するすべての pull request をビルドしてテストしたり、マージされた pull request を運用環境にデプロイしたりするワークフローを作成できます。

https://docs.github.com/ja/actions/about-github-actions/understanding-github-actions

⇧ とあり、基本的には、「GitHub」上で管理している「Gitリポジトリ」に対して何某かの操作をする感じになりますと。

GitHub」では様々なサービスが提供されているのだが、

docs.github.com

 

⇧「CI/CD and DevOps」のカテゴリに該当するサービスの内の1つになるっぽい。

話を「GitHub Actions」に戻すと、とりあえず、大きく分けて、

⇧ サイドバーにある通り、

  1. GitHub ホステッド ランナー(GitHub-hosted runners)
  2. セルフホステッド ランナー(self-hosted runners)

の2パターンのどちらかの環境で「ワークフロー」と呼ばれるもの(「[Gitリポジトリ]/.github/workflows/*.yml」ファイルで定義した処理)を実行する感じになるかと。

実行のトリガーは、様々で、複数を指定できるっぽい。

基本的には、「1.GitHub ホステッドランナー(GitHub-hosted runners)」の方、所謂、「GitHub」が用意してくれている環境で「仮想マシンVM:Virtual Machine)」を構築して、「GitHub Actions」の「ワークフロー」が実行されると思われる。

docs.github.com

GitHub ホステッド ランナーの概要

ランナーは、GitHub Actions ワークフローでジョブを実行するマシンです。 たとえば、ランナーはリポジトリをローカルにクローンし、テスト ソフトウェアをインストールしてから、コードを評価するコマンドを実行できます。

https://docs.github.com/ja/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners

⇧ とあることから、「ワークフロー」毎に「仮想マシンVM:Virtual Machine)」を作成、起動させる必要があるわけですと。

GitHub」が管理しているどこかのデータセンターとかで「仮想マシンVM:Virtual Machine)」が作成、起動してるんかね?

Azure Bastionとは

公式のドキュメントによりますと、

learn.microsoft.com

Azure Bastion は、プライベート IP アドレスを介して仮想マシンに安全に接続するためにプロビジョニングするフル マネージド PaaS サービスです。

https://learn.microsoft.com/ja-jp/azure/bastion/bastion-overview

Azure portal から TLS 経由で直接、またはローカル コンピューターに既にインストールされているネイティブ SSH または RDP クライアントを介して、仮想マシンへの安全でシームレスな RDP/SSH 接続を提供します。 Azure Bastion 経由で接続する場合、仮想マシンにパブリック IP アドレス、エージェント、クライアント ソフトウェアはいずれも不要です。

https://learn.microsoft.com/ja-jp/azure/bastion/bastion-overview

⇧ とあり、「Azure」の外部からも利用できますと。

「Azure」における「最小管理単位(SKU:Stock Keeping Unit)」が何なのかはよく分かりませんが、

⇧ 上記のような感じで、「SKU」によって利用できることに制限があるっぽいのだが、どの「SKU」が適用されているのかって、どこで確認できるんだろうか...

どうやら、

learn.microsoft.com

SKU はサービス レベルとも呼ばれます。 Azure Bastion では、複数の SKU レベルがサポートされています。 Bastion を構成するときに、SKU レベルを選択します。 使用する機能に基づいて SKU レベルを決定します。

https://learn.microsoft.com/ja-jp/azure/bastion/configuration-settings#skus

⇧「Azure Bastion」のリソースを作成する時に選択するものらしい。

該当する「Azure Bastion」の概要とかで確認できるんかね?

Ansibleとは

Wikipediaによりますと、

Ansible(アンシブル)は、プロビジョニング構成管理アプリケーションデプロイメントオーケストレーション、その他多くのITプロセスを自動化する、オープンソースのIT自動化ツールである。

Ansible (ソフトウェア) - Wikipedia

他の単純な管理ツールと違い、Ansibleのユーザー (システム管理者、開発者、アーキテクトなど) は、ソフトウェアのインストール、日常的に行うタスクの自動化、インフラストラクチャのプロビジョニング、セキュリティとコンプライアンスの向上、システムへのパッチ適用、組織全体での自動化の共有に、Ansibleの自動化を使用できる。

Ansible (ソフトウェア) - Wikipedia

⇧ とあり、インフラレイヤーにおいて支援するようなツールと言った感じですかね。

公式のドキュメントによりますと、

docs.ansible.com

Installing Ansible

Ansible is an agentless automation tool that you install on a single host (referred to as the control node).

https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

From the control node, Ansible can manage an entire fleet of machines and other devices (referred to as managed nodes) remotely with SSH, Powershell remoting, and numerous other transports, all from a simple command-line interface with no databases or daemons required.

https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

⇧ とあり、対象のホストにSSH接続して処理を実行する感じになりますと。

「Ansible」は、「Python」のに含まれるパッケージ管理ツールである「pip」などでインストールする感じになるらしいのだが、

thinkit.co.jp

⇧ 上図のような感じで「コンポーネント」が組み合わさって動作するものですと。

GitHub Actions内のAnsibleのタスクをAzure Bastionを経由しての多段SSH接続で実行する方法が知りたいのだが...

で、本題。

実現したいことは、「GitHub Actions」内で構築された「仮想マシンVM:Virtual Machine)」にインストールされた「Ansible」の「Playbook」の実行対象のホストを、「Azure」環境内の「Azure Bastion」を経由して「Azure Virtual Machine」を踏み台サーバーとして多段SSH接続した別の「Azure Virtual Machine」に指定したいですと。

公式のドキュメントを見た感じでは、

learn.microsoft.com

この記事は、ローカルの Linux コンピューター上のネイティブ クライアントを使用して VNet 内の VM に Azure Bastion 経由で接続する場合に役立ちます。 ネイティブ クライアント機能を使うと、Azure CLI を使って Bastion 経由でターゲット VM に接続し、サインイン オプションを拡張して、ローカル SSH キー ペアと Microsoft Entra ID を含めることができます。

https://learn.microsoft.com/ja-jp/azure/bastion/connect-vm-native-client-linux

⇧ とあるので、「Azure」環境の外にあるマシンから「Azure Bastion」経由で「Azure Virtual Machine」に接続できるような感じの記載に見える。

ドキュメントを読み進めていくと、

Linux VMに接続する

次のセクションの手順は、az network bastion コマンドを使用して Linux ネイティブ クライアントから Linux VM に接続するのに役立ちます。 この拡張機能は、az extension add --name bastion を実行することによってインストールできます。

https://learn.microsoft.com/ja-jp/azure/bastion/connect-vm-native-client-linux

このコマンドを使用して接続する場合、ファイル転送はサポートされていません。 ファイルをアップロードしたい場合は、代わりに az network bastion tunnel コマンドを使用して接続します。

https://learn.microsoft.com/ja-jp/azure/bastion/connect-vm-native-client-linux

⇧ とあることから、

■Azure Bastion経由でAzure Virtual Machineに接続する(ファイルも転送したい場合)

az network bastion tunnel     

⇧ 最早、1択になるので選択肢が無いようなものだが、

learn.microsoft.com

github.com

⇧ とりあえず、「az login」が必要っぽい。

今回は、

  1. 仮想マシンVM:Virtual Machine)
    GitHub Actions
  2. Azure Bastion
  3. Azure Virtual Machine
    踏み台サーバー
  4. Azure Virtual Machine
    Ansibleの対象サーバー

の4人の登場人物でSSH接続する必要があるので、

learn.microsoft.com

⇧「マルチ接続トンネル」という手法が必要になるってことなんかね?

う~む、「マルチ接続トンネル」がどんなユースケースで利用するものなのかの説明が一切無いので、雰囲気で試してみることになってしまうのだが、せめて、登場人物の数をシステム概要図などでハッキリさせて欲しい気がする...

毎度モヤモヤ感が半端ない…

今回はこのへんで。