EC2インスタンスを使用する場合、ローカルファイルをインスタンスにコピーする必要があることがよくあります。 これは、ファイルが作成されるとすぐにインスタンスですぐに利用できるようにする必要がある場合に特に必要です。 たとえば、私のTerraformプロジェクトの要件の1つは、Apache仮想ホストの構成ファイルが作成されるとすぐにEC2インスタンスで利用可能でなければならないということでした。 このファイルは、2つの仮想ホスト構成ファイルを作成するためのテンプレートとして使用されました。 これを行うために、Terraformのファイルプロビジョナーツールを使用してこれらのファイルをコピーしました。
Terraformはプロビジョナーの使用を推奨しておらず、利用可能な場合は代替手法を推奨していることを知っておく必要があります。 この制限には多くの理由があり、TerraformのWebサイトに記載されています。
何をカバーしますか?
このチュートリアルでは、Terraformを実行しているローカルマシンからAWSで新しく作成されたAmazon EC2インスタンス(Ubuntu)にファイルをコピーする方法を見ていきます。 この方法では、Terraformが提供するファイルユーティリティを使用します。 ファイルをEC2インスタンスにコピーするだけでその使用法を示します。
プロビジョナーは何に使用されますか?
プロビジョナーは通常、さまざまなリソースを作成、破棄し、本番環境または開発環境ですぐに使用できるマシンを準備するためのスクリプトを実行するために使用されます。 プロビジョニング操作には、次のようなものが含まれます。
- オペレーティングシステムをアップグレードします。
- アカウントを作成し、サービスおよびその他のシステム管理タスクを構成します。
- ソフトウェアのインストール。
- システムへのファイルの転送とシステム上のファイルの管理。
- システムIPアドレス、ポート、およびその他のタスクの構成。
前提条件
- テラフォームの基本。
- ローカルシステムにインストールされたTerraformとAWSCLI。
- AWSアカウントにアクセスするように設定されたAWSCLI。
‘file’プロビジョナーを使用してファイルをコピーする
「ファイルプロビジョナー」は、Terraformを実行しているマシンからEC2インスタンスのような同じマシンまたは他のマシンにファイルとディレクトリをコピーするために使用されます。 プロビジョナーは、ローカルシステムとリモートシステムの両方に適用できます。 Terraformは展開操作に優れていますが、プロビジョニングにはそれほど熟練していません。 多くのオペレーティングシステムとコマンドは、Terraformによって適切にサポートされていません。 これが、Terraformが最後のオプションとしてプロビジョナーの使用を提案する理由です。
「ファイル」プロビジョナーの実用化
このセクションでは、「ファイル」プロビジョナーを使用する実際的な方法を説明します。 Terraformを使用してEC2インスタンスリソースを作成し、ローカルシステムからこのインスタンスにファイルをコピーします。 今すぐやってみましょう:
手順1.最初に、リモートシステムにコピーするファイルを作成します。 すべての構成ファイルを含むディレクトリ内に作成しています。
$ nano dummy.txt
また、このファイルにいくつかのコンテンツを追加します。
$ echo “Our dummy file” > dummy.txt
手順2.「instance.tf」または任意の名前で「.tf」拡張子の付いたファイルを作成します。
$ sudo instance.tf
次に、このファイルに以下のコンテンツを入力します。
provider "aws" {region ="us-east-1"
}
resource "aws_instance" "webserver" {
ami ="ami-id-you-want-to-use"
instance_type = "t2.micro"
key_name = "Name-of-your- EC2-keypair"
vpc_security_group_ids = ["Use-an-existing-SG"]
associate_public_ip_address = true
provisioner "file" {
source = "dummy.txt"
destination = "/home/ubuntu/file1.txt"
connection {type = "ssh"
user = "ubuntu"
private_key = "${file("Path-to-EC2-keyPair-on-Local-system.pem")}"
host = "${self.public_ip}"
}
}
tags = {
Name = "FileProvisionerDemo"
}
}
上記のコードは、「dummy.txt」ファイルを「file1.txt」という名前のEC2インスタンスにコピーします。 ここでは既存のセキュリティグループを使用しました。Terraformを使用して新しいセキュリティグループを作成し、ここで使用できます。 ここで使用されているいくつかの引数の説明を見てみましょう。
- ソース:ファイルとディレクトリの絶対的な場所、またはTerraformプロジェクトディレクトリに対応する相対的な場所。
- 宛先:ターゲットシステムの絶対パスです。
- 接続ブロック:Terraformは、接続ブロックを使用してサーバーと通信する方法を学習します。 タイプ「ssh」と「winrm」の接続は、どちらもファイルプロビジョナーによってサポートされています。
- type:このフィールドは、「ssh」または「winrm」の接続のタイプを指定します。 このラボでは、SSH接続を使用しました。
- user:接続に使用するユーザーを指定します。
- private_key:接続を確立するためのSSHキーの内容。
- ホスト:接続するリソースのアドレスを指定します。
- self:接続の親リソースを表し、リソースのすべての属性を保持するオブジェクト。
ファイルプロビジョナーは、certificate、agent、host_keyなどの他の引数もサポートします。
手順3.以下を使用してプロジェクトディレクトリを初期化します。
$ terraform init
また、次のコマンドを実行して、構文エラーがないか確認します。
$ terraform validate
ステップ4.このインフラストラクチャをセットアップするには、「terraformapply」コマンドを実行します。 ‘terraformplan’コマンドを使用して行われる変更を確認することもできます。
$ terraform apply
サンプル出力:
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ createTerraform will perform the following actions:
# aws_instance.webserver will be created
+ resource "aws_instance" "webserver"
ステップ5.インスタンスは次のように作成されています。
次に、インスタンスにSSHで接続し、ファイルが正常にコピーされたかどうかを確認します。
結論
このガイドでは、「file」プロビジョナーを使用してファイルをインスタンスにコピーする方法を説明しました。
The post Terraformを使用してローカルファイルをAmazonEC2インスタンスにアップロードする方法 appeared first on Gamingsym Japan.