「IaC(Infrastructure as Code)」を実現するソフトウェア製品を比較して紹介する本連載。今回はJenkinsとPackerを紹介します。ぜひ選ぶ際の参考にしてみてください。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
今日においてシステム構築、運用の自動化を担うIaC(Infrastructure as Code)を実現するソフトウェアは多くの種類が存在し、それぞれに担当する分野が異なったり、記述するコードの形式が異なったり、ツール間で連携することもあるなどの特徴を持っています。本記事ではそれらの製品を7製品ピックアップして紹介します。
製品名 | ベンダー/コミュニティー | 特徴 | |
---|---|---|---|
1 | Ansible | Red Hat | サーバを立ち上げる際に、あらかじめ用意した設定ファイルに基づいて、ソフトウェアのインストールや設定を自動で実行できるソフトウェア。「Playbook」と呼ばれる設定ファイルはYAML形式で記述し比較的学習が容易であることと、管理対象サーバに管理用のソフトウェアをインストールしないエージェントレスな構成が特徴 |
2 | Terraform | HashiCorp | 設定ファイルに基づいてサーバなどのインフラを管理できるソフトウェア。各種パブリッククラウドや仮想化環境に対応している。インフラの構成管理に特化しており、サーバ内部の設定などは別のIaCツールを用いることが一般的 |
3 | Chef | Chef Software | Ansibleと同様に、サーバを立ち上げる際に、あらかじめ用意した設定ファイルに基づいて、ソフトウェアのインストールや設定を自動で実行できるソフトウェア。「レシピ」と呼ばれる設定ファイルはRubyをベースとしたDSL(ドメイン固有言語)で記述する。Chef Serverを用いた大規模管理にも対応している |
4 | Puppet | Puppet | AnsibleやChefと同様に、サーバを立ち上げる際に、あらかじめ用意した設定ファイルに基づいて、ソフトウェアのインストールや設定を自動で実行できるソフトウェア。「マニフェスト」と呼ばれる設定ファイルはRubyライクの独自DSLで記述する。スタンドアロン型とクライアントサーバ型の2種類の形態が存在する |
5 | Pulumi | Pulumi | Terraformと同様に設定ファイルに基づいてサーバなどのインフラを管理できるソフトウェア。各種パブリッククラウドや仮想化環境に対応している。インフラの構成管理に特化しており、サーバ内部の設定などは別のIaCツールを用いることが一般的。設定ファイルはJavaScript、TypeScript、Python、Goなど、複数の言語から選択して利用できる |
6 | Jenkins | Jenkins | ソフトウェア開発のビルド、テストおよびデプロイに関連する部分の自動化を支援し、継続的インテグレーション(CI)と継続的デリバリー(CD)を促進するソフトウェア。他のソフトウェアと異なり、インフラの管理ではなくソフトウェア開発を支援するソフトウェア |
7 | Packer | HashiCorp | マシンイメージの作成を自動化するツール。Amazon Web Services(AWS)なら「AMI」、Microsoft Azureなら「arm」を作成する。設定ファイルはjsonで記述する。AnsibleやChefなどと連携できる |
それぞれのソフトウェアをカテゴリーに分けたものが以下の表となります。
プロビジョニング | Terraform/Pulumi |
---|---|
コンフィギュレーション | Ansible/Chef/Puppet |
イメージ作成 | Packer |
継続的インテグレーション | Jenkins |
今回は上記ソフトウェアのうち、Jenkins、Packerを紹介していきます。
Jenkinsは2011年にリリースされた、ソフトウェア開発のビルド、テストおよびデプロイに関連する部分を自動化し、「CI/CD」を促進するソフトウェアです。Javaが動作する環境であれば、LinuxでもWindowsでも利用できます。
Jenkinsは、「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」を目的として用いられるオープンソースソフトウェア(OSS)で、プロジェクトはLinux Foundationによって管理されています。
Jenkinsの特徴について触れる前に、Jenkinsが支援するCI/CDについて解説します。
CIとは、開発者が書いたコードとMasterブランチを頻繁に結合し、テストまで実行するプロセスのことです。1回のコミットにおける変更量を少なくして頻繁にマージ/テストを実行することで、問題の発見を早めることに貢献します。
CDとは、CIを延長し、より高度な結合とテストを自動的に行い、新しい変更が本番環境にリリース可能であることを保証するプロセスのことです。
JenkinsはCI/CDのプロセスを自動化することにより、「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」の実現を目指しています。
次にJenkinsの特徴を解説していきます。
Jenkinsの役割は、CI/CDの各プロセスにおいて、適切なツールを適切なタイミングで実行させ、各プロセスをシームレスに連携させることにより、結果を即座に通知することです。
Jenkinsが提供する機能はコア機能とプラグインに大別されます。
コア機能はWebインタフェース、ジョブ実行、分散ビルド(ノード/エージェント)管理、ユーザー管理などの基本機能を提供します。ジョブから実行される処理は、その内容に応じてプラグインを用いて、必要な情報(ソースコードリポジトリやビルドパラメーター、デプロイ先の環境情報など)を渡すことで実行できるようになっています。Jenkins本体はジョブ実行のためのトリガーを受け付け、ジョブを実行し、ジョブの内部の詳細な動作はプラグインによって実現されます。ジョブ実行のためのトリガーは、Gitなどのバージョン管理システムでのコミット、cronのようなメカニズムによるスケジューリング、特定のビルド URLのリクエストなど、さまざまな方法をトリガーにできます。
Packerは2013年にHashiCorpによってリリースされた、仮想マシンイメージを作成するためのソフトウェアです。対象のプラットフォームがAWSであればAMIを、Microsoft Azureであればarmを作成できます。Packerの特徴として、以下のような点が挙げられます。
一般的にマシンイメージは、クラウドサービス事業者が用意したものをそのまま利用するか、クラウドサービス事業者が用意したものをカスタマイズして利用するというケースが多いでしょう。Packerなら後者におけるカスタマイズの部分をコードで管理できるため、どのようなカスタマイズを行ったかを後から可視化できます。また、バージョン管理ソフトウェアでバージョン管理することで、変更履歴などを追うこともできるようになります。
PackerではJSON形式またはHCL2(HashiCorp Configuration Language)形式でマシンイメージの構成を記述します。一般的なプログラミング言語よりも学習コストが低く、書きやすく読みやすいのが特徴です。
以下にPackerで使用するマシンイメージの定義ファイルの例を挙げます。
{ "builders": [{ "type": "amazon-ebs", "access_key": "{{user `aws_access_key`}}", "secret_key": "{{user `aws_secret_key`}}", "region": "ap-northeast-1", "source_ami": "ami-068e3d6bc44010346", "vpc_id": "vpc-<VPC ID>", "subnet_id": "subnet-<サブネットID>", "ssh_private_ip": false, "associate_public_ip_address": true, "instance_type": "t2.micro", "ssh_username": "ubuntu", "ami_name": "packer-test {{timestamp}}" }], "provisioners": [{ "type": "shell", "inline": [ "sleep 30", "sudo apt update", "sudo apt install -y nginx" ] }] }
※アクセスキーとシークレットキーを定義ファイルに記述することもできますが、定義ファイルをバージョン管理システムなどで管理することを勘案すると非推奨です。シェルに変数として登録するか、別ファイルに記述して、そちらのファイルはバージョン管理の対象外とすることが推奨されます。
{ "aws_access_key": "<AWSのアクセスキー>", "aws_secret_key": "<AWSのシークレットキー>" }
以下のように指定することで実行できます。
# packer build -var-file=variables.json packer-test.json
これまで3回にわたって、IaC OSSの7製品を紹介してきました。どの製品も、AWS、Azure、GCPといったクラウドサービスや、VMwareなどの仮想化環境に対応していますので、皆さんの環境に適したIaC OSSの導入を検討する上で、お役に立てれば幸いです。
Copyright © ITmedia, Inc. All Rights Reserved.