Ansible TowerとAWXによるOracle Cloud Infrastructureの利用 (2021/09/28)
Ansible TowerとAWXによるOracle Cloud Infrastructureの利用 (2021/09/28)
投稿者:Nabeel Al-Saber
Red Hat Ansible TowerとAWXは、ビジュアルなダッシュボード、ロールベースのアクセスコントロール、ジョブスケジュール、統合された通知、グラフィカルなインベントリ管理により、ITインフラストラクチャを集中管理することができます。そのタスクエンジンはAnsibleをベースに構築されています。AWXは、オープンソースのコミュニティプロジェクトであり、Towerの上流プロジェクトでもあります。
Oracle Cloud Infrastructure (OCI)は、Resource Managerサービスを使ってOracle ComputeインスタンスにAWXを素早くインストールすることをサポートしています。私の同僚である Oracle Managed Cloud サービスチームの Jason Rothstein 氏が AWX のインストールソリューションを提供してくれました。
Ansible AWXは、Ansible Modules Collectionを使用してOracle Cloud Infrastructureの実行と管理を容易にします。このコレクションは2020年にリリースされ、「Oracle Ansible Modulesの最新情報」と「Terraformとの比較」で紹介されています。すべてのOCIサービスをサポートしており、Computeインスタンスやデータベースインスタンスの照会に使用できるインベントリプラグインがあります。
このブログでは、OCIモジュールとインベントリプラグインをAnsible Towerバージョン16でセットアップして使用する方法を説明します。
プロジェクトの準備
Ansible Tower でコレクションからインベントリプラグインを使用するには、プロジェクトからソースを作成する必要があります。Ansible Tower 内のプロジェクトは、Git リポジトリなどのソースコントロールリポジトリを統合したものです。Ansible Towerでは、プロジェクトがAnsibleのプレイブック、変数、インベントリを引き出します。
私のソースコントロールリポジトリの内容はシンプルです。
├── collections
│ └── requirements.yml
│ └── install_python_sdk.yml
└── inventory.oci.yml
inventory.occi.ymlファイルには、インベントリプラグインの以下の詳細が記述されています。
$ cat inventory.oci.yml
plugin: oracle.oci.oci
regions: all
fetch_db_hosts: true
詳細なオプションについては、ダイナミックインベントリのドキュメントを参照してください。ここでは、接続する OCI インスタンスの詳細や認証情報は定義されていません。これらの詳細は後でAnsible Tower内で設定します。
コレクションやrequirements.ymlファイルが必要なのは、Ansible Towerがコレクションをダウンロードし、その結果、インベントリプラグインをダウンロードできるようにするためです。そうしないと、Ansible Towerのすべてのノードにコレクションを手動でインストールして維持する必要があります。
collections または requirements.yml で、以下の文字列のような要件ファイルを作成します。
$ cat collections/requirements.yml
collections:
- name: oracle.oci
OCI コレクションの実行には、OCI Python SDK が必要です。SDK をインストールするには、以下の選択肢があります。
- タワー型の仮想環境を作成し、プレイブックの実行時に使用
- プレイブックを使用して、現在の環境にSDKをインストール
以下のプレイブックの例では、現在の環境にSDKをインストールする方法を示しています。
$ cat install_python_sdk.yml
---
- name: Install python sdk
collections:
- oracle.oci
hosts: localhost
tasks:
- name: Installing oci python library using Ansible pip module
pip:
name: oci
OCI Python SDKを定期的にアップデートして、Oracle Cloudモジュールでサポートされている新機能を入手してください。適切な配置に従ってください。
AWX v16の場合 組織を作成します。Galaxy Credsが定義されていることを確認します。Ansible Galaxyのクレデンシャルを追加するには、以下のステップを確認してください。
この構成をソースコントロールリポジトリにプッシュすると、リポジトリを参照するAnsible Towerのプロジェクトが作成されます。以下の例では、Ansible Tower を私の GitHub リポジトリにリンクしています。SCMのURLに注意してください。リポジトリが非公開の場合は、クレデンシャルを指定して、プルするブランチ、タグ、コミットを指定します。AWX v16 では organization も指定しています。
OCI クレデンシャルの作成
リポジトリの構成には、OCI で使用するクレデンシャルが含まれていません。そこで、Ansible Tower でクレデンシャルを作成し、それらの値を定義します。OCI インベントリプラグインのドキュメントを見ると、接続の詳細を定義するために、以下の例のようにいくつかの環境変数を設定できることがわかります。
OCI_CONFIG_FILE、OCI_USER_KEY_FILE、OCI_USER_KEY_PASS_PHRASE の3つです。
しかし、Ansible Towerでは、これらの詳細を入力できるOCIのクレデンシャルタイプがありません。幸い、このようなユースケースでは、Ansible Tower ではカスタムのクレデンシャルタイプを定義することができます。
- Go to Administration, Credential Types, and then New Credential Type.
- Copy the following fields for Input Configuration:
- fields:
- - id: user_ocid
- type: string
- label: User OCID
- - id: fingerprint
- type: string
- label: Fingerprint
- - id: tenant_ocid
- type: string
- label: Tenant OCID
- - id: region
- type: string
- label: Region
- - id: private_user_key
- type: string
- label: Private User Key
- secret: true
- multiline: true
- required:
- - user_ocid
- - tenant_ocid
- - region
- - fingerprint
- - private_user_key
プライベートユーザーキーがパスフレーズを使用している場合は、入力構成にそのフィールドを追加し、インジェクター構成で環境変数として設定することができます。
認証情報は、同じ名前の環境変数として公開されます。「インジェクター構成」ボックスに以下のコードを追加します。
env:
OCI_CONFIG_FILE: '{{ tower.filename.config }}'
OCI_USER_KEY_FILE: '{{ tower.filename.keyfile }}'
file:
template.config: |-
[DEFAULT]
user={{ user_ocid }}
fingerprint={{ fingerprint }}
tenancy={{ tenant_ocid }}
region={{ region }}
template.keyfile: '{{ private_user_key }}'
カスタムクレデンシャルタイプが定義されたので、今度はOCIクレデンシャルを追加してみましょう。
リソース」と「クレデンシャル」にアクセスし、新しいクレデンシャルを作成します。次のような結果が表示されます。
AWX v16では、Ansible Galaxy用のクレデンシャルをもう一つ作成します。
また、「設定」→「その他の設定」で仮想環境のパスを指定します。
インベントリの作成
OCIのインベントリを「リソースとインベントリ」で作成します。名前と組織のフィールドは必須です。
インベントリが作成されたら、今度はそのインベントリにソースを添付します。以下のフィールドを入力します。
- 名前:インベントリのソース名を入力します。
- プロジェクト:先ほど作成したプロジェクトを指定して入力します。
- ソース:Sourced from a Projectを選択します。
- インベントリファイル:ソースコントロールリポジトリ内のインベントリYAMLファイルのパスを指定します。この例では inventory.oci.yml を使用しています。
- クレデンシャル:前のステップで作成したOCIのクレデンシャルを選びます。
- Vairables:"ansible_connection: local"
結果は以下のスクリーンショットのようになります。
設定をテストするために、「Sync all」をクリックしてソースと同期してみます。すべてが正しく設定されていれば、ホストがインベントリにインポートされます。
OCI モジュールプレイブックの実行
このセクションでは、Tower を使用して OCI Ansible モジュールを実行する手順を示します。しかし、OCI ansible プレイブックを実行する前に、Python SDK をインストールする必要があります。
「Templates」でテンプレートを作成します。以下の必須フィールドを入力します。
- テンプレート名
- プロジェクト:先ほど作成したプロジェクトを指定
- ジョブタイプ:Runを選択
- インベントリを指定:前のステップで作成したOCIインベントリを選びます。
- クレデンシャルを指定:クレデンシャルタイプの「Oracle Cloud Infrastructure Config」を選びます。続いて、前のステップで作成したOCIのクレデンシャルを選びます。
- Playbook:実行するinstall_python_sdk.yamlプレイブックのパス
テンプレートを作成したら、ジョブを起動します。
ここで、「Templates」にワークフローのテンプレートを作成します。以下の必須項目を入力してください。
- 名前
- インベントリ 前のステップで作成したOCIインベントリを選びます。
詳細を保存してから、「WORKFLOW VISUALIZER」をクリックします。まずpython sdkをインストールし、プレイブックを実行するというシンプルなワークフローを作成します。
起動すると詳細を見ることができます。
このワークフローテンプレートを作成しなくても、任意のプレイブックを実行することができますが、クリーンアップスクリプトが実行されると、他のプレイブックを実行する前に、手動でinstall_python_sdk.yamlテンプレートを実行する必要があります。
以下は、サンプルのプレイブックを実行するためのジョブテンプレートを作成する手順です。Templates」でテンプレートを作成します。以下の必須項目を入力します。
- テンプレート名
- Project: 先ほど作成したProjectを指定
- ジョブタイプ:Runを選択
- インベントリを指定:前のステップで作成したOCIインベントリを選びます。
- クレデンシャルを指定:クレデンシャルタイプの「Oracle Cloud Infrastructure Config」を選びます。続いて、前のステップで作成したOCIのクレデンシャルを選びます。
- Playbook:実行するサンプルのプレイブックへのパスです。OCIのサンプルはGitHubで公開されています。
- 追加の変数:サンプルの実行に必要なその他の変数を追加
テンプレートを作成したら、ジョブを起動します。このジョブは、バケットとオブジェクトをリストアップするサンプルを実行します。このジョブは、Inventories >> <your_inventory> >> Groups から取得できる別のホストに対しても同じように実行することができます。
まとめ
Ansible TowerとAWXを使用すると、異なるクラウドベンダー間のクラウドリソースを簡単に管理できます。Oracle は、Oracle Cloud Infrastructure Ansible Modules Collection を使用して OCI を管理するためのモジュールを提供しています。このブログでは、Oracle Cloud モジュールと インベントリプラグインを Ansible Tower と AWX でセットアップして使用する方法を紹介しました。
FAQ
- AWXをインストールするには?
- awxのgitリポジトリに従ってください。
- AWXコンテナをデバッグするには?
- AWXインスタンスにSSH接続し、DockerとDocker-composeが起動しているか確認します。
- Dockerサービスが起動していれば、AWX用のDockerコンテナが起動していることを確認します。
- もしDocker/Docker-composeサービスが起動していなければ、手動でインストールするか、問題を提起してください。
- AWXコンテナが起動していない場合は、`/var/lib/cloud/instance/script/part-002`ディレクトリにある`metadata.awx.sh`ファイルを実行してください。このファイルを実行すると、AWXコンテナが起動します。
- AWXのインベントリやテンプレートの問題をデバッグするには?
- VerbosityレベルをDebug以上にして、詳細なログを見られるようにしてください。
- 新しい変更がピックアップされていることを確認するには?
もしGitリポジトリに変更を加えた場合は、AWX UIでプロジェクトをリロードしてください。
コメント
コメントを投稿