> ## Documentation Index
> Fetch the complete documentation index at: https://docs.maia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# CloudWatch Publish

export const ComponentMetadata = ({warehouses, unsupportedWarehouses = [], componentType, connectionInputs, connectionOutputs}) => {
  const allWarehouses = [...warehouses.map(w => ({
    name: w,
    supported: true
  })), ...unsupportedWarehouses.map(w => ({
    name: w,
    supported: false
  }))];
  return <div style={{
    background: 'var(--colors-background-light, #f9fafb)',
    border: '1px solid var(--colors-border-default, #e5e7eb)',
    borderRadius: '12px',
    padding: '20px 28px',
    marginBottom: '28px',
    boxShadow: '0 1px 4px rgba(0,0,0,0.10)'
  }}>
      <table style={{
    width: '100%',
    borderCollapse: 'collapse'
  }}>
        <tbody>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle',
    width: '180px'
  }}>Project Availability</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>
              <div style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '8px'
  }}>
                {allWarehouses.map((w, i) => <span key={i} style={{
    background: w.supported ? '#dcfce7' : '#fee2e2',
    color: w.supported ? '#15803d' : '#b91c1c',
    border: `1px solid ${w.supported ? '#bbf7d0' : '#fca5a5'}`,
    borderRadius: '9999px',
    padding: '3px 12px',
    fontSize: '0.85rem',
    fontWeight: '500',
    whiteSpace: 'nowrap'
  }}>
                    {w.name} {w.supported ? '✅' : '❌'}
                  </span>)}
              </div>
            </td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Component Type</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>{componentType}</td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Connection Inputs</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>{connectionInputs}</td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Connection Outputs</td>
            <td style={{
    verticalAlign: 'middle'
  }}>{connectionOutputs}</td>
          </tr>
        </tbody>
      </table>
    </div>;
};

<ComponentMetadata warehouses={["Snowflake", "Amazon Redshift"]} unsupportedWarehouses={["Databricks"]} componentType="Orchestration, Test" connectionInputs="One" connectionOutputs="Unlimited" />

CloudWatch Publish is an orchestration component that lets you publish metrics to [CloudWatch](https://aws.amazon.com/cloudwatch/). Within the AWS console, you may then attach alarms to get alerts when metrics values fall out of a normal range.

If the component requires access to a cloud provider (AWS, Azure, or Google Cloud), it will use credentials as follows:

* If using [Matillion Full SaaS](/docs/guides/runner-overview#matillion-full-saas): The component will use the [cloud credentials](/docs/guides/cloud-credentials) associated with your environment to access resources.
* If using [Hybrid SaaS](/docs/guides/runner-overview#hybrid-saas): By default the component will inherit the agent's execution role (service account role). However, if there are [cloud credentials](/docs/guides/cloud-credentials) associated to your environment, these will overwrite the role.

## Properties

<ResponseField name="Name" type="string" required>
  A human-readable name for the component.
</ResponseField>

{/* <!-- param-start:[region] | warehouses: [snowflake, redshift] --> */}

<ResponseField name="Region" type="drop-down" required>
  The AWS region that the metrics are to be published to. The default region is eu-west-1.
</ResponseField>

{/* <!-- param-start:[namespace] | warehouses: [snowflake, redshift] --> */}

<ResponseField name="Namespace" type="string" required>
  All Cloudwatch metrics belong to a Namespace. The value entered here will become a category under the "Custom Metrics" section of the Cloudwatch console.

  Namespaces starting with "AWS" are reserved, so you should avoid using AWS as the prefix for the Namespace.
</ResponseField>

{/* <!-- param-start:[metrics] | warehouses: [snowflake, redshift] --> */}

<ResponseField name="Metrics" type="column editor" required>
  Cloudwatch metrics are numeric, which allows for indicators (using only 0 and 1), proportions/percentages (using real values between 0.0 to 1.0), or domain-specific values such as rowcounts or runtimes.

  In the Metrics editor, click **+** to add a metric. For each metric, enter:

  * **Metric:** The name of the metric in the given Namespace. Metrics are created on demand, so there is no requirement to create the metric in advance. They are generally shown in Cloudwatch within a few minutes.
  * **Numeric Variable:** Select a variable from the drop-down. This variable must already exist as a pipeline variable or project variable whose type is Numeric. This variable MUST have a default value set or an error will be returned. Read [Project and pipeline variables](/docs/guides/variables) for more information.

  Click **Save** to exit the editor and save the Metric.
</ResponseField>
