パッカーとテラフォーム:効率的なDEVOPS展開のための強力なツール
この記事では、オープンソースのDevOpsツールパッカーとテラフォームを使用して、インフラストラクチャの構築と管理に協力して、効率的なアプリケーションの展開を実現する方法について説明します。
コアポイント:
Alibaba Cloudは、DevOpsに関する素晴らしいホワイトペーパーをリリースしました。「DevOpsは単にインフラストラクチャを管理するためのアジャイルな原則を実装するだけではありません。JohnWillisとDamon Edwardsは、Devopsを定義するためにCams(文化、自動化、測定、共有)を使用します。 DevOpsは、開発チームとオペレーションチームのコラボレーションを促進するように設計されています。これは、ソフトウェア開発とインフラストラクチャ管理を接続するDevOpsの新しい役割または考え方を反映しており、知識を必要とし、クラウドコンピューティングモデルの増加を最大限に活用しています。しかし、DevOpsの実践は大規模な企業に限定されず、開発者はそれを毎日の仕事に簡単に組み込むことができます。このチュートリアルでは、少数の構成ファイルのみを使用して展開プロセス全体を簡単にオーケストレーションし、Alibaba Cloud Elastic Computing Services(ECS)インスタンスでアプリケーションを実行する方法を示しています。
パッカーはじめに:
Packerは、HashiCorpによって開発されたオープンソースDevOpsツールです。ソフトウェアはクロスプラットフォーム互換性があり、並行して複数の画像を作成できます。 HomeBrewを使用したインストールは非常に簡単です:brew install packer
。 Packerは、カスタム配布の作成と同様に、オペレーティングシステムとアプリケーションで必要な追加のソフトウェアを含む「すぐに使用できる」画像を作成します。たとえば、カスタムPHPアプリケーションを含むDebian画像を簡単に作成できます。
Terraformの紹介:
展開は、アプリケーションを適切な環境にパッケージ化する(画像の作成)と、アプリケーションを実行するインフラストラクチャ(サーバー)の作成という2つの主要なタスクで構成されています。 Terraformは、Packerと同じ原則に基づいてHashicorpからのものでもあり、単一のTF形式プロファイルのみを使用してAlibaba Cloudにインフラストラクチャを構築できます。これにより、バージョン制御が容易になり、基礎となるアプリケーションがどのように機能するかを明確に理解できます。 TerraformのインストールとAlibaba Cloudの公式プロバイダーの構成については、他の関連記事を参照してください。
ターゲット:
このチュートリアルは、ソフトウェアのランニングからインフラストラクチャのサポートまで、すべてをカバーするDevOpsで簡単なPHPアプリケーションを作成および展開します。
ステップ:
プロセスを簡素化するために、Docker-Composeベースのアプリケーションを作成して、空港からMetar気象データを取得します(ICAO空港コードを使用して米国国立気象サービスからデータを取得します)。次に、UbuntuとPackerを使用して画像を作成し、その画像とTerraformを使用してインフラストラクチャを展開します。
phpアプリケーション:
便利なため、既製のアプリケーションを提供します。ソースコード(index.php、2つのJavaScriptファイルを含むMetarデータ、少量のCSS、PNG画像を含む)を表示できます。このアプリはDocker-Composeに基づいており、後でPackerを使用して依存関係としてインストールします。
パッカーを使用して画像を構築します:
コンピューターに〜/Metar-Appという名前のフォルダーを作成し、そのフォルダーに移動して、次のようにMeta-Build.jsonという名前のファイルを作成します。同じディレクトリで、次のコンテンツを含むベースセットアップという名前のファイルを作成します。
{ "variables": { "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}", "region": "{{env `ALICLOUD_REGION`}}", "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}" }, "builders": [ { "type": "alicloud-ecs", "access_key": "{{user `access_key`}}", "secret_key": "{{user `secret_key`}}", "region":"{{user `region`}}", "image_name": "metar_app", "source_image": "ubuntu_16_0402_64_20G_alibase_20180409.vhd", "ssh_username": "root", "instance_type": "ecs.t5-lc1m1.small", "internet_charge_type": "PayByTraffic", "io_optimized": "true" } ], "provisioners": [ { "type": "shell", "script": "base-setup" } ] }
これら2つのファイルを準備するときは、
を実行し、それらが完了するのを待ちます。これを有効にするためには、コンピューターに3つの環境変数を設定する必要があることに注意してください:#!/usr/bin/env bash apt-get update && apt-get install -y apt-transport-https ca-certificates curl git-core software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update && apt-get install -y docker-ce docker-compose curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose mkdir /var/docker git clone https://github.com/roura356a/metar.git /var/docker/metar
、およびpacker build metar-build.json
。 ECSインスタンスを作成し、すべてのソフトウェアをインストールし、インスタンスを停止し、そのスナップショットを作成し、最終的にシステム全体の画像を作成するため、このステップには時間がかかります。 画像が作成された後、PackerはALICLOUD_REGION
に出力されます。 ALICLOUD_ACCESS_KEY
ALICLOUD_SECRET_KEY
==> Builds finished
Terraformを使用してインフラストラクチャを展開:
今、同じフォルダーで、次のコンテンツを含むmain.tfという名前のファイルを作成します。
同じディレクトリで、次のコンテンツを含むユーザーデータという名前のファイルを作成します。さて、ファイル構造は次のようになります:
provider "alicloud" {} data "alicloud_images" "search" { name_regex = "metar_app" } data "alicloud_instance_types" "search" { instance_type_family = "ecs.xn4" cpu_core_count = 1 memory_size = 1 } data "alicloud_security_groups" "search" {} data "alicloud_vswitches" "search" {} resource "alicloud_instance" "app" { instance_name = "metar_app" image_id = "${data.alicloud_images.search.images.0.image_id}" instance_type = "${data.alicloud_instance_types.search.instance_types.0.id}" vswitch_id = "${data.alicloud_vswitches.search.vswitches.0.id}" security_groups = [ "${data.alicloud_security_groups.search.groups.0.id}" ] internet_max_bandwidth_out = 100 password = "Test1234!" user_data = "${file("user-data")}" } output "ip" { value = "${alicloud_instance.app.public_ip}" }
実行
#!/usr/bin/env bash cd /var/docker/metar && docker-compose up -d
を実行してすべてが正常かどうかを確認し、最終的に
を実行して展開プロセスを開始します。<code>metar_app/ ├── metar-build.json ├── base-setup ├── main.tf └── user-data</code>
インフラストラクチャが構築された後、Terraformは、たとえば111.111.111.111.111など、新しく作成されたECSインスタンスのIPアドレスを出力します。 terraform init
terraform plan
terraform apply
テスト:
すべてがうまくいけば、サンセバスチャン空港の最新の気象レポート(美しいエントリールートがあるスペイン北部にある)の最新の気象レポートをチェックできます。
概要:
アプリケーションの完全なDevOps展開を完了する努力はほとんどありません。これにより、メンテナンスリリースサイクル、インフラストラクチャの更新が大幅に簡素化され、ホストとLinuxコマンドを直接処理することなくシステムの可用性が向上します。
パッカーとテラフォームに関するよくある質問:
以上がPackerとTerraformでアプリを簡単に展開する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。