# [雑記] Systems Manager Automation を試す


published: 2025-08-24

Automation の存在は知っていたが何ができるか気になっており試してみた


## 構成

Automation で EC2 へ接続しコマンドを実行する

![architecture.png](https://lab.enuesaa.dev/prototype/aws-systems-manager-automation-tail-nginx-logs/architecture.png)

## Runbook

試しに Nginx のアクセスログやエラーログを tail します


![runbook.png](https://lab.enuesaa.dev/prototype/aws-systems-manager-automation-tail-nginx-logs/runbook.png)

## 注意

末尾に書いてますが、
ログを取得できても truncate されてしまいます。そのため実務では使えません。


## コード

### `iam.json`

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:SendCommand",
        "ssm:DescribeInstanceInformation",
        "ssm:GetCommandInvocation"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances"
      ],
      "Resource": "*"
    }
  ]
}

```

### `runbook.yml`

```yml
description: Get latest nginx log lines
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
  TargetInstanceId:
    type: AWS::EC2::Instance::Id
    description: EC2 Instance ID
  AutomationAssumeRole:
    type: AWS::IAM::Role::Arn
    description: IAM Role to assume
mainSteps:
  - name: GetAccessLog
    action: aws:runCommand
    nextStep: GetErrorLog
    isEnd: false
    inputs:
      DocumentName: AWS-RunShellScript
      InstanceIds:
        - '{{ TargetInstanceId }}'
      Parameters:
        commands:
          - tail /var/log/nginx/access.log
  - name: GetErrorLog
    action: aws:runCommand
    isEnd: true
    inputs:
      DocumentName: AWS-RunShellScript
      InstanceIds:
        - '{{ TargetInstanceId }}'
      Parameters:
        commands:
          - tail /var/log/nginx/error.log

```

### memos

Runbook

mark: `runbook.yml:1`

アクセスログを tail する

mark: `runbook.yml:22`

エラーログを tail する

mark: `runbook.yml:32`

Automation の実行に必要な IAM 権限

mark: `iam.json:1`

## 実行結果

Nginx のアクセスログを取得して AWS コンソールに表示する


![out.png](https://lab.enuesaa.dev/prototype/aws-systems-manager-automation-tail-nginx-logs/out.png)

## Truncate される

アクセスログが長いと Truncate されます


![truncate.png](https://lab.enuesaa.dev/prototype/aws-systems-manager-automation-tail-nginx-logs/truncate.png)

そのため実務では使えません。
このケースで言えば、ふつうに CloudWatch Agent を入れてログを CloudWatch Logs へ転送するのが良さそうです。


