💡

Systems Managerを使用したCloudWatchエージェントのインストールとアプリケーションログの出力

2022/02/10に公開

前提

  • VPC、サブネットなどのネットワーク周りが構築済み
  • プライベートサブネットにEC2インスタンス(Linux)を起動済み

作業の流れ

  1. VPCエンドポイント作成
  2. IAMロール作成
  3. CloudWatchエージェントのインストール
  4. CloudWatchエージェントのパラメータ設定

1. VPCエンドポイント作成

今回必要なエンドポイントは以下。

  • com.amazonaws.region.ssm
  • com.amazonaws.region.ec2messages
  • com.amazonaws.region.ssmmessages

作成方法は、こちらを参考

作成時に選択するセキュリティグループは、
以下のインバウンドルールを設定したものをアタッチしてください。

  • port:443
  • source:使用するVPCのCIDR

2. IAMロール作成

続いて、EC2インスタンスへアタッチするIAMロールを作成します。
ユースケースで EC2 を選択して次へ

以下のポリシーをアタッチ。

  • AmazonSSMManagedInstanceCore(AWS管理ポリシー)
  • CloudWatchAgentServerPolicy (AWS管理ポリシー)


任意のロール名、説明を入力

信頼されたエンティティは変更せずこのまま進みます。

任意でタグを追加後、ロールを作成をクリックして完了となります。

作成したIAMロールは使用するEC2インスタンスへアタッチしてください。

補足

ポリシーにCloudWatchAgentServerPolicyをアタッチしましたが、
アクセス権限の中に以下の様な記述があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData",
                "ec2:DescribeVolumes",
                "ec2:DescribeTags",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams",
                "logs:DescribeLogGroups",
                "logs:CreateLogStream",
                "logs:CreateLogGroup"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter"
            ],
            "Resource": "arn:aws:ssm:*:*:parameter/AmazonCloudWatch-*"
        }
    ]
}

上記のAWS管理ポリシーを使用する場合、後程作成するSSMパラメータストアのリソース名が「AmazonCloudWatch-」から始まるものに限定される形となってしまいます。
任意の名前を設定する必要がある場合は、上記のJSONを使用してカスタムポリシーを作成し、以下の「AmazonCloudWatch-*"」の箇所を修正してください。

"Resource": "arn:aws:ssm:*:*:parameter/AmazonCloudWatch-*"

3. CloudWatchエージェントのインストール

インストールする準備が出来たので実際に行っていきます。
インストールはSystems Manager RunCommandを使用します。
設定内容は以下。

  • ドキュメント:AWS-ConfigureAWSPackage
  • バージョン:1(デフォルト)

  • Action: Install
  • Installation Type: Uninstall and reinstall
  • Name: AmazonCloudWatchAgent
  • Version: latest
  • Additional Arguments: デフォルトのまま

今回、ターゲットは手動で選択します。
選択可能なものが表示されるのでインストール先のインスタンスにチェックを入れてください。
注意点として、インスタンスが停止していると候補として表示されません。
また、インスタンスをプライベートサブネットに配置している場合はVPCエンドポイントが未設定の場合、起動済みでも表示されないのでこちらも注意が必要となります。

インスタンス選択以降の設定は今回以下としています。


全て入力したら実行をクリックしてインストールを開始します。

ステータスが成功となったらインストールは完了となります。

4. CloudWatchエージェントのパラメータ設定

CloudWatchエージェントのインストール後、ログ出力の設定を
Systems Managerパラメータストアで作成していきます。

名前は任意名ですが、IAMロール作成時に記載した通り
AWS管理ポリシーの場合、「AmazonCloudWatch-*"」から始まるものに
限定される為、今回はそれに従い設定していきます。
それ以外の設定については以下。

  • 説明 : 任意
  • 利用枠: 標準
  • タイプ: 文字列
  • データ型: text

値には以下のJSONを記述します。

{
    "logs":{
        "logs_collected":{
            "files":{
                "collect_list":[
                    {
                        "file_path":"/var/log/messages",
                        "log_group_name":"/var/log/messages",
                        "log_stream_name":"{instance_id}"
                    },
                    {
                        "file_path":"/var/log/httpd/access_log",
                        "log_group_name":"HttpAccessLog",
                        "log_stream_name":"{instance_id}"
                    },
                    {
                        "file_path":"/var/log/httpd/error_log",
                        "log_group_name":"HttpErrorLog",
                        "log_stream_name":"{instance_id}"
                    }
                ]
            }
        }
    }
}

最後に任意でタグを設定後、パラメータを作成をクリックして完了となります。

最後に作成した設定をCloudWatchエージェントと同様、
SSM RunCommandで反映していきます。

  • ドキュメント: AmazonCloudWatch-ManageAgent
  • バージョン: 6(デフォルト)

  • Action: Configure
  • Mode: ec2
  • Optional Configuration Source: ssm
  • Optional Configuration Location: パラメータストアで作成したパラメータ名

上記以外はデフォルトのまま進みます。

ターゲット以降についてはCloudWatchエージェントインストール時の設定と同様としています。

設定後、実行をクリックしてステータスが成功となれば反映は完了です。

まとめ

今回はSystems Managerを使用して実施してみましたが、
インスタンス内で作業せずにCloudWatchLogsとの連携まで出来るのは非常に便利ですね。
Systems Managerは他の用途でも使用する場面の多そうなサービスですので、
今後もいろいろ試していければと思います。

参考記事

AmazonCloudWatch-ManageAgentドキュメントでCloudWatchエージェントを設定する際の挙動を確認した
プライベートサブネットにあるEC2インスタンスを Systems Manager で管理する
Systems Managerを使ってCloudWatchエージェントを導入・設定してみた

Discussion