0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraformで構築:AWS上のWindowsサーバーにIIS(Internet Information Services)を設定して遊んでみた

Last updated at Posted at 2025-01-10

はじめに

今回は、GUIベースの管理ツールで直感的に設定や管理が可能な、Microsoftが提供するWebサーバーソフトウェア「IIS(Internet Information Services)」の構築について解説していきます。

IISはMicrosoft製品であるため、Windows ServerやActive Directoryとシームレスに連携できるのが特徴です。

この記事は、個人レベルの検証をもとに作成しています。そのため、内容が実運用環境に適さない場合がありますことをご了承ください。

この内容が、どなたかの技術的な参考になれば幸いです。

書こうと思ったきっかけ

普段はLinuxサーバーを使うことが多いのですが、私は日常的にWindowsサーバーも利用しています。

通常は、LinuxのApacheやNGINXを使用することがほとんどです。

しかし、今回少しだけPACファイルの技術検証をしたいと思い、Windowsサーバーを活用してIISを構築してみることにしました。

この記事は、自分自身の備忘録として、また体系的にまとめるために作成しました。

そもそも、IIS(Internet Information Services)とは?

IIS(Internet Information Services)は、Microsoftが提供するWebサーバーソフトウェアです。Windows Serverや一部のWindowsエディションに標準で組み込まれており、以下のような機能を提供します。

一般的には、Linuxで利用されるApacheやNGINXが主流ですが、IISはGUIベースの管理ツールを備えており、直感的に設定や管理ができるのが特徴です。

主に、Windows環境でのWebサイトやアプリケーションのホスティングに利用されており、使いやすく信頼性の高いソリューションとして知られています。

補足: user_data に PowerShell スクリプトを追加

今回の検証では、前回紹介したシンプルなシングル構成のTerraformコードをベースに、user_data を使用してPowerShellスクリプトを追加しています。

  • Install-WindowsFeature で IIS をインストール。
  • index.html を作成し、ウェブページのコンテンツを追加。

user_data を活用することで、AWSで起動するWindowsインスタンスに対して初期設定やソフトウェアのインストールを自動化できます。

これにより、手作業を減らし効率的な環境構築が可能です。

もっと補足:user_dataの設定場所はここ

普段、マネジメントコンソール上でEC2を構築したことがある方は、なんとなくイメージがつくかもしれませんが、一応補足としてご説明します。

EC2を起動する際の「高度な設定」オプションの最下部に、user_dataを設定する項目があります。

今回は、Terraformを使ってこの部分にPowerShellスクリプトを追加しています。

Screenshot 2025-01-09 at 22.12.28.png

user_dataについては、直近の記事でも詳しくまとめていますので、興味がある方はぜひ参考にしてください。

今回使うコードについて

今回使用するコードは、シンプルなシングル構成で、検証目的に特化して作成しています。

注意点として、key_name の部分は環境に合わせて修正が必要です。コードを使用する際には、適宜修正を行ってください。

また、associate_public_ip_address = true の設定により、パブリックIPアドレスが自動的に割り当てられる仕様になっています。

main.tf
provider "aws" {
  region = "ap-northeast-1" # Tokyo region
}

# VPC作成
resource "aws_vpc" "main_vpc" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "terraform-main-vpc"
  }
}

# サブネット作成 (パブリックサブネット)
resource "aws_subnet" "public_subnet" {
  vpc_id                  = aws_vpc.main_vpc.id
  cidr_block              = "10.0.1.0/24"
  map_public_ip_on_launch = true

  tags = {
    Name = "terraform-public-subnet"
  }
}

# インターネットゲートウェイ作成
resource "aws_internet_gateway" "main_igw" {
  vpc_id = aws_vpc.main_vpc.id

  tags = {
    Name = "terraform-main-igw"
  }
}

# ルートテーブル作成
resource "aws_route_table" "public_route_table" {
  vpc_id = aws_vpc.main_vpc.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.main_igw.id
  }

  tags = {
    Name = "terraform-public-route-table"
  }
}

# サブネットとルートテーブルの関連付け
resource "aws_route_table_association" "public_association" {
  subnet_id      = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public_route_table.id
}

