Local と Remote Exec Provisioner
Terraform を実行しているマシン、または作成したリソース上でコマンドを実行する `local-exec` と `remote-exec` Provisioner を実装します。
「Local と Remote Exec Provisioner」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Terraformのプロビジョナーを知る
Terraformがリソースを作成した後に、スクリプトやコマンドを実行する必要がある場合はどうすればよいでしょうか。そのようなときに活躍するのがプロビジョナーです。
プロビジョナーを使用すると、リソースのライフサイクルの一部として、ローカルマシンまたはリモートリソース上でアクションを実行できます。インフラの作成と初期ソフトウェア設定の間をつなぐ役割を果たします。
リソースが作成された直後にカスタマイズできるフックだと考えるとよいでしょう。
`local-exec`: ローカルで実行
local-execプロビジョナーは、Terraformを実行しているマシン上でコマンドを実行します。
次のようなタスクに役立ちます。
- 設定ファイルをローカルで生成する。
- ローカルのスクリプトやツールを起動する。
- リソースの破棄後にクリーンアップ処理を行う。
クラウドリソース自体で実行する必要がないアクションに最適です。
`local-exec`の基本例
local-execを使って、nullリソースの作成後にローカルマシン上で簡単なファイルを作成する例を見てみましょう。
null_resourceはクラウド上に何も作成しないプレースホルダーですが、プロビジョナーの起動に便利です。
resource "null_resource" "local_file_creator" {
provisioner "local-exec" {
command = "echo 'Local file created by Terraform!' > local_output.txt"
}
triggers = {
always_run = timestamp()
}
}`local-exec`を使用するタイミング
local-execは、次のような用途に適しています。
- デプロイ後の通知: メールやSlackメッセージを送信する。
- ローカルファイルの生成: Ansibleやその他のツール用のインベントリファイルを作成する。
- デプロイ前のチェック: ローカルの検証スクリプトを実行する。
- CI/CDの起動: インフラの変更後にパイプラインを開始する。
terraform applyを実行した場所から処理されることを覚えておいてください。
`remote-exec`: リソース上で実行
local-execとは異なり、remote-execプロビジョナーはリモートリソース自体でコマンドを実行します。
新しく作成したサーバーでの初期設定タスクに不可欠です。たとえば、次のような処理があります。
- ソフトウェアパッケージをインストールする(例: Webサーバー、データベース)。
- オペレーティングシステムの設定を行う。
- アプリケーションコードをデプロイする。
対象リソースへのネットワーク接続(Linuxの場合はSSH、Windowsの場合はWinRMなど)が必要です。
`remote-exec`の接続設定
remote-execを動作させるには、Terraformがリソースに接続できる必要があります。
一般的な接続方式には次のようなものがあります。
- SSH: Linuxインスタンスで使用し、秘密鍵が必要です。
- WinRM: Windowsインスタンスで使用し、認証情報が必要です。
通常、接続の詳細はprovisionerブロック内で設定するか、リソースから継承します。
EC2で`remote-exec`を使う
remote-execを使って、新しいAWS EC2インスタンスにApacheをインストールする方法は次のとおりです。
注: EC2インスタンスがプロビジョニング済みで、SSH経由でアクセスできる必要があります。ここでは簡単にするため、既存のキーペアとセキュリティグループがあるものとします。
resource "aws_instance" "web_server" {
ami = "ami-0abcdef1234567890" # Replace with valid AMI ID
instance_type = "t2.micro"
key_name = "my-ssh-key" # Replace with your SSH key name
vpc_security_group_ids = ["sg-0123456789abcdef0"] # Replace with your SG ID
provisioner "remote-exec" {
inline = [
"sudo yum update -y",
"sudo yum install -y httpd",
"sudo systemctl start httpd",
"sudo systemctl enable httpd"
]
connection {
type = "ssh"
user = "ec2-user"
private_key = file("~/.ssh/my-ssh-key.pem")
host = self.public_ip
}
}
}`remote-exec`を使用するタイミング
remote-execは、次のような用途に適しています。
- サーバーのブートストラップ: Webサーバー、データベース、Dockerをインストールする。
- アプリケーションのデプロイ: アプリケーションコードをコピーして設定する。
- 構成管理: AnsibleのプレイブックやChefのレシピを直接実行する。
- 作成後の検証: 新しいインスタンスでサービスが実行されていることを確認する。
サーバーの初期状態を設定する際に、まず検討すべき手段です。
削除時のプロビジョナー
プロビジョナーは、リソースの削除時にも実行できます。これはクリーンアップ処理に役立ちます。
プロビジョナーブロック内で when = destroy を指定できます。たとえば、インスタンスを終了する前にロードバランサーから登録解除する場合に使用します。
on_failure の動作も設定できます。これは、プロビジョナーのコマンドが失敗した場合の処理を決めるものです。デフォルトではエラーになります。
プロビジョナーのクイズ
新しく作成した仮想マシンインスタンスに、NginxのようなWebサーバーをインストールするには、どのプロビジョナーを使用しますか?
プロビジョナー:ローカルとリモート
Terraformのプロビジョナーについて学びました。プロビジョナーは、リソースのライフサイクル中にコマンドを実行する強力なツールです。
local-execはTerraformを実行しているマシン上でコマンドを実行します。ローカルスクリプトや通知に便利です。remote-execはプロビジョニングしたリソース上で直接コマンドを実行します。ソフトウェアや設定を使ってサーバーを初期設定するのに適しています。
プロビジョナーは、インフラのデプロイとアプリケーションの初期設定の間をつなぐ役割を果たします。次は、高度な状態管理の手法について学びます。
よくある質問
「Local と Remote Exec Provisioner」レッスンは無料ですか?
はい。「Local と Remote Exec Provisioner」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Local と Remote Exec Provisioner」で何を学びますか?
Terraform を実行しているマシン、または作成したリソース上でコマンドを実行する `local-exec` と `remote-exec` Provisioner を実装します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Local と Remote Exec Provisioner」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Data Sources によるデータの取得
- Local と Remote Exec Provisioner
- Null Resource とトリガー
- 外部データとテンプレートの利用