Help us understand the problem. What is going on with this article?

WorkSpacesにCloudWatchAgentを導入してログ転送する方法

はじめに

WorkSpacesにCloudWatchAgentを導入してログ転送するのに1日かかってしまったので覚書。
方法は二つあるのでそれぞれ軽くメモ。

前提事項

 SSM AgentではなくCloudWatchAgentを使用する。理由はSSM Agentを使用したログ転送が将来的にサポートされなくなるから。

 WorkSpacesにはIAMロールをアタッチできないのでオンプレミス環境とみなしてCloudWatchAgentを導入していく。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html:embed:cite

 上記URLからWindows Server向けのリンクを探しパッケージを落としてインストール。

ロール

 IAMユーザーにCloudWatchAgentAdminPolicyをつけておく。
ログ転送やメトリクスなど用途に応じて削っても問題はないと思われる。(未検証)

方法1

 まずは環境変数にアクセスキーを入れておく方法。この方法は楽だがアクセスキーとシークレットアクセスキーが環境変数に直書きされてしまうのが難点。

環境変数

 下記3つの環境変数を設定する。

AWS_REGION

AWS_SECRET_ACCESS_KEY

AWS_ACCESS_KEY_ID

 ユーザーの環境変数ではなくシステムの環境変数に入れなければならない。またここで入力するアクセスキーはCloudWatchAgentAdminPolicyを先につけたユーザーの物。

コマンド

 PowerShellを管理者権限で実行。PowerShellでのスクリプト実行が無効にされているので適時powershell -ExecutionPolicy RemoteSignedを付けて実行。

下記コマンドで設定ウィザードを実行。

cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
amazon-cloudwatch-agent-config-wizard.exe

 設定ウィザードで質問にEC2かオンプレミスか聞くものがあるが、これはオンプレミスを選択。
設定ウィザード終了後は次のコマンド

.\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -c file:config.json 

 成功したらサービス再起動

起動 .\amazon-cloudwatch-agent-ctl.ps1 -a start
停止 .\amazon-cloudwatch-agent-ctl.ps1 -a stop
ステータス .\amazon-cloudwatch-agent-ctl.ps1 -a status

方法2

 AWS CLIを使う方法。この方法だと環境変数に直書きはなくなる。デメリットとしてD:配下のファイルに設定をしていくのでバンドル化したときに設定が消えてしまう。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-premise.html:embed:cite

AWS CLIのインストール

 リンクにあるようにインストーラーを使用してAWS CLIをインストールする。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-windows.html#install-msi-on-windows:embed:cite

プロファイルの作成

 インストールしたらaws configure --profile AmazonCloudWatchAgentでプロファイルを作成する。アクセスキー、シークレットアクセスキー、リージョン、出力形式を聞かれるので入力。キーは先にロールをアタッチしたユーザーの物。リージョンはログを転送するリージョン。出力形式はjsonでもtextでも大丈夫です。

CloudWatchAgentの設定

 PowerShellを管理者権限で実行。PowerShellでのスクリプト実行が無効にされているので適時powershell -ExecutionPolicy RemoteSignedを付けて実行。

下記コマンドで設定ウィザードを実行。

cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
amazon-cloudwatch-agent-config-wizard.exe

 設定ウィザードで質問にEC2かオンプレミスか聞くものがあるが、これはオンプレミスを選択。
設定ウィザード終了後は次のコマンド

.\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -c file:config.json 

CloudWatchAgentの設定変更

 common-config.tomlを編集します。ファイルはC:\ProgramData\Amazon\AmazonCloudWatchAgentにあります。

# This common-config is used to configure items used for both ssm and cloudwatch access


## Configuration for shared credential.
## Default credential strategy will be used if it is absent here:
##            Instance role is used for EC2 case by default.
##            AmazonCloudWatchAgent profile is used for onPremise case by default.
# [credentials]
#    shared_credential_profile = "{profile_name}"
#    shared_credential_file= "{file_name}"

## Configuration for proxy.
## System-wide environment-variable will be read if it is absent here.
## i.e. HTTP_PROXY/http_proxy; HTTPS_PROXY/https_proxy; NO_PROXY/no_proxy
## Note: system-wide environment-variable is not accessible when using ssm run-command.
## Absent in both here and environment-variable means no proxy will be used.
# [proxy]
#    http_proxy = "{http_url}"
#    https_proxy = "{https_url}"
#    no_proxy = "{domain}

 これを編集して以下のようにします。

# This common-config is used to configure items used for both ssm and cloudwatch access


## Configuration for shared credential.
## Default credential strategy will be used if it is absent here:
##            Instance role is used for EC2 case by default.
##            AmazonCloudWatchAgent profile is used for onPremise case by default.
 [credentials]
    shared_credential_profile = "AmazonCloudWatchAgent"
    shared_credential_file= "D:\\Documents and Settings\\username\\.aws\\credentials"

## Configuration for proxy.
## System-wide environment-variable will be read if it is absent here.
## i.e. HTTP_PROXY/http_proxy; HTTPS_PROXY/https_proxy; NO_PROXY/no_proxy
## Note: system-wide environment-variable is not accessible when using ssm run-command.
## Absent in both here and environment-variable means no proxy will be used.
# [proxy]
#    http_proxy = "{http_url}"
#    https_proxy = "{https_url}"
#    no_proxy = "{domain}

 要注意なのが公式ドキュメントではC:\\Documents and Settings\\username\\.aws\\credentialsにあると書かれていますがこれがWorkSpacesではD:\\Documents and Settings\\username\\.aws\\credentialsになります。CドライブではなくDドライブにユーザーのファイルが置かれています。あとは\\\になる点も地味に注意です。

起動

 後は起動して終了です。起動には下記コマンドを実行。

起動 .\amazon-cloudwatch-agent-ctl.ps1 -a start
停止 .\amazon-cloudwatch-agent-ctl.ps1 -a stop
ステータス .\amazon-cloudwatch-agent-ctl.ps1 -a status
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away