【小ネタ】 CloudWatch AgentをWindowsに手動インストールしたらPowerShellの32bitと64bitでハマった話

【小ネタ】 CloudWatch AgentをWindowsに手動インストールしたらPowerShellの32bitと64bitでハマった話

2026.05.05

はじめに

皆様こんにちは、あかいけです。

最近、Windows EC2インスタンスにCloudWatch Agentを手動でインストールする機会がありました。
手順自体はかなりシンプルですが、いざ設定を流し込もうとしたところ謎のエラーが発生し、しばらく悩んでしまいました。

調べてみると原因はPowerShellの32bit/64bit問題でした。

何が起きたか

CloudWatch Agentのインストール後、以下のコマンドでAgentを起動しようとしました。

msiexec /i amazon-cloudwatch-agent.msi
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" `
  -a fetch-config -m ec2 `
  -c "file:C:\ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json" -s

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/manual-installation.html#windows-installation

すると以下のエラーが発生しました。

****** processing amazon-cloudwatch-agent ******
CWAConfig : 用語 'C:\Program Files (x86)\Amazon\AmazonCloudWatchAgent\config-downloader.exe' は、コマンドレット、関数、
スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パス
が含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1:313 文字:9
+         CWAConfig -multi_config ${multi_config}
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Program File...-downloader.exe:String) [CWAConfig], CommandNotFoundE
   xception
    + FullyQualifiedErrorId : CommandNotFoundException,CWAConfig

エラーメッセージをよく見ると C:\Program Files (x86)\... というパスが登場しています。
CloudWatch AgentのMSIはたしかに C:\Program Files\Amazon\AmazonCloudWatchAgent\ にインストールされているはずなのに、なぜ(x86)のパスを参照しようとしているのか...?

念のため C:\Program Files (x86)\Amazon\AmazonCloudWatchAgent\ の存在を確認してみましたが、やはり存在しませんでした。

PS C:\> ls "C:\Program Files (x86)\Amazon\AmazonCloudWatchAgent\"
ls : パス 'C:\Program Files (x86)\Amazon\AmazonCloudWatchAgent\' が存在しないため検出できません。

原因と解決方法

原因の特定:32bit PowerShellだった

しばらく悩んだ末、ふと「今開いているPowerShellは何bit?」という疑問が浮かびました。

以下のコマンドでプロセスが32bitかどうか確認できます。

[Environment]::Is64BitProcess

実行すると...

PS C:\> [Environment]::Is64BitProcess
False

False!つまり、32bit版のPowerShellを使っていたというわけです。

なぜ32bitのPowerShellが使われたのか

Windowsには実は2種類のPowerShellが存在します。

PS C:\> Get-ChildItem -Path "C:\Windows" -Recurse -Filter "powershell.exe" 2>$null | Select-Object FullName

FullName
--------
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
パス bit数
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe 32bit
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 64bit

今回の場合検索窓で検索して一番上でヒットしたものが32Bit版であり、何も気にせずそちらを利用していたのが原因でした…。

スクリーンショット 2026-04-17 14.02.21

32bit PowerShellを使うと、Windowsのファイルシステムのリダイレクト機能が働き、System32配下へのアクセスがSysWOW64にリダイレクトされたり、インストール先がProgram Files (x86)を参照するような動作になります。
CloudWatch Agentは64bit版しか提供されていないため、32bit PowerShellからだとパスのズレが生じてエラーになっていたわけです。

https://learn.microsoft.com/ja-jp/windows/win32/winprog64/file-system-redirector

解決方法:64bit PowerShellで実行する

64bit版のPowerShellを使うよう切り替えます。

まず、使用中のPowerShellが64bitかどうかを確認します。

[Environment]::Is64BitProcess

False が返ってきた場合は、64bit PowerShellを明示的に起動してください。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

64bit PowerShellで確認すると True が返ります。

PS C:\Users\Administrator> [Environment]::Is64BitProcess
True

この状態でCloudWatch Agentの設定コマンドを実行すると、正常に動作しました。

PS C:\> & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" `
>>   -a fetch-config -m ec2 `
>>   -c "file:C:\ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json" -s
****** processing amazon-cloudwatch-agent ******
Starting config-downloader, this will map back to a call to amazon-cloudwatch-agent
...
Configuration validation succeeded
AmazonCloudWatchAgent has been stopped
AmazonCloudWatchAgent has been started

無事起動できました。

補足:CloudWatch Agentは64bitのみ提供

CloudWatch AgentのWindows向けMSIのダウンロードURLを見ると、パスにamd64が含まれています。

https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi

また公式のサポート対象OS一覧を見ると、対応アーキテクチャはx86-64とARM64のみで、32bit(x86)はそもそもサポート対象に含まれていません。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/supported-operating-systems.html

さいごに

以上、CloudWatch AgentをWindowsに手動インストールする際にPowerShellの32bit/64bit問題でハマった話でした。
[Environment]::Is64BitProcessでサクっと確認できるので、Windows上でスクリプトを実行してなんかおかしいな?と感じたときはまず確認してみると良いかもしれません。

同じ事象で困っている方の助けになれば幸いです。

この記事をシェアする

関連記事