2025/07/18

EC2でWindows Serverの設定あれこれ

## 使用するOSバージョンとAMIの選定
[AWS が Amazon EC2 での Microsoft Windows Server 2025 イメージの提供開始を発表](https://aws.amazon.com/jp/about-aws/whats-new/2024/11/microsoft-windows-server-2025-images-amazon-ec2/)

### 日本語版の事前構成済みWindows ServerのAMIを検索
```
$ aws ec2 describe-images \
  --owners amazon \
  --filters "Name=name,Values=*Windows_Server-2025-Japanese-Full-Base*" \
  --region ap-northeast-1 \
  --query "Images[*].{ID:ImageId,Name:Name}" \
  --output table
--------------------------------------------------------------------------------
|                                DescribeImages                                |
+------------------------+-----------------------------------------------------+
|           ID           |                        Name                         |
+------------------------+-----------------------------------------------------+
|  ami-041265d23fd7eaf09 |  Windows_Server-2025-Japanese-Full-Base-2025.04.09  |
|  ami-04e928802ea4517df |  Windows_Server-2025-Japanese-Full-Base-2025.07.09  |
|  ami-096a6fcfb661eadd3 |  Windows_Server-2025-Japanese-Full-Base-2025.06.11  |
|  ami-09f374e94cc2615d3 |  Windows_Server-2025-Japanese-Full-Base-2025.05.15  |
+------------------------+-----------------------------------------------------+
```

「ami-04e928802ea4517df」を使用する。

## OS設定
### インストール言語の確認
```
PS C:\Users\Administrator> Get-WinUserLanguageList


LanguageTag     : ja
Autonym         : 日本語
EnglishName     : Japanese
LocalizedName   : 日本語
ScriptName      : 日本語
InputMethodTips : {0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}}
Spellchecking   : True
Handwriting     : True
```

### 優先言語の確認
```
PS C:\Users\Administrator> Get-SystemPreferredUILanguage
ja
```

### ロケール設定の確認
```
PS C:\Users\Administrator> Get-WinSystemLocale

LCID             Name             DisplayName
----             ----             -----------
1041             ja-JP            日本語 (日本)
```

### タイムゾーンの確認
```
PS C:\Users\Administrator> Get-TimeZone

Id                         : UTC
DisplayName                : (UTC) 協定世界時
StandardName               : 協定世界時
DaylightName               : 協定世界時
BaseUtcOffset              : 00:00:00
SupportsDaylightSavingTime : False
PS C:\Users\Administrator>
PS C:\Users\Administrator> Set-TimeZone -Id "Tokyo Standard Time"
PS C:\Users\Administrator>
PS C:\Users\Administrator> Get-TimeZone

Id                         : Tokyo Standard Time
DisplayName                : (UTC+09:00) 大阪、札幌、東京
StandardName               : 東京 (標準時)
DaylightName               : 東京 (夏時間)
BaseUtcOffset              : 09:00:00
SupportsDaylightSavingTime : False
```

### ホームロケーションの確認
```
PS C:\Users\Administrator> Get-WinHomeLocation

GeoId HomeLocation
----- ------------
  122 日本
```

### Windows Updateの実施(CLIモジュールは別途インストール済)
```
PS C:\Users\Administrator\Documents> Install-WindowsUpdate -MicrosoftUpdate
PS C:\Users\Administrator\Documents>
```

## RDS for MySQL 接続用クライアントの導入
### ダウンロード
以下からMySQL Community Server 8.4.5 LTSをダウンロードしてClientプログラムのみインストール
https://dev.mysql.com/downloads/mysql/8.4.html

Pathにbinフォルダを追加

### 確認
```
C:\Users\Administrator>mysql --version
mysql  Ver 8.4.5 for Win64 on x86_64 (MySQL Community Server - GPL)

C:\Users\Administrator>
```

### RDSへの接続確認
```
C:\Users\Administrator>mysql -h <エンドポイント名> -u admin -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.4.5 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

### データベース設定
```
mysql> CREATE DATABASE hogedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| hogedb           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> CREATE USER 'hogeuser'@'%' IDENTIFIED BY 'xxxxxxxx';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON hogedb.* TO 'hogeuser'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'hogeuser'@'%';
+--------------------------------------------------------+
| Grants for hogeuser@%                                  |
+--------------------------------------------------------+
| GRANT USAGE ON *.* TO `hogedb`@`%`                   |
| GRANT ALL PRIVILEGES ON `hogedb`.* TO `hogeuser`@`%` |
+--------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
```

## CloudWatchAgentの導入
### MSI パッケージのダウンロード
```
Invoke-WebRequest -Uri "https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi" -OutFile "amazon-cloudwatch-agent.msi"
```

### インストールの実行
```
msiexec /i amazon-cloudwatch-agent.msi
```
インストール先「C:\Program Files\Amazon\AmazonCloudWatchAgent」

### 設定ウィザードの起動(初期構成ファイル作成)
```
cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
.\amazon-cloudwatch-agent-config-wizard.exe
```

### IAM ロールの確認(EC2 にアタッチ)
- CloudWatchAgentServerPolicy
- AmazonSSMManagedInstanceCore(SSM 経由で管理する場合)

### Agent 起動と設定反映
```
& "$Env:ProgramFiles\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" `
  -a fetch-config -m ec2 -s `
  -c file:"$Env:ProgramFiles\Amazon\AmazonCloudWatchAgent\config.json"
```
```
****** processing amazon-cloudwatch-agent ******
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 timesSuccessfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp
Start configuration validation...
2025/07/17 11:37:58 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp ...
2025/07/17 11:37:58 I! Valid Json input schema.
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 times2025/07/17 11:37:58 D! ec2tagger processor required because append_dimensions is set
2025/07/17 11:37:58 D! ec2tagger processor required because append_dimensions is set
2025/07/17 11:37:58 Configuration validation first phase succeeded
Configuration validation second phase succeeded
Configuration validation succeeded
AmazonCloudWatchAgent has been stopped
AmazonCloudWatchAgent has been started
```

### 動作確認(ステータス表示)
```
& "$Env:ProgramFiles\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a status -m ec2
```
```(実行結果)
{
  "status": "running",
  "starttime": "2025-07-17T11:37:59",
  "configstatus": "configured",
  "version": "1.300057.0b1161"
}
```

## JDK 1.8.0_231
### ダウンロードとインストール
以下のアーカイブから「jdk-8u231-windows-x64.exe」をダウンロード
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

### 環境変数設定(システム)
JAVA_HOME = C:\Java\jdk1.8.0_231
Path に %JAVA_HOME%\bin を追加

### 動作確認
```
C:\Users\Administrator>java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

C:\Users\Administrator>
```

## Apache 2.4
### ダウンロードとインストール
以下から「Apache 2.4.64-250710 Win64」をダウンロード
https://www.apachelounge.com/download/

C:Apache24へ展開

### httpd.confを修正
SSLとTomcat連携以外の設定項目は、現行に合わせて指定する。

### 自己署名SSL証明の作成
```
# 自己署名SSL証明の作成
cd C:Apache24\bin
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout server.key -out server.crt

# 以下へ保存
C:\Apache24\conf\ssl\server.key
C:\Apache24\conf\ssl\server.crt
```

### 証明書の検証
```
c:\Apache24\bin>openssl.exe x509 -in ..\conf\ssl\server.crt -text -noout
Certificate:

```

### HTTPS対応 VirtualHost の設定(httpd-ssl.conf)
```
Listen 443
<VirtualHost *:443>
DocumentRoot "${SRVROOT}/htdocs"
# Elastic IPを指定
ServerName xx.xx.xx.xx
ErrorLog "${SRVROOT}/logs/ssl_error.log"
CustomLog "${SRVROOT}/logs/ssl_access.log" combined
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"

<Directory "${SRVROOT}/htdocs">
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>
<Location /testweb/>
    ProxyPass ajp://localhost:8009/testweb/
</Location>
</VirtualHost>
```

Include httpd-ssl.conf を httpd.conf に追加して有効化。

### 設定ファイルの構文チェック
```
c:\Apache24\bin>httpd -t
Syntax OK
```

### Apacheのサービス登録
管理者権限でコマンドプロンプトを起動
```
C:\Users\Administrator>cd C:\Apache24\bin
C:\Apache24\bin>httpd -t
Syntax OK

# サービス登録
C:\Apache24\bin>httpd.exe -k install -n "Apache24"
Installing the 'Apache24' service
The 'Apache24' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.

# 遅延開始に変更(Tomcatの後に起動したいため)
C:\Apache24\bin>sc config Apache24 start= delayed-auto
[SC] ChangeServiceConfig SUCCESS

# 起動・停止コマンド
net start Apache24
net stop Apache24
```

## Tomcat 6.0
### ダウンロードとインストール
以下から「apache-tomcat-6.0.53-windows-x64.zip」をダウンロード
https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.53/bin/

C:Tomcat6.0へ展開

### conf/server.xmlを修正
- HTTP用のConnectorを現行に合わせて修正(使われてないと思う・・;)
```
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="180000" 
               maxParameterCount="30000"
               maxPostSize="4194304"
               redirectPort="8443" />
```

- AJP用のConnectorを現行に合わせて修正
```
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
               connectionTimeout="180000" 
               maxParameterCount="60000"
               maxPostSize="209715200" />
```

### conf/Catalina/localhost/testweb.xmlを修正(アプリ側かな・・;)
```
<Context path="/testweb" reloadable="false" docBase="C:\testweb\WebContent"  >
        <Resource name="jdbc/testdb"
                  auth="Container"
                  type="javax.sql.DataSource"
                  factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
                  driverClassName="com.mysql.cj.jdbc.Driver"
                  url="jdbc:mysql://<エンドポイント名>:3306/hogedb?useSSL=false&serverTimezone=Asia/Tokyo"
                  username="hogeuser"
                  password=""
                  maxActive="100"
                  maxIdle="10"
                  removeAbandoned="true"
                  removeAbandonedTimeout="180"
                  logAbandoned="true" />
</Context>
```

### 手起動
```
C:\tomcat6\bin\startup.bat
```

### Tomcatのサービス登録

管理者権限でコマンドプロンプトを起動
```
c:\>cd c:\Tomcat6.0\apache-tomcat-6.0.53\bin

c:\Tomcat6.0\apache-tomcat-6.0.53\bin>
c:\Tomcat6.0\apache-tomcat-6.0.53\bin>service.bat install
Installing the service 'Tomcat6' ...
Using CATALINA_HOME:    "c:\Tomcat6.0\apache-tomcat-6.0.53"
Using CATALINA_BASE:    "c:\Tomcat6.0\apache-tomcat-6.0.53"
Using JAVA_HOME:        "C:\Program Files\Java\jdk1.8.0_231"
Using JRE_HOME:         "C:\Program Files\Java\jdk1.8.0_231\jre"
Using JVM:              "C:\Program Files\Java\jdk1.8.0_231\jre\bin\server\jvm.dll"
The service 'Tomcat6' has been installed.

c:\Tomcat6.0\apache-tomcat-6.0.53\bin>
c:\Tomcat6.0\apache-tomcat-6.0.53\bin>sc config Tomcat6 start= auto
[SC] ChangeServiceConfig SUCCESS

c:\Tomcat6.0\apache-tomcat-6.0.53\bin>
```


## Apache と Tomcat の連携
### Apache ↔ Tomcat(mod_proxy_ajp)リクエスト連携の流れ
```
sequenceDiagram
  Client->>Apache: https://xx.xx.xx.xx/testweb/
  Apache->>Apache: Location /testweb/ に一致
  Apache->>Tomcat: AJPでリクエスト転送 (8009ポート)
  Tomcat->>Apache: AJPレスポンス返却
  Apache->>Client: レスポンス送信(HTML等)
```

### 連携方式(Apache側の設定方法として2通り)
- mod_jk方式
 mod_jk.soモジュールを使い、JkMountディレクティブやworkers.propertiesで指定する方式

- ✔リバースプロキシ方式
 mod_proxt_ajp.soモジュールを使い、ProxyPass/Locationで指定する方式

指定内容
```
# モジュールの有効化
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

# 以下を指定
<Location /testweb/>
    ProxyPass ajp://localhost:8009/testweb/
</Location>
```


## Windows環境でのログローテーション
### Apacheログ
1. rotatelogs.exe(Apache付属)
```
CustomLog "|bin/rotatelogs.exe logs/access_%Y%m%d.log 86400 540" combined
ErrorLog "|bin/rotatelogs.exe logs/error_%Y%m%d.log 86400 540"
```

2. PowerShellバッチで削除処理
```
# 例)7日以上前のログを削除
Get-ChildItem "C:\Apache24\logs\access_log*.log" | Where-Object {
  $_.LastWriteTime -lt (Get-Date).AddDays(-7)
} | Remove-Item
```
タスクスケジューラで毎日実行

### Tomcatログ
- %CATALINA_HOME%\conf\logging.properties にて自動ローテーション設定。

0 件のコメント:

コメントを投稿

人気の投稿