ホームページ > テクノロジー周辺機器 > IT業界 > PackerとTerraformでアプリを簡単に展開する方法

PackerとTerraformでアプリを簡単に展開する方法

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-02-16 13:12:44
オリジナル
1009 人が閲覧しました

How to Deploy Apps Effortlessly with Packer and Terraform

パッカーとテラフォーム:効率的なDEVOPS展開のための強力なツール

この記事では、オープンソースのDevOpsツールパッカーとテラフォームを使用して、インフラストラクチャの構築と管理に協力して、効率的なアプリケーションの展開を実現する方法について説明します。

コアポイント:

  • パッカーとテラフォームの組み合わせ:パッカーは、必要なソフトウェアと構成を含むマシン画像を作成するために使用されますが、Terraformはこれらの画像を使用して実際のインフラストラクチャ(サーバーやコンテナなど)を構築します。
  • DevOpsの練習:PHPアプリケーションの構築を例にとると、この記事では、Packerを使用して画像を構築し、テラフォームを使用してインフラストラクチャを展開する完全なプロセスを示し、リリースサイクル管理、インフラストラクチャの更新、システムの可用性の向上を効果的に簡素化します。
  • 課題と利点:パッカーとテラフォームは、強力で柔軟ですが、効果的に使用するには一定量の技術的知識を必要とし、構成ファイルとステータスファイルを慎重に管理する必要があります。ただし、時間の節約、エラーの削減、展開の安定性の向上には依然として大きな利点があります。

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 finishedTerraformを使用してインフラストラクチャを展開:

今、同じフォルダーで、次のコンテンツを含む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 planterraform applyテスト:

すべてがうまくいけば、サンセバスチャン空港の最新の気象レポート(美しいエントリールートがあるスペイン北部にある)の最新の気象レポートをチェックできます。

概要:

アプリケーションの完全なDevOps展開を完了する努力はほとんどありません。これにより、メンテナンスリリースサイクル、インフラストラクチャの更新が大幅に簡素化され、ホストとLinuxコマンドを直接処理することなくシステムの可用性が向上します。

パッカーとテラフォームに関するよくある質問:

  • パッカーとテラフォームの主な違いは何ですか? パッカーは、複数のプラットフォームで同じマシンイメージを作成するために使用されますが、Terraformは安全かつ効率的にインフラストラクチャを構築、変更、バージョンするために使用されます。
  • PackerはTerraformとどのように機能しますか? Packerはマシン画像を作成し、Terraformはこれらの画像を使用してインフラストラクチャを作成します。
  • いつパッカーで構成され、いつテラフォームで構成されていますか?パッカーの構成は通常、マシン画像でソフトウェアのインストールと構成(インフラストラクチャが作成される前)に使用されますが、通常、インフラストラクチャの作成後にタスクを実行するためにテラフォームの構成を使用します。
  • TerraformなしでPackerを使用できますか? はい。
  • PackerとTerraformを使用してアプリケーションを展開する方法は? 最初にPackerを使用してマシン画像を作成し、次にTerraformはその画像を使用してインフラストラクチャを作成し、最後にアプリケーションを新しく作成したサーバーまたはコンテナに展開します。
  • アプリケーションの展開にPackerとTerraformを使用することの利点は何ですか? 自動化、時間を節約し、エラーを減らし、信頼性と安定性を改善し、複数のプラットフォームとサービスプロバイダーをサポートします。
  • PackerとTerraformを使用することの制限と課題は何ですか? いくつかの技術的な知識が必要です。構成ファイルとステータスファイルは注意して管理する必要があり、すべてのプラットフォームまたはプロバイダーがすべての機能とオプションをサポートするわけではありません。
  • パッカーとテラフォームを始める方法は? ツールをインストールし、構成ファイルを作成します。
  • 他のDevOpsツールでパッカーとテラフォームを使用できますか? はい。
  • パッカーとテラフォームを使用するためのベストプラクティスは何ですか? 構成ファイルをシンプルでモジュラーに保ち、バージョン制御を使用し、定期的にテストして構成を検証し、一貫した命名規則、ドキュメント構成、インフラストラクチャ設定を使用します。

以上がPackerとTerraformでアプリを簡単に展開する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート