Bluelink
HTTP API Referencev1

Stream Change Staging Events

Stream events from the change staging process for the given change set ID. This will return a stream of events as they occur or that have recently occurred over the Server-Sent Events (SSE) protocol. The Last-Event-ID header can be used to resume the stream from a specific event ID.

GET
/deployments/changes/{id}/stream
AuthorizationBearer <token>

OAuth2/OIDC auth using JWT Bearer tokens. The token issuer will be configured independently for each Deploy Engine instance.

In: header

Path Parameters

idstring

The ID of the change set.

Header Parameters

Bluelink-Signature-V1?string

The Bluelink Signature v1 authentication mechanism can be used to authenticate requests to the Deploy Engine. See the Bluelink Signature v1 documentation for more information on how to use this authentication mechanism. This is not required if the request is authenticated using an OAuth2/OIDC-issued JWT or an API key.

Last-Event-ID?string

The ID of the last event received. This can be used to resume the stream from a specific event ID.

Response Body

curl -X GET "https://{host}/{basePath}/v1/deployments/changes/16ef8989-af00-4a4a-8164-72493ceb1aa0/stream" \  -H "Bluelink-Signature-V1: string" \  -H "Last-Event-ID: 60d7c6c5-3984-42b9-a3c1-ae8a47a9bf55"
{
  "event": "resourceChanges",
  "id": "60d7c6c5-3984-42b9-a3c1-ae8a47a9bf55",
  "data": {
    "resourceName": "my-resource",
    "removed": false,
    "new": false,
    "changes": {
      "appliedResourceInfo": {
        "resourceId": "60d7c6c5-3984-42b9-a3c1-ae8a47a9bf55",
        "resourceName": "my-new-resource",
        "instanceId": "a97cf86f-2a5e-4614-984e-da480a0daa7a",
        "currentResourceState": {
          "id": "60d7c6c5-3984-42b9-a3c1-ae8a47a9bf55",
          "name": "my-existing-resource",
          "type": "aws/lambda/function",
          "templateName": "my-template",
          "instanceId": "a97cf86f-2a5e-4614-984e-da480a0daa7a",
          "status": 2,
          "preciseStatus": 3,
          "lastStatusUpdateTimestamp": 1678901234,
          "lastDeployedTimestamp": 1678901234,
          "lastDeployAttemptTimestamp": 1678901234,
          "specData": {
            "functionName": "my-lambda-function",
            "handler": "index.handler",
            "runtime": "nodejs20.x",
            "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function"
          },
          "description": "A lambda function for processing events",
          "metadata": {
            "displayName": "My Lambda Function",
            "annotations": {
              "property1": null,
              "property2": null
            },
            "labels": {
              "property1": "processing",
              "property2": "processing"
            },
            "custom": {}
          },
          "dependsOnResources": [
            "my-other-resource"
          ],
          "dependsOnChildren": [
            "my-other-child-blueprint"
          ],
          "failureReasons": [
            "The resource could not be created because the IAM role does not exist."
          ],
          "drifted": false,
          "lastDriftDetectedTimestamp": 1678901234,
          "durations": {
            "configCompleteDuration": 10000,
            "totalDuration": 20000,
            "attemptDurations": [
              20000
            ]
          }
        },
        "resourceWithResolvedSubs": {
          "type": "aws/lambda/function",
          "description": "A lambda function for processing events",
          "metadata": {
            "displayName": "My Lambda Function",
            "annotations": {
              "property1": null,
              "property2": null
            },
            "labels": {
              "property1": "processing",
              "property2": "processing"
            },
            "custom": {}
          },
          "condition": true,
          "linkSelector": {
            "byLabel": {
              "property1": "processing",
              "property2": "processing"
            }
          },
          "spec": {
            "functionName": "my-lambda-function",
            "handler": "index.handler",
            "runtime": "nodejs20.x"
          }
        }
      },
      "mustRecreate": false,
      "modifiedFields": [
        {
          "fieldPath": "my-field",
          "prevValue": "old-value",
          "newValue": "new-value",
          "mustRecreate": false
        }
      ],
      "newFields": [
        {
          "fieldPath": "my-field",
          "prevValue": "old-value",
          "newValue": "new-value",
          "mustRecreate": false
        }
      ],
      "removedFields": [
        "my-old-field"
      ],
      "unchangedFields": [
        "my-field"
      ],
      "computedFields": [
        "my-computed-field"
      ],
      "fieldChangesKnownOnDeploy": [
        "my-field"
      ],
      "conditionKnownOnDeploy": true,
      "newOutboundLinks": {
        "property1": {
          "modifiedFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "newFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "removedFields": [
            "my-old-field"
          ],
          "unchangedFields": [
            "my-field"
          ],
          "fieldChangesKnownOnDeploy": [
            "my-field"
          ]
        },
        "property2": {
          "modifiedFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "newFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "removedFields": [
            "my-old-field"
          ],
          "unchangedFields": [
            "my-field"
          ],
          "fieldChangesKnownOnDeploy": [
            "my-field"
          ]
        }
      },
      "outboundLinkChanges": {
        "property1": {
          "modifiedFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "newFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "removedFields": [
            "my-old-field"
          ],
          "unchangedFields": [
            "my-field"
          ],
          "fieldChangesKnownOnDeploy": [
            "my-field"
          ]
        },
        "property2": {
          "modifiedFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "newFields": [
            {
              "fieldPath": "my-field",
              "prevValue": "old-value",
              "newValue": "new-value",
              "mustRecreate": false
            }
          ],
          "removedFields": [
            "my-old-field"
          ],
          "unchangedFields": [
            "my-field"
          ],
          "fieldChangesKnownOnDeploy": [
            "my-field"
          ]
        }
      },
      "removedOutboundLinks": [
        "my-resource-a::my-resource-b"
      ]
    },
    "resolveOnDeploy": [
      "spec.field2"
    ],
    "conditionKnownOnDeploy": false,
    "timestamp": 1678901234
  }
}
{
  "message": "Unauthorized"
}
{
  "message": "Not found"
}
{
  "message": "An unexpected error occurred"
}