こんにちはヤク学長です。
データサイエンティスト兼ファーマシストで、アルゴリズムやBI開発を行っています。
本記事の目的は、「pythonの基本操作を知る」ことを目的としています。
【本記事のもくじ】
まず、「Python」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。
- 1.インフラ構築自動化
それでは、上から順番に見ていきます。
なお、本上記の方法を順番に抑えれば成果が出ます。
記事の内容は「転載 & 引用OK」問題ありません。
1.インフラ構築自動化
インフラ構築自動化とは、ソフトウェアやスクリプトを使って、クラウドやオンプレミスのインフラストラクチャーを自動的に構築することを指します。
インフラストラクチャーとは、サーバーやネットワーク機器、データストレージ、オペレーティングシステム、ミドルウェア、アプリケーションソフトウェアなど、システムを構成する物理的または仮想的な資源のことを指します。
インフラ構築自動化を行うことによって、以下のようなメリットがあります。
- ヒューマンエラーを防止し、品質を向上することができる。
- 作業時間やコストを大幅に削減することができる。
- インフラストラクチャーの設定や構成を簡単に再現することができる。
- セキュリティを向上することができる。
主要なインフラ構築自動化ツールとしては、Ansible、Chef、Puppet、Terraformなどがあります。これらのツールは、プログラム言語を使用して、自動的にインフラストラクチャーを設定したり、管理したりすることができます。また、クラウドサービスプロバイダーが提供するAPIを利用して、クラウド上のリソースを自動的に構築することも可能です。
WindowsにVagrantとVirtualboxをインストールする
-
まず、VirtualBoxをダウンロードします。公式サイト(https://www.virtualbox.org/wiki/Downloads) から、自分のOSにあったパッケージをダウンロードし、インストールします。
-
次に、Vagrantをダウンロードします。公式サイト(https://www.vagrantup.com/downloads) から、自分のOSにあったパッケージをダウンロードし、インストールします。
-
インストールが完了したら、コマンドプロンプトやターミナルを開き、以下のコマンドを実行してバージョンを確認します。
vagrant version
-
このコマンドを実行すると、Vagrantのバージョン情報が表示されます。正しくインストールされているか確認しましょう。
Vagrant
Vagrantとは、ローカル開発環境を簡単に構築・管理するためのツールです。Vagrantを使うことで、仮想マシンやコンテナのセットアップが簡単になります。また、Vagrantfileと呼ばれる設定ファイルを使って、簡単に仮想マシンの設定を変更できます。
Vagrantは、仮想化技術を使って仮想マシンを作成するため、パフォーマンスに影響が出ることがあります。しかし、ローカルで開発を行う場合は、この程度のパフォーマンスの低下は許容できます。また、Vagrantは複数のプロバイダーをサポートしており、仮想化技術によって仮想マシンを作成するだけでなく、Dockerを使ってコンテナを作成することもできます。
Vagrantの主な機能は以下の通りです。
- 仮想マシンの自動セットアップ
- 仮想マシンのプロビジョニング
- 複数のプロバイダーのサポート
- プラグインシステムによる機能拡張
Vagrantを使うことで、簡単にローカル開発環境をセットアップできるため、開発効率の向上につながります。
VirtualBoxは、x86_64用の無料かつオープンソースのハイパーバイザーです。これは、Windows、Linux、macOS、Solaris、FreeBSDなど、多数のオペレーティングシステム上で実行できます。VirtualBoxを使用すると、同じコンピュータ上に複数の仮想マシンを作成し、異なるOSを実行できます。
VirtualBoxは、デスクトップ仮想化のための最も一般的なソリューションの1つであり、オープンソースであるため、無料で利用できます。また、VirtualBoxはオープンソースであるため、エンドユーザーが必要に応じてソースコードを変更して、カスタマイズした仮想環境を作成できます。
VirtualBoxの主な機能には、以下があります。
- ゲストOSの仮想化
- プラグインのサポート
- USBデバイスの仮想化
- ポータブル仮想マシンのエクスポート/インポート
- 仮想ネットワークのサポート
VagrantfileでVMを立ち上げる
Vagrantは、Vagrantfileと呼ばれるファイルを使用して、VMを定義および設定することができます。Vagrantfileは、Rubyの構文を使用して記述され、VMのホスト名、IPアドレス、プロビジョニング方法、ポートフォワーディングなどを定義することができます。
以下は、Vagrantfileの例です。
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = "2"
end
config.vm.provision "shell", inline: <<-SHELL
apt update
apt install -y apache2
SHELL
end
このVagrantfileは、Ubuntu 20.04(Focal Fossa)のVMを定義し、192.168.33.10のプライベートIPアドレスを割り当て、2GBのメモリと2つのCPUを構成し、Apache2をインストールするプロビジョニングスクリプトを実行します。
Vagrantfileを使用してVMを起動するには、以下のコマンドを使用します。
vagrant up
これにより、Vagrantfileで定義されたVMが起動され、プロビジョニングスクリプトが実行されます。また、以下のコマンドを使用してVMにログインすることもできます。
vagrant ssh
Fabric
FabricはPythonで書かれたデプロイツールで、SSH経由でリモートサーバー上のコマンドを実行することができます。Fabricを使うことで、デプロイやアプリケーションの設定、サーバーのセットアップなどの作業を自動化することができます。
Fabricは、Fabricのコマンドを書いたPythonスクリプトをローカルマシンで実行することで、リモートサーバーでのタスクの実行を自動化することができます。これにより、手動での作業に比べて作業が自動化され、効率が向上し、エラーのリスクが低減されます。
Fabricには、以下のような特徴があります。
- シンプルなAPI: 一般的なSSHタスクを簡単に実行できます。
- パラメーター化された実行: タスクを実行するときに、引数を指定して値を渡すことができます。
- 並列実行: 複数のサーバーでタスクを同時に実行することができます。
- ファブリックスクリプトの再利用: 複数のプロジェクトで同じFabricスクリプトを再利用することができます。
Fabricを使用するには、Python 2.7またはPython 3.4以降が必要です。また、Fabricを使用するためには、リモートサーバーにSSHでログインするための設定が必要です。
Fabricで自動化
Fabricは、Pythonで記述されたシンプルなリモート実行ライブラリであり、SSH接続を介してリモートホストでのコマンドの実行、ファイルのアップロード/ダウンロード、リモートマシンの設定ファイルの更新など、さまざまな自動化タスクを実行することができます。
Fabricを使用すると、ローカルマシンから、設定したリモートマシンに対して、Pythonスクリプトを実行することができます。これにより、手動でコマンドを実行する必要がなく、手動作業が省けるため、業務の効率化や正確性の向上などが期待できます。
以下は、Fabricを使用したサーバーの自動化の例です。
from fabric import Connection
# 接続先サーバーのホスト名、ユーザー名、秘密鍵のファイルパスを指定して接続する
c = Connection(host='example.com', user='myuser', connect_kwargs={'key_filename': '/path/to/my/key'})
# サーバーのパッケージをアップデートする
c.sudo('apt-get update')
c.sudo('apt-get upgrade -y')
# サーバーにnginxをインストールする
c.sudo('apt-get install -y nginx')
# サーバーに設定ファイルをアップロードする
c.put('nginx.conf', remote='/etc/nginx/nginx.conf')
# サーバーのnginxサービスを再起動する
c.sudo('systemctl restart nginx')
上記のスクリプトでは、Connection
クラスを使用してリモートホストに接続し、sudo
メソッドを使用して、パッケージのアップグレード、nginxのインストール、設定ファイルのアップロード、nginxサービスの再起動を実行しています。このように、Fabricを使えば、リモートマシンでの自動化が容易になります。
Ansibleで自動化
Ansibleは、IT環境の自動化、設定管理、アプリケーションのデプロイなどに使われるオープンソースの構成管理ツールです。Pythonで記述されており、SSHプロトコルを使用して管理対象のサーバにアクセスし、プレイブックに記述されたタスクを実行することができます。
Ansibleを利用する場合は、以下の手順で環境をセットアップします。
- Ansibleをインストールする
AnsibleはPythonで記述されているため、Pythonがインストールされている必要があります。以下のコマンドでAnsibleをインストールします。
pip install ansible
- Ansibleのインベントリファイルを作成する
Ansibleのインベントリファイルは、管理対象のサーバのリストを記述するファイルです。以下のように、インベントリファイルを作成します。
[web]
192.168.0.1
192.168.0.2
[db]
192.168.0.3
[web]
と[db]
というグループを定義し、それぞれのグループにIPアドレスを指定しています。- プレイブックを作成する
プレイブックは、管理対象のサーバで実行するタスクを記述するファイルです。以下のようなプレイブックを作成します。
- name: Install Apache web server
hosts: web
become: yes
tasks:
- name: Install Apache
apt:
name: apache2
state: present
上記の例では、hosts
には、対象のグループを指定しています。また、become: yes
によって、管理者権限で実行することを指定しています。タスクには、apt
モジュールを使用して、Apacheをインストールする処理を記述しています。
- Ansibleでプレイブックを実行する
以下のコマンドで、プレイブックを実行します。
ansible-playbook -i inventory playbook.yml
上記の例では、-i
オプションでインベントリファイルを指定しています。また、playbook.yml
には、実行するプレイブックを指定しています。
これらの手順を踏むことで、Ansibleを利用してサーバの自動化を行うことができます。
Ansibleのモジュールの作成
Ansibleは、既存のシェルスクリプトやPythonスクリプトなどの様々な種類のモジュールをサポートしています。ただし、独自のモジュールを作成することもできます。
Ansibleのモジュールは、JSON形式で入力され、JSON形式で出力されるようになっています。モジュールは、Ansibleが管理するホスト上で実行されます。モジュールを作成するには、Pythonスクリプトを作成する必要があります。Pythonスクリプトは、Ansibleが管理するホスト上で実行されるため、Pythonがインストールされている必要があります。
以下は、簡単なAnsibleモジュールの例です。この例では、ファイルを作成するモジュールを作成しています。
#!/usr/bin/python
from ansible.module_utils.basic import *
def main():
module = AnsibleModule(
argument_spec=dict(
path=dict(required=True),
content=dict(required=True),
),
supports_check_mode=True,
)
path = module.params['path']
content = module.params['content']
if module.check_mode:
module.exit_json(changed=True, msg='check mode: file would have been created')
with open(path, 'w') as f:
f.write(content)
module.exit_json(changed=True, msg='file created')
if __name__ == '__main__':
main()
この例では、path
とcontent
という2つの引数を持つmain
関数が定義されています。これらの引数は、Ansibleが入力として提供し、モジュールが処理する必要があるものです。
モジュールを実行するには、ansible
コマンドの-m
オプションを使用します。以下は、この例で作成したファイル作成モジュールを実行するコマンドの例です。
$ ansible all -i hosts -m file_create -a "path=/tmp/foo content='hello world'"
この例では、all
というグループに属するすべてのホストで、file_create
モジュールを実行し、path
とcontent
引数を指定しています。-i
オプションは、Ansibleが管理するホストを指定するために使用されます。-a
オプションは、file_create
モジュールの引数を指定するために使用されます。
以上が、簡単なAnsibleモジュールの作成方法の例です。Ansibleは、多くの標準的なモジュールを提供しており、独自のモジュールを作成する必要がない場合もありますが、必要に応じて独自のモジュールを作成することもできます。
というわけで、今回は以上です。大変大変お疲れ様でした。
引き続きで、徐々に発信していきます。
コメントや感想を受け付けています。ちょっとした感想でもいいので嬉しいです。
それでは、以上です。