# セキュリティグループ作成
resource "aws_security_group" "public_sg" {
  vpc_id = aws_vpc.main_vpc.id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # HTTPアクセスを許可
  }

  ingress {
    from_port   = 3389
    to_port     = 3389
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # RDPアクセスを許可
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"] # すべてのアウトバウンドを許可
  }

  tags = {
    Name = "terraform-public-sg"
  }
}

# EC2インスタンス作成 (Windows Server)
resource "aws_instance" "windows_ec2" {
  ami                         = "ami-045921da241a7a9c6" # 指定されたWindows ServerのAMI ID
  instance_type               = "t2.micro"
  subnet_id                   = aws_subnet.public_subnet.id
  security_groups             = [aws_security_group.public_sg.id]
  associate_public_ip_address = true # パブリックIPv4アドレスを有効化
  key_name                    = "honda" # 修正: キーペアを指定

  user_data = <<-EOF
    <powershell>
    # IISのインストール
    Install-WindowsFeature -name Web-Server -IncludeManagementTools

    # デフォルトのIISウェルカムページを有効化
    Set-Content -Path C:\\inetpub\\wwwroot\\index.html -Value '<h1>Welcome to IIS on AWS</h1>'
    </powershell>
  EOF

  tags = {
    Name = "terraform-windows-ec2"
  }
}

実際にやってみた

ここでは、CloudShellでのTerraformのセットアップが完了していることを前提に進めます。

まだセットアップが完了していない方は、過去の記事を参考にしてセットアップを実施してください。

まず、以下のコマンドを入力して、main.tfというファイルを作成します。

vi main.tf

viでは、ファイル編集後にESCキーを押し、:wqで保存して終了します。

main.tf
# 上記の完成した全体のコードをコピーして貼り付けてください。

次に、以下のコマンドで Terraform を初期化します。

terraform init

実際に、以下のように「Terraform has been successfully initialized!」と表示され、成功が確認できました。

Partner and community providers are signed by their developers.

・・・(省略)

Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see

・・・(省略)

rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

次に、以下のコマンドを入力して、確認メッセージが表示されたら「yes」と入力します。

terraform apply

その後、以下のように「Apply complete! Resources: xx added, 0 changed, 0 destroyed.」と表示され、成功したことが確認できました。

Screenshot 2025-01-09 at 19.21.23.png

Terraformで構築したWindowsサーバーをAWSマネジメントコンソールで確認します。以下のスクリーンショットのように、サーバーが1台構築されていることが確認できました。

Screenshot 2025-01-11 at 6.39.11.png

実際にブラウザからアクセスしてみた

構築したサーバーへのログインやRDP接続の手順については、ここでは割愛しますが、過去の記事で詳しく解説していますので、そちらをご参照ください。

今回は、構築したWindowsサーバーのパブリックIPアドレスを使用し、ローカル環境(MacBook)のブラウザからアクセスを試みます。

http://43.207.29.110/

デフォルトのトップページは、以下のように表示されます。

Screenshot 2025-01-11 at 6.42.57.png

さらに、Terraformで設定したHTMLファイルの内容が正しく反映されていることも確認できました。

Screenshot 2025-01-11 at 6.44.09.png

結果として、検証は大成功と言えます!

さらに遊んでみた(笑)

今回は簡易的なページを表示していましたが、別のHTMLファイルに置き換えて新しいページを表示させてみることにしました。

今回表示させたのは、年末年始に技術勉強を共にしたITスクールの仲間たちに向けたメッセージを記したHTMLファイルです。

ちなみに、C:\inetpub\wwwrootディレクトリが主に使用されるディレクトリです。

Screenshot 2025-01-11 at 6.48.52.png

置き換えたHTMLファイルを元に、先ほどアクセスしていたブラウザの画面を更新すると、以下のように正しく表示されました。これにより、IISが問題なく起動していることが確認できました。

Screenshot 2025-01-11 at 6.49.41.png

気がつけば2025年も10日以上が過ぎています。1日1日を大切に過ごしていきたいと改めて感じました...。

まとめ

ここまでお読みいただき、ありがとうございました。今回の内容は、Windowsサーバーを使い慣れている方にとっては基本的な内容だったかもしれません。

しかし、自分で実際に構築してみることで良い復習となりました。

次回は、このWindowsサーバーのIISウェブサーバーを活用し、プロキシ設定やPACファイルに関する技術検証を進めていきたいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?