From c54d060f5624a9e1ef75a52d5d3bc2becf1545ae Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Thu, 20 Nov 2025 12:30:36 +0530 Subject: [PATCH 01/11] Updated the actions catalog and restructured it --- extract_actions.py | 156 + .../actions-catalog/actions-catalog.mdx | 333 +- .../actions-catalog/aws-cloudwatch.mdx | 422 ++ .../actions-catalog/aws-ec2.mdx | 709 +++ .../actions-catalog/aws-execute-api.mdx | 410 ++ .../actions-catalog/aws-lambda.mdx | 772 +++ .../actions-catalog/aws-s3.mdx | 1233 ++++ .../actions-catalog/aws-sns.mdx | 270 + .../actions-catalog/aws-sqs.mdx | 397 ++ .../actions-catalog/aws-systemsmanager.mdx | 923 +++ .../actions-catalog/aws.mdx | 4935 ----------------- .../actions-catalog/http-delete.mdx | 193 + .../actions-catalog/http-get.mdx | 181 + .../actions-catalog/http-post.mdx | 191 + .../actions-catalog/http-put.mdx | 202 + .../actions-catalog/http.mdx | 664 --- .../actions-catalog/new-relic.mdx | 1132 ---- .../actions-catalog/newrelic-ingest.mdx | 356 ++ .../actions-catalog/newrelic-nerdgraph.mdx | 198 + .../actions-catalog/newrelic-notification.mdx | 537 ++ .../actions-catalog/newrelic-nrdb.mdx | 137 + .../actions-catalog/others.mdx | 419 -- .../{pagerduty.mdx => pagerduty-incident.mdx} | 17 +- .../{communication.mdx => slack-chat.mdx} | 12 +- .../actions-catalog/utils-datetime.mdx | 204 + .../actions-catalog/utils-transform.mdx | 142 + .../actions-catalog/utils-uuid.mdx | 118 + 27 files changed, 8096 insertions(+), 7167 deletions(-) create mode 100644 extract_actions.py create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager.mdx delete mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put.mdx delete mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx delete mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb.mdx delete mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{pagerduty.mdx => pagerduty-incident.mdx} (97%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{communication.mdx => slack-chat.mdx} (95%) create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid.mdx diff --git a/extract_actions.py b/extract_actions.py new file mode 100644 index 00000000000..383d17ebfd1 --- /dev/null +++ b/extract_actions.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +""" +Script to extract action sections from existing files and create new organized files +""" + +import re +import os + +BASE_DIR = "src/content/docs/workflow-automation/setup-and-configuration/actions-catalog" + +# Define file extractions mapping +# Format: (source_file, line_start, line_end, dest_file, title_suffix, description) +AWS_EXTRACTIONS = [ + # EC2 + ("aws.mdx", 773, 1449, "aws-ec2.mdx", "AWS EC2 actions", "EC2 instance and snapshot management"), + # SystemsManager + ("aws.mdx", 1451, 2341, "aws-systemsmanager.mdx", "AWS Systems Manager actions", "Systems Manager automation and document operations"), + # Execute API + ("aws.mdx", 2343, 2720, "aws-execute-api.mdx", "AWS Execute API", "Execute any AWS API operation"), + # CloudWatch + ("aws.mdx", 2721, 3110, "aws-cloudwatch.mdx", "AWS CloudWatch actions", "CloudWatch Logs operations"), + # S3 + ("aws.mdx", 3111, 4311, "aws-s3.mdx", "AWS S3 actions", "S3 bucket and object operations"), + # SNS + ("aws.mdx", 4312, 4549, "aws-sns.mdx", "AWS SNS actions", "SNS topic operations"), + # SQS + ("aws.mdx", 4550, 4914, "aws-sqs.mdx", "AWS SQS actions", "SQS queue operations"), +] + +HTTP_EXTRACTIONS = [ + ("http.mdx", 34, 180, "http-get.mdx", "HTTP GET", "HTTP GET request operations"), + ("http.mdx", 181, 337, "http-post.mdx", "HTTP POST", "HTTP POST request operations"), + ("http.mdx", 338, 505, "http-put.mdx", "HTTP PUT", "HTTP PUT request operations"), + ("http.mdx", 506, 665, "http-delete.mdx", "HTTP DELETE", "HTTP DELETE request operations"), +] + +NEWRELIC_EXTRACTIONS = [ + ("new-relic.mdx", 30, 353, "newrelic-ingest.mdx", "New Relic Ingest actions", "Send events and logs to New Relic"), + ("new-relic.mdx", 355, 520, "newrelic-nerdgraph.mdx", "New Relic NerdGraph actions", "Execute NerdGraph queries and mutations"), + ("new-relic.mdx", 522, 626, "newrelic-nrdb.mdx", "New Relic NRDB actions", "Query New Relic database"), + ("new-relic.mdx", 628, 1133, "newrelic-notification.mdx", "New Relic Notification actions", "Send notifications through New Relic"), +] + +COMMUNICATION_EXTRACTIONS = [ + ("communication.mdx", 32, 445, "slack-chat.mdx", "Slack Chat actions", "Slack messaging operations"), +] + +PAGERDUTY_EXTRACTIONS = [ + ("pagerduty.mdx", 23, 1016, "pagerduty-incident.mdx", "PagerDuty Incident actions", "PagerDuty incident management"), +] + +UTILS_EXTRACTIONS = [ + ("others.mdx", 14, 197, "utils-datetime.mdx", "Utilities - DateTime", "Date and time utilities"), + ("others.mdx", 199, 320, "utils-transform.mdx", "Utilities - Transform", "Data transformation utilities"), + ("others.mdx", 322, 420, "utils-uuid.mdx", "Utilities - UUID", "UUID generation utilities"), +] + +def read_file_lines(filepath, start_line, end_line): + """Read specific lines from a file""" + with open(filepath, 'r') as f: + lines = f.readlines() + return ''.join(lines[start_line-1:end_line]) + +def get_prerequisites(source_file): + """Extract prerequisites section from source file""" + with open(source_file, 'r') as f: + content = f.read() + match = re.search(r'## Prerequisites.*?(?=##|\Z)', content, re.DOTALL) + if match: + return match.group(0) + return "" + +def create_file(source_file, start_line, end_line, dest_file, title, description): + """Create a new action file from extracted content""" + source_path = os.path.join(BASE_DIR, source_file) + dest_path = os.path.join(BASE_DIR, dest_file) + + # Get prerequisites + prereqs = get_prerequisites(source_path) + + # Get action content + action_content = read_file_lines(source_path, start_line, end_line) + + # Create frontmatter + tags_base = [ + "workflow automation", + "workflow", + "workflow automation actions", + ] + + if "aws" in dest_file.lower(): + tags_base.extend(["AWS actions", f"{title}"]) + elif "http" in dest_file.lower(): + tags_base.extend(["HTTP actions", f"{title}"]) + elif "newrelic" in dest_file.lower(): + tags_base.extend(["New Relic actions", f"{title}"]) + elif "slack" in dest_file.lower(): + tags_base.extend(["Slack actions", "communication actions", f"{title}"]) + elif "pagerduty" in dest_file.lower(): + tags_base.extend(["PagerDuty actions", f"{title}"]) + elif "utils" in dest_file.lower(): + tags_base.extend(["utility actions", f"{title}"]) + + tags_str = "\n - ".join(tags_base) + + frontmatter = f"""--- +title: "{title}" +tags: + - {tags_str} +metaDescription: "A list of available {title.lower()} in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for {title.lower()} available in the workflow automation actions catalog. These actions enable you to {description.lower()}. + +""" + + # Write the file + with open(dest_path, 'w') as f: + f.write(frontmatter) + if prereqs: + f.write(prereqs + "\n\n") + f.write(action_content) + + print(f"Created: {dest_file}") + +def main(): + """Main execution""" + print("Starting extraction...") + + # Process all extractions + all_extractions = ( + AWS_EXTRACTIONS + + HTTP_EXTRACTIONS + + NEWRELIC_EXTRACTIONS + + COMMUNICATION_EXTRACTIONS + + PAGERDUTY_EXTRACTIONS + + UTILS_EXTRACTIONS + ) + + for source, start, end, dest, title, desc in all_extractions: + try: + create_file(source, start, end, dest, title, desc) + except Exception as e: + print(f"Error creating {dest}: {e}") + + print("\nExtraction complete!") + +if __name__ == "__main__": + main() diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx index 0d0ea809374..1cb040e9e75 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx @@ -17,16 +17,333 @@ freshnessValidatedDate: never New Relic actions catalog provides actions that can be performed against your infrastructure and integrations. You can orchestrate and automate your end-to-end processes by linking together actions that perform tasks in your cloud providers, and New Relic accounts. -## Available action catalogs [#available-catalogs] +The actions follow a hierarchical naming convention: `company.product.action`, making it easy to find and use the right action for your workflow. -The following action catalogs are available for workflow automation: +## How to use this catalog -- [AWS actions](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws) - Integrate with AWS services including Lambda, EC2, and Systems Manager -- [Communication actions](/docs/workflow-automation/setup-and-configuration/actions-catalog/communication) - Send notifications and messages through various communication channels -- [HTTP actions](/docs/workflow-automation/setup-and-configuration/actions-catalog/http) - Make HTTP requests to external APIs and services -- [New Relic actions](/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic) - Interact with New Relic platform features and data -- [PagerDuty actions](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty) - Manage PagerDuty incidents and integrations -- [Utility actions](/docs/workflow-automation/setup-and-configuration/actions-catalog/others) - Perform common data transformation and utility operations +This catalog is organized by provider and product hierarchy. You can: +- Browse the complete list of actions in the table below +- Use your browser's search function (Ctrl+F or Cmd+F) to quickly find specific actions +- Navigate to detailed documentation pages for each product category +- Use the left navigation to drill down into specific action categories + +## Complete actions catalog + +The table below lists all available actions. Click on any action name to view its detailed documentation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Action NameCategoryDescriptionDocumentation
`aws.cloudwatch.getLogEvents`AWS CloudWatchGet log events from CloudWatch Logs[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch#aws.cloudwatch.getLogEvents)
`aws.cloudwatch.putLogEvents`AWS CloudWatchPut log events to CloudWatch Logs[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch#aws.cloudwatch.putLogEvents)
`aws.ec2.deleteSnapshot`AWS EC2Delete an EBS snapshot[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2deletesnapshot)
`aws.ec2.rebootInstances`AWS EC2Reboot EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2rebootinstances)
`aws.ec2.runInstances`AWS EC2Launch new EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#aws.ec2.runInstances)
`aws.ec2.startInstances`AWS EC2Start stopped EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2startinstances)
`aws.ec2.terminateInstances`AWS EC2Terminate EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2terminateinstances)
`aws.execute.api`AWS Execute APIExecute any AWS API operation[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api#awsexecuteapi)
`aws.lambda.getFunction`AWS LambdaGet Lambda function configuration[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.getFunction)
`aws.lambda.invoke`AWS LambdaInvoke a Lambda function[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.invoke)
`aws.lambda.listAliases`AWS LambdaList Lambda function aliases[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.listAliases)
`aws.lambda.updateFunctionConfiguration`AWS LambdaUpdate Lambda function configuration[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.updateFunctionConfiguration)
`aws.s3.deleteObject`AWS S3Delete an object from S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.deleteObject)
`aws.s3.getObject`AWS S3Get an object from S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.getObject)
`aws.s3.listObjectsV2`AWS S3List objects in an S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.listObjectsV2)
`aws.s3.putObject`AWS S3Add an object to S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.putObject)
`aws.sns.publish`AWS SNSPublish a message to SNS topic[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns#aws.sns.publish)
`aws.sqs.receiveMessage`AWS SQSReceive a message from SQS queue[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs#aws.sqs.receiveMessage)
`aws.sqs.sendMessage`AWS SQSSend a message to SQS queue[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs#aws.sqs.sendMessage)
`aws.systemsManager.deleteDocument`AWS Systems ManagerDelete a Systems Manager document[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerdeletedocument)
`aws.systemsManager.startAutomation`AWS Systems ManagerStart a Systems Manager automation[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerstartautomation)
`aws.systemsManager.waitForAutomationStatus`AWS Systems ManagerWait for automation execution status[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerwaitforautomationstatus)
`aws.systemsManager.writeDocument`AWS Systems ManagerCreate or update a Systems Manager document[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerwritedocument)
`http.delete`HTTPPerform HTTP DELETE request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete#httpdelete)
`http.get`HTTPPerform HTTP GET request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get#httpget)
`http.post`HTTPPerform HTTP POST request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post#httppost)
`http.put`HTTPPerform HTTP PUT request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put#httpput)
`newrelic.ingest.sendEvents`New Relic IngestSend custom events to New Relic[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest#newrelic.ingest.sendEvents)
`newrelic.ingest.sendLogs`New Relic IngestSend logs to New Relic[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest#newrelic.ingest.sendLogs)
`newrelic.nerdgraph.execute`New Relic NerdGraphExecute NerdGraph query or mutation[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph#newrelic.nerdgraph.execute)
`newrelic.notification.send`New Relic NotificationSend notification to New Relic destination[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification#newrelic.notification.send)
`newrelic.notification.sendEmail`New Relic NotificationSend email notification[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification#newrelic.notification.sendEmail)
`newrelic.notification.sendMicrosoftTeams`New Relic NotificationSend Microsoft Teams notification[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification#newrelic.notification.sendMicrosoftTeams)
`newrelic.nrdb.query`New Relic NRDBExecute NRQL query[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb#newrelic.nrdb.query)
`pagerduty.incident.create`PagerDuty IncidentCreate a PagerDuty incident[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.create)
`pagerduty.incident.get`PagerDuty IncidentGet PagerDuty incident details[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.get)
`pagerduty.incident.list`PagerDuty IncidentList PagerDuty incidents[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.list)
`pagerduty.incident.resolve`PagerDuty IncidentResolve a PagerDuty incident[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.resolve)
`pagerduty.incident.update`PagerDuty IncidentUpdate a PagerDuty incident[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.update)
`slack.chat.getReactions`Slack ChatGet reactions from Slack message[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat#slack.chat.getReactions)
`slack.chat.postMessage`Slack ChatPost a message to Slack channel[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat#slack.chat.postMessage)
`utils.datetime.fromEpoch`Utilities - DateTimeConvert epoch timestamp to datetime[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime#utils.datetime.fromEpoch)
`utils.transform.toCSV`Utilities - TransformTransform data to CSV format[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform#utils.transform.toCSV)
`utils.uuid.generate`Utilities - UUIDGenerate a UUID[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid#utils.uuid.generate)
+ +## Actions by category + +Browse actions organized by provider and product: + +### AWS Actions +- [AWS CloudWatch](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch) - CloudWatch Logs operations +- [AWS EC2](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2) - EC2 instance and snapshot management +- [AWS Execute API](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api) - Execute any AWS API operation +- [AWS Lambda](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda) - Lambda function operations +- [AWS S3](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3) - S3 bucket and object operations +- [AWS SNS](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns) - SNS topic operations +- [AWS SQS](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs) - SQS queue operations +- [AWS Systems Manager](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager) - Systems Manager automation and documents + +### HTTP Actions +- [HTTP DELETE](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete) - DELETE request operations +- [HTTP GET](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get) - GET request operations +- [HTTP POST](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post) - POST request operations +- [HTTP PUT](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put) - PUT request operations + +### New Relic Actions +- [New Relic Ingest](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest) - Send events and logs to New Relic +- [New Relic NerdGraph](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph) - Execute NerdGraph queries and mutations +- [New Relic NRDB](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb) - Query New Relic database +- [New Relic Notification](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification) - Send notifications through New Relic + +### Communication Actions +- [Slack Chat](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat) - Slack messaging operations + +### Incident Management Actions +- [PagerDuty Incident](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident) - PagerDuty incident management + +### Utility Actions +- [Utilities - DateTime](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime) - Date and time utilities +- [Utilities - Transform](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform) - Data transformation utilities +- [Utilities - UUID](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid) - UUID generation utilities ## What's next diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch.mdx new file mode 100644 index 00000000000..13af3167578 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch.mdx @@ -0,0 +1,422 @@ +--- +title: "AWS CloudWatch actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS CloudWatch actions +metaDescription: "A list of available aws cloudwatch actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for aws cloudwatch actions available in the workflow automation actions catalog. These actions enable you to cloudwatch logs operations. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + + + + + + + This action retrieves a batch of log events from a specified log stream in AWS CloudWatch Logs. It's essential for monitoring, auditing, and troubleshooting applications by programmatically fetching log data. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**logStreamName**RequiredString`"2023/10/27/[$LATEST]abcdef123456"`
**logGroupName**OptionalString`"/aws/lambda/my-function"`
**logGroupIdentifier**OptionalString`“arn:partition:service:region:account-id:resource”`
**startTime**OptionalInt`1759296000000`
**endTime**OptionalInt`1759296000000`
**limit**OptionalInt`50`
**startFromHead**OptionalBoolean`true`
**unmask**OptionalBoolean`false`
**nextToken**OptionalString`“f/39218833627378687642013305455131706539523449361490509828/s”`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + { + 'events': [ + { + 'timestamp': 123, + 'message': 'string', + 'ingestionTime': 123 + }, + ], + 'nextForwardToken': 'string', + 'nextBackwardToken': 'string' +} + ``` +
**success**Boolean`success: true | false`
**errorMessage**String`“An error occurred (ExpiredTokenException) when calling the GetLogEvents operation: The security token included in the request is expired”`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: get-lambda-logs + description: 'Retrieve log events from an AWS Lambda function' + workflowInputs: + region: + type: String + defaultValue: us-east-2 + logGroupName: + type: String + defaultValue: /aws/lambda/my-function + logStreamName: + type: String + defaultValue: 2023/10/27/[$LATEST]abcdef123456 + steps: + name: get_events_step + type: action + action: aws.cloudwatch.get_log_events + version: '1' + inputs: + region: ${{ .workflowInputs.region }} + logGroupName: ${{ .workflowInputs.logGroupName }} + logStreamName: ${{ .workflowInputs.logStreamName }} + limit: 100 + ``` +
+
+
+
+
+ + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**logGroupName**RequiredString`"/aws/lambda/hello-you"`
**logStreamName**RequiredString`"2025/09/24/[$LATEST]09f7ca9e9ab044f389419ce60305f594"`
**logEvents**RequiredList + ```yaml + [ + +{ "timestamp": 1698384000000, "message": "Workflow task started." }, + + { "timestamp": 1698384000015, "message": "Data validated successfully." } ] + ``` +
**entity**OptionalDict`{ "entity": { "keyAttributes": { "ResourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer", "Identifier": "app/my-web-lb/12345", "Environment": "Production" }, "attributes": { "MonitoringTier": "Gold", "OwnerTeam": "Networking", "MaintenanceWindow": "Sat: 0200-0400" } } }`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + { + 'events': [ + { + 'timestamp': 123, + 'message': 'string', + 'ingestionTime': 123 + }, + ], + 'nextForwardToken': 'string', + 'nextBackwardToken': 'string' + } +``` +
**success**Boolean`success: true | false`
**errorMessage**String`“An error occurred (ExpiredTokenException) when calling the GetLogEvents operation: The security token included in the request is expired”`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: get-lambda-logs + description: 'Retrieve log events from an AWS Lambda function' + workflowInputs: + region: + type: String + defaultValue: us-east-2 + logGroupName: + type: String + defaultValue: /aws/lambda/my-function + logStreamName: + type: String + defaultValue: 2023/10/27/[$LATEST]abcdef123456 + steps: + name: get_events_step + type: action + action: aws.cloudwatch.get_log_events + version: '1' + inputs: + region: ${{ .workflowInputs.region }} + logGroupName: ${{ .workflowInputs.logGroupName }} + logStreamName: ${{ .workflowInputs.logStreamName }} + limit: 100 + ``` +
+
+
+
+
+
+ +## S3 actions + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2.mdx new file mode 100644 index 00000000000..96b697ec457 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2.mdx @@ -0,0 +1,709 @@ +--- +title: "AWS EC2 actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS EC2 actions +metaDescription: "A list of available aws ec2 actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for aws ec2 actions available in the workflow automation actions catalog. These actions enable you to ec2 instance and snapshot management. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + + + +## EC2 actions + + + + + This action deletes an Amazon EC2 snapshot. You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**snapshotId**RequiredString`“snapshot-id-1"`
**selectors**OptionalString`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object + No Response in case of success : true +

+ Response syntax can be referred [delete_snapshot - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/delete_snapshot.html). +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Failed to delete snapshot"`
+
+ + + + + + + + + + + + + +
Workflow Example
+ ```yaml + name: ec2-deleteSnapshot-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + snapshotId: + type: List + defaultValue: snapshot-id-1 + steps: + - name: aws_ec2_deleteSnapshot_1 + type: action + action: aws.ec2.deleteSnapshot + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + snapshotId: ${{ .workflowInputs.snapshotId }} + next: end + ``` +
+
+
+
+
+ + + + Requests a reboot of the specified instances. This operation is asynchronous; it only queues a request to reboot the specified instances. The operation succeeds if the instances are valid and belong to you. Requests to reboot terminated instances are ignored. + + If an instance does not cleanly shut down within a few minutes, Amazon EC2 performs a hard reboot. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object[reboot_instances - Boto3 1.40.56 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/reboot_instances.html)
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: reboot-ec2-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: List + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_rebootInstances_1 + type: action + action: aws.ec2.rebootInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
+
+
+
+
+ + + + Starts an Amazon EBS-backed instance that you previously stopped. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object + ```yaml + {"response":{ + 'StartingInstances': [ + { + 'InstanceId': 'String', + 'CurrentState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + }, + 'PreviousState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + } + }, + ] + } + + } + + } + ``` +

+ Response syntax can be referred [start_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/start_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "The parameter instancesSet cannot be used with the parameter maxResults"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ab-ec2-startInstance-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_startInstances_1 + type: action + action: aws.ec2.startInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
+
+
+
+
+ + + + Terminates the specified instances. This operation is [idempotent](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html); if you terminate an instance more than once, each call succeeds. + + If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + { + 'TerminatingInstances': [ + { + 'InstanceId': 'String', + 'CurrentState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + }, + 'PreviousState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + } + }, + ] + } + ``` +

+ Response syntax can be referred [terminate_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/terminate_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (`InvalidInstanceID.Malformed`) when calling the TerminateInstances operation: The instance ID 'i-012345678' is malformed"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ec2-terminate-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_terminateInstances_1 + type: action + action: aws.ec2.terminateInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api.mdx new file mode 100644 index 00000000000..a6802e7713c --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api.mdx @@ -0,0 +1,410 @@ +--- +title: "AWS Execute API" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS Execute API +metaDescription: "A list of available aws execute api in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for aws execute api available in the workflow automation actions catalog. These actions enable you to execute any aws api operation. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + + + + + + This action allows you to execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. + + ### Security and IAM configuration + + To use this action, you must configure AWS credentials. See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for detailed instructions on creating an IAM role or IAM user. + + + **Security best practice:** When defining IAM policies for this action, always use least-privilege access. Grant only the specific AWS API actions your workflow requires, and restrict permissions to specific resources rather than using wildcards. + + + ### Required IAM permissions + + The permissions you need depend on which AWS services and APIs your workflow calls. Use the examples below as templates for creating least-privilege policies. + + **Example: Allow sending messages to a specific SQS queue** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-west-2::" + } + ] + } + ``` + + **Example: Allow querying a specific DynamoDB table** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-west-2::table/" + } + ] + } + ``` + + **Example: Multiple services with specific permissions** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-west-2::" + }, + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-west-2::table/" + } + ] + } + ``` + + + - Replace ``, ``, and `` with your actual values + - Find available AWS service APIs in the [Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) + - For more complex IAM policy patterns, see the [AWS IAM documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) + + + For more information on how this action works, see the [AWS Systems Manager executeAwsApi documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-action-executeAwsApi.html). + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**service**RequiredString`service: "sqs"`.[AWS available services](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)
**api**RequiredStringapi: "create_queue"
**parameters**RequiredMap + ```yaml + parameters: { + "QueueName": "dks-testing-queue", + "Attributes": { + "DelaySeconds": "0", + "MessageRetentionPeriod": "86400" + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. + - Use selectors to get only the specified parameters as output. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object`{"response":` + }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html.
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "User does not have permission to query DynamoDB"`
+
+ + + + ### Example 1: Send a message to an SQS queue + + This example demonstrates how to send a message to an Amazon SQS queue using the `aws.execute.api` action with IAM role authentication. + + ```yaml + name: sqs_send_message_example + + workflowInputs: + awsRoleArn: + type: String + description: "ARN of the IAM role to assume (e.g., arn:aws:iam::123456789012:role/workflow-sqs-role)" + awsRegion: + type: String + defaultValue: us-east-2 + awsQueueUrl: + type: String + defaultValue: "https://sqs.us-east-2.amazonaws.com//" + + steps: + - name: sendSqsMessage + type: action + action: aws.execute.api + version: 1 + inputs: + awsRoleArn: ${{ .workflowInputs.awsRoleArn }} + region: ${{ .workflowInputs.awsRegion }} + service: sqs + api: send_message + parameters: + QueueUrl: ${{ .workflowInputs.awsQueueUrl }} + MessageBody: | + { + "message": "deployment is bad", + "status": "not good" + } + selectors: + - name: success + expression: '.success' + - name: messageId + expression: '.response.MessageId' + - name: errorMessage + expression: '.errorMessage' + + - name: logResult + type: action + action: newrelic.ingest.sendLogs + version: 1 + inputs: + message: 'SQS message sent. Success: ${{ .steps.sendSqsMessage.outputs.success }}, MessageId: ${{ .steps.sendSqsMessage.outputs.messageId }}' + licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' + ``` + + **Required IAM policy for this example:** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-east-2::" + } + ] + } + ``` + + **Expected outputs:** + - `success`: Boolean indicating whether the message was sent successfully + - `messageId`: The unique ID assigned by SQS to the sent message + - `errorMessage`: Error message if the operation failed + + ### Example 2: Query a DynamoDB table + + This example demonstrates how to query a DynamoDB table using the `aws.execute.api` action with session credentials. + + ```yaml + name: dynamodb_query_example + + workflowInputs: + awsAccessKeyId: + type: String + defaultValue: "${{ :secrets:AWS_ACCESS_KEY_ID }}" + awsSecretAccessKey: + type: String + defaultValue: "${{ :secrets:AWS_SECRET_ACCESS_KEY }}" + awsSessionToken: + type: String + defaultValue: "${{ :secrets:AWS_SESSION_TOKEN }}" + awsRegion: + type: String + defaultValue: us-east-2 + tableName: + type: String + defaultValue: workflow-definitions-prod + scopedName: + type: String + description: "The scoped name to query" + version: + type: String + defaultValue: "1" + + steps: + - name: queryDynamoDB + type: action + action: aws.execute.api + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.awsAccessKeyId }} + awsSecretAccessKey: ${{ .workflowInputs.awsSecretAccessKey }} + awsSessionToken: ${{ .workflowInputs.awsSessionToken }} + region: ${{ .workflowInputs.awsRegion }} + service: dynamodb + api: query + parameters: + TableName: ${{ .workflowInputs.tableName }} + KeyConditionExpression: "ScopedName = :scopedNameValue AND Version = :versionValue" + ExpressionAttributeValues: + ":scopedNameValue": + S: ${{ .workflowInputs.scopedName }} + ":versionValue": + N: ${{ .workflowInputs.version }} + selectors: + - name: success + expression: '.success' + - name: response + expression: '.response' + - name: errorMessage + expression: '.errorMessage' + + - name: logResult + type: action + action: newrelic.ingest.sendLogs + version: 1 + inputs: + message: 'DynamoDB query result: ${{ .steps.queryDynamoDB.outputs.response.Items }}' + licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' + ``` + + **Required IAM policy for this example:** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-east-2::table/workflow-definitions-prod" + } + ] + } + ``` + + **Expected outputs:** + - `success`: Boolean indicating whether the query was successful + - `response`: The DynamoDB query response containing the matching items + - `errorMessage`: Error message if the operation failed + +
+
+
+
+ +## CloudWatch actions + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda.mdx new file mode 100644 index 00000000000..e9433656293 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda.mdx @@ -0,0 +1,772 @@ +--- +title: "AWS Lambda actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS Lambda actions +metaDescription: "A list of available AWS Lambda actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for AWS Lambda actions available in the workflow automation actions catalog. These actions enable you to manage and invoke Lambda functions as part of your workflow definitions. + +## Prerequisites + +Before using AWS Lambda actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for Lambda operations. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + +## Lambda actions + + + + Invokes a Lambda function synchronously or asynchronously with an optional payload. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`my-lambda-function`
**invocationType**OptionalString`Event'|'RequestResponse'|'DryRun'`
**payload**OptionalString`'{"key": "value"}'`
**parameters**OptionalMap + ```yaml + { + "Qualifier": "1", + "ClientContext":"encoded value" + }, + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + - **Action Timeout**: This action has a maximum 1-minute(60-second) timeout for synchronous invocations + - **Long-Running Functions**: For functions that may run longer than 1 minute, you must use the Event InvocationType. This invokes the function asynchronously. You can then use other actions (like aws.cloudwatch.getLogEvents or checking an SQS/SNS callback) to get the result. + - `InvocationType` is critical: + - `RequestResponse` (default): Invokes the function synchronously. The action waits for the function to complete and returns the response. + - `Event`: Invokes the function asynchronously. The action returns a success status immediately without waiting for the code to finish. + - `ClientContext` is for advanced use cases and the provided String must be Base64-encoded + - Any additional API parameters not listed above can be passed in the `parameters` map. To support a wide range of inputs, the `parameters` map accepts any optional argument available in the official boto3 API documentation. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + [{"success":true,"response":{"StatusCode":200,"ExecutedVersion":"$LATEST","Payload":{"statusCode":200,"body":"\"Hello userName\""}}}] + ``` +

+ Response syntax can be referred to [invoke - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/invoke.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ValidationException: 1 validation error detected"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-invoke-function-test + description: 'Invokes a Lambda function with a payload' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_invoke_1 + type: action + action: aws.lambda.invoke + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + functionName: my-lambda-processor + payload: '{"orderId": "12345", "amount": 99.99}' + next: end + ``` +
+
+
+
+
+ + + + Modifies the configuration of a specific AWS Lambda function. Provide only the parameters you want to change. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`"my-lambda-function-to-update"`
**role**OptionalString`arn:aws:iam::123456789012:role/new-lambda-role`
**handler**OptionalString`"main.new_handler"`
**description**OptionalString`Updated function description`
**parameters**OptionalMap + ```yaml + { + "Timeout": "60", + "MemorySize": 123, + }, + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + [{"success":true,"response":{"FunctionName":"hello-you","FunctionArn":"arn:aws:lambda:us-east-2:----:function:hello-you","Runtime":"nodejs20.x","Role":"arn:aws:iam::----:role/TF-hello-you-role","Handler":"hello-you.handler","CodeSize":334,"Description":"This is hello you description from action","Timeout":30,"MemorySize":128,"LastModified":"2025-09-23T13:57:03.000+0000","CodeSha256":"CU03aDDg+34=","Version":"$LATEST","TracingConfig":{"Mode":"PassThrough"},"RevisionId":"0f1e4d9b-c45a-4896-a32d-7cd78e77a273","State":"Active","LastUpdateStatus":"InProgress","LastUpdateStatusReason":"The function is being created.","LastUpdateStatusReasonCode":"Creating","PackageType":"Zip","Architectures":["x86_64"],"EphemeralStorage":{"Size":512},"SnapStart":{"ApplyOn":"None","OptimizationStatus":"Off"},"RuntimeVersionConfig":{"RuntimeVersionArn":"arn:aws:lambda:us-east-2::runtime:01eab27397bfdbdc243d363698d4bc355e3c8176d34a51cd47dfe58cf977f508"},"LoggingConfig":{"LogFormat":"Text","LogGroup":"/aws/lambda/hello-you"}}}] + ``` +

+ Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/update_function_configuration.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`[ { "errorMessage": "An error occurred (ResourceNotFoundException) when calling the UpdateFunctionConfiguration operation: Function not found: arn:aws:lambda:us-east-2:661945836867:function:my-lambda-function-to-update", "success": false, "response": null } ]`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-update-config-test + description: 'Updates the timeout and memory of a Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_update_function_configuration_1 + type: action + action: aws.lambda.updateFunctionConfiguration + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-west-2 + functionName: my-lambda-function-to-update + parameters: + Timeout:60 + MemorySize:123 + + next: end + ``` +
+
+
+
+
+ + + + Retrieves the configuration details, code location, and other metadata for a specific AWS Lambda function. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`"my-lambda-function"`
**parameters**OptionalMap + ```yaml + { + "Qualifier": "1" + }, + ``` +
**selectors**OptionalList`[[{"name": "response", "expression": ".response"}]`
+ + + To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + {"response": } + ``` +

+ Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/get_function.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ResourceNotFoundException: Function not found"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-get-function-test + description: 'Retrieves the configuration of a specific Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_getFunction_1 + type: action + action: aws.lambda.getFunction + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + FunctionName: hello-you + parameters: + Qualifier: 1 + next: end + ``` +
+
+
+
+
+ + + Returns a list of aliases for a specific AWS Lambda function. Aliases are pointers to function versions. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`"my-lambda-function"`
**marker**OptionalString + Pass the `NextMarker` token from a previous response for pagination. +

+ e.g., `"abcd....."` +

+
**maxItems**OptionalInt + Limit the number of aliases returned +

+ e.g., `123` +

+
**parameters**OptionalMap + For additional optional API parameters. +

+ e.g., `{"AnotherOptionalParam": "value"}` +

+
**selectors**OptionalList`[{"name": "response", "expression": ".response"}]`
+ + + - **Pagination**: Use the Marker and MaxItems inputs to paginate through a large number of aliases. + - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + {"response": } + ``` +

+ Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/list_aliases.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ResourceNotFoundException: Function not found"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-list-aliases-test + description: 'Lists all aliases for a Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_list_aliases_1 + type: action + action: aws.lambda.listAliases + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + functionName: hello-you + parameters: + FunctionVersion: 1 + next: end + ``` +
+
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3.mdx new file mode 100644 index 00000000000..cd1325a6c7f --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3.mdx @@ -0,0 +1,1233 @@ +--- +title: "AWS S3 actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS S3 actions +metaDescription: "A list of available aws s3 actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for aws s3 actions available in the workflow automation actions catalog. These actions enable you to s3 bucket and object operations. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + + + + + + + The `listObjectsV2` method returns some or all (up to 1,000) of the objects in a bucket. It is a more modern and recommended version of `list_objects`. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**prefix**OptionalString"`path/to/folder/`"
**maxKeys**OptionalInteger`100`
**continuationToken**OptionalString`some-token`
**parameters**OptionalMap + ```graphql + { + "Delimiter": "/" + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
EncodingTypeString
FetchOwnerBoolean
StartAfterString
RequestPayerString
ExpectedBucketOwnerString
OptionalObjectAttributesList
DelimiterString
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'IsTruncated': True|False, + 'Contents': [ + { + 'Key': 'string', + 'LastModified': datetime(2015, 1, 1), + 'ETag': 'string', + 'ChecksumAlgorithm': [ + 'CRC32'|'CRC32C'|'SHA1'|'SHA256'|'CRC64NVME', + ], + 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', + 'Size': 123, + 'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'GLACIER'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'DEEP_ARCHIVE'|'OUTPOSTS'|'GLACIER_IR'|'SNOW'|'EXPRESS_ONEZONE'|'FSX_OPENZFS', + 'Owner': { + 'DisplayName': 'string', + 'ID': 'string' + }, + 'RestoreStatus': { + 'IsRestoreInProgress': True|False, + 'RestoreExpiryDate': datetime(2015, 1, 1) + } + }, + ], + 'Name': 'string', + 'Prefix': 'string', + 'Delimiter': 'string', + 'MaxKeys': 123, + 'CommonPrefixes': [ + { + 'Prefix': 'string' + }, + ], + 'EncodingType': 'url', + 'KeyCount': 123, + 'ContinuationToken': 'string', + 'NextContinuationToken': 'string', + 'StartAfter': 'string', + 'RequestCharged': 'requester' + } + ``` +

+ Response syntax can be referred to in the [list_objects_v2 - Boto3 1.40.52 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/list_objects_v2.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Parameter validation failed:\nInvalid bucket name \"s3-activity-test \": Bucket name must match the regex \"^[a-zA-Z0-9.\\-_]{1,255}$\" or be an ARN matching the regex \"^arn:(aws).:(s3|s3-object-lambda):[a-z\\-0-9]:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\\-]{1,63}$\""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: aws-s3-list-objects-v2 + description: 'List Objects in an AWS S3 Bucket' + + steps: + - name: aws_s3_listObjectsV2_1 + type: action + action: aws.s3.listObjectsV2 + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-east-2" + bucket: "examplebucket" + prefix: "path/to/folder/" + maxKeys: 100 + continuationToken: "some-token" + next: end + ``` +
+
+
+
+
+ + + + The `deleteObject` method permanently removes a single object from a bucket. For versioned buckets, this operation inserts a **delete marker**, which hides the object without permanently deleting it unless a `VersionId` is specified. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**parameters**OptionalMap + ```yaml + { + "RequestPayer": "test", + "BypassGovernanceRetention": false + "VersionId":"testVersion", + "MFA":"Test" + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
RequestPayerString
BypassGovernanceRetentionBoolean
ExpectedBucketOwnerString
IfMatchString
IfMatchLastModifiedTimeMap
IfMatchSizeInt
VersionIdString
MFAString
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'DeleteMarker': True|False, + 'VersionId': 'string', + 'RequestCharged': 'requester' + } + ``` +

+ Response syntax can be referred [delete_object - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/delete_object.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Parameter validation failed:\nInvalid bucket name \"s3-activity-test \": Bucket name must match the regex \"^[a-zA-Z0-9.\\-_]{1,255}$\" or be an ARN matching the regex \"^arn:(aws).:(s3|s3-object-lambda):[a-z\\-0-9]:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\\-]{1,63}$\""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: aws-s3-delete-object + description: 'Delete an AWS S3 Object' + + steps: + - name: aws_s3_deleteObject_1 + type: action + action: aws.s3.deleteObject + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-west-2" + bucket: "my-bucket" + key: "path/to/object.txt" + next: end + ``` +
+
+
+
+
+ + + + Adds an object to a bucket. Amazon S3 is a distributed system. If it receives multiple write requests for the same object simultaneously, it overwrites all but the last object written. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**body**RequiredString`file content`
**contentType**RequiredString"`plain/text`"
**tagging**OptionalString`“key1=value1"`
**parameters**OptionalMap + ```yaml + { + "ServerSideEncryption": "AES256", + "Metadata": { + 'metadata1': 'value1', + 'metadata2': 'value2', + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
RequestPayerString
ACLString
CacheControlString
ContentDispositionString
ContentEncodingString
ContentLanguageString
ContentLengthInt
ContentMD5String
ChecksumAlgorithmString
ChecksumCRC32String
ChecksumCRC32CString
ChecksumCRC64NVMEString
ChecksumSHA1String
ChecksumSHA256String
ExpiresMap
IfMatchString
IfNoneMatchString
GrantFullControlString
GrantReadString
GrantReadACPString
GrantWriteACPString
WriteOffsetBytesInt
ServerSideEncryptionString
StorageClassString
WebsiteRedirectLocationString
SSECustomerAlgorithmString
SSECustomerKeyString
SSEKMSKeyIdString
SSEKMSEncryptionContextString
BucketKeyEnabledBoolean
RequestPayerString
ObjectLockModeString
ObjectLockRetainUntilDateMap
ObjectLockLegalHoldStatusString
ExpectedBucketOwnerString
MetadataMap
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'Expiration': 'string', + 'ETag': 'string', + 'ChecksumCRC32': 'string', + 'ChecksumCRC32C': 'string', + 'ChecksumCRC64NVME': 'string', + 'ChecksumSHA1': 'string', + 'ChecksumSHA256': 'string', + 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', + 'ServerSideEncryption': 'AES256'|'aws:fsx'|'aws:kms'|'aws:kms:dsse', + 'VersionId': 'string', + 'SSECustomerAlgorithm': 'string', + 'SSECustomerKeyMD5': 'string', + 'SSEKMSKeyId': 'string', + 'SSEKMSEncryptionContext': 'string', + 'BucketKeyEnabled': True|False, + 'Size': 123, + 'RequestCharged': 'requester' + } + ``` +

+ Response syntax can be referred [put_object - Boto3 1.40.59 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/put_object.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: s3-put-object + description: 'Put an AWS S3 Object' + + steps: + - name: aws_s3_putObject_1 + type: action + action: aws.s3.putObject + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-east-2" + bucket: "examplebucket" + key: "path/to/object.txt" + body: "Hello world" + contentType: "plain/text" + tagging: "key1=value1" + next: end + ``` +
+
+
+
+
+ + + + In the `GetObject` request, specify the full key name for the object. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**versionId**OptionalString`"some-version-id"`
**range**OptionalString`bytes=0-99`
**parameters**OptionalMap + ```yaml + { + "ChecksumMode": "ENABLED", + "ExpectedBucketOwner": "test-user" + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + The action will fail if the object is more than 100kb. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
IfMatchString
IfModifiedSinceMap
IfNoneMatchString
IfUnmodifiedSinceMap
ResponseCacheControlString
ResponseContentDispositionString
ResponseContentEncodingString
ResponseContentLanguageString
ResponseContentTypeString
ResponseExpiresMap
SSECustomerAlgorithmString
SSECustomerKeyString
RequestPayerString
PartNumberInt
ExpectedBucketOwnerString
ChecksumModeString
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'Body': StreamingBody(), + 'DeleteMarker': True|False, + 'AcceptRanges': 'string', + 'Expiration': 'string', + 'Restore': 'string', + 'LastModified': datetime(2015, 1, 1), + 'ContentLength': 123, + 'ETag': 'string', + 'ChecksumCRC32': 'string', + 'ChecksumCRC32C': 'string', + 'ChecksumCRC64NVME': 'string', + 'ChecksumSHA1': 'string', + 'ChecksumSHA256': 'string', + 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', + 'MissingMeta': 123, + 'VersionId': 'string', + 'CacheControl': 'string', + 'ContentDisposition': 'string', + 'ContentEncoding': 'string', + 'ContentLanguage': 'string', + 'ContentRange': 'string', + 'ContentType': 'string', + 'Expires': datetime(2015, 1, 1), + 'ExpiresString': 'string', + 'WebsiteRedirectLocation': 'string', + 'ServerSideEncryption': 'AES256'|'aws:fsx'|'aws:kms'|'aws:kms:dsse', + 'Metadata': { + 'string': 'string' + }, + 'SSECustomerAlgorithm': 'string', + 'SSECustomerKeyMD5': 'string', + 'SSEKMSKeyId': 'string', + 'BucketKeyEnabled': True|False, + 'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'GLACIER'|'DEEP_ARCHIVE'|'OUTPOSTS'|'GLACIER_IR'|'SNOW'|'EXPRESS_ONEZONE'|'FSX_OPENZFS', + 'RequestCharged': 'requester', + 'ReplicationStatus': 'COMPLETE'|'PENDING'|'FAILED'|'REPLICA'|'COMPLETED', + 'PartsCount': 123, + 'TagCount': 123, + 'ObjectLockMode': 'GOVERNANCE'|'COMPLIANCE', + 'ObjectLockRetainUntilDate': datetime(2015, 1, 1), + 'ObjectLockLegalHoldStatus': 'ON'|'OFF' + } + ``` +

+ Response syntax can be referred to in the [get_object - Boto3 1.40.59 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/get_object.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (InvalidArgument) when calling the GetObject operation: Invalid version id specified"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: s3-get-object + description: 'Get an AWS S3 Object' + + steps: + - name: aws_s3_getObject_1 + type: action + action: aws.s3.getObject + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-east-2" + bucket: "examplebucket" + key: "path/to/object.txt" + next: end + ``` +
+
+
+
+
+
+ +## SNS actions + + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns.mdx new file mode 100644 index 00000000000..dae30cc4ffb --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns.mdx @@ -0,0 +1,270 @@ +--- +title: "AWS SNS actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS SNS actions +metaDescription: "A list of available aws sns actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for aws sns actions available in the workflow automation actions catalog. These actions enable you to sns topic operations. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + + + + + + Sends a message to an Amazon SNS topic. All subscribers to the topic will receive the message. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**message**RequiredString + Messages must be UTF-8 encoded strings and at most 256 KB in size +

+ `'Workflow failed at step 3'` +

+
**topicArn**OptionalString + If you don’t specify a value for the topicArn parameter, Must specify a value for the targetArn parameters. +

+ `“arn:aws:sns:us-east-2:123456789012:my-topic”` +

+
**targetArn**OptionalString + If you don’t specify a value for the topicArn parameter, Must specify a value for the targetArn parameters. +

+ `"arn:aws:sns:us-east-2:123456789012:MySNSTopic"` +

+
**subject**OptionalString`"Workflow Update"`
**MessageStructure**OptionalString`MessageStructure`
**messageAttributes**OptionalMap + ```json + { + 'string': { + 'DataType': 'string', + 'StringValue': 'string', + 'BinaryValue': b'bytes' + } + }, + ``` +
**messageDeduplicationId**OptionalString`“abc123deduplicationId5678”`
**messageGroupId**OptionalString`“order-processing-group-2023_A”`
+ + + + + + + + + + + + + + + + + + +
Input FieldTypeExample
PhoneNumberStringWe do not include PhoneNumber as it is considered Personally Identifiable Information (PII).
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + `[{"success":true,"response":{"MessageId":"2333ededwedwed-52f5-a716-e10355e3e2ff"}}]` +

+ Response syntax can be referred to sns-publish- Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns/client/publish.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`[{"errorMessage":"An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: TopicArn or TargetArn Reason: no value for required parameter","success":false,"response":null}]`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: sns-publish-test + description: Publishes a notification to an SNS topic + workflowInputs: + arnRole: + type: String + steps: + - name: aws_sns_publish_1 + type: action + action: aws.sns.publish + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + topicArn: arn:aws:sns:us-east-1:123456789012:workflow-test-topic + subject: "Workflow Update" + message: "The data processing workflow has completed successfully." + next: end + ``` +
+
+
+
+
+
+ +## SQS actions + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs.mdx new file mode 100644 index 00000000000..336c41bfd9a --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs.mdx @@ -0,0 +1,397 @@ +--- +title: "AWS SQS actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS SQS actions +metaDescription: "A list of available aws sqs actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for aws sqs actions available in the workflow automation actions catalog. These actions enable you to sqs queue operations. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + + + + + + + Sends a message to a specified Amazon SQS queue. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**queueUrl**RequiredString"`https://sqs.us-east-2.amazonaws.com/123456789012/my-queue`"
**messageBody**RequiredString`“This is a test message”`
**messageDeduplicationId**OptionalString`“abc123deduplicationId5678”`
**messageGroupId**OptionalString`“group1”`
**messageAttributes**OptionalMap +

+ `{ "my_attribute_name_1": { "DataType": "String", "StringValue":"my_attribute_value_1"},` +

+ +

+ `"my_attribute_name_2": { "DataType": "String", "StringValue":"my_attribute_value_2"}}` +

+
**delaySeconds**OptionalInt`123`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + `{"statusCode":200, "payload":{"status":"success","data":{"MessageId":"e9b73a52-d018-4a73-9fcd-8efb682fba43","MD5OfMessageBody":"fae535c7f7c5687a1c3d8bc52288e33a","MD5OfMessageAttributes":"3ae3c4f59958e031d0d53af2d157e834", }, "message":"Message sent successfully to the SQS queue." }}` +

+ Response syntax can be referred to [SQS send_message - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/client/send_message.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "SQS.Client.exceptions.QueueDoesNotExist: "The specified queue does not exist.""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: sqs-send-message-test + description: Sends a message to an SQS queue + workflowInputs: + arnRole: + type: String + steps: + - name: aws_sqs_sendMessage_1 + type: action + action: aws.sqs.sendMessage + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-2 + queueUrl: https://sqs.us-east-2.amazonaws.com/123456789012/workflow-test-queue + messageBody: "This is a test message" + messageAttributes: + my_attribute_name_1: + DataType: "String" + StringValue: "my_attribute_value_1" + my_attribute_name_2: + DataType: "String" + StringValue: "my_attribute_value_2" + next: end + ``` +
+
+
+
+
+
+ + + + + Retrieves one or more messages, from the specified queue + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**queueUrl**RequiredString"`https://sqs.us-east-2.amazonaws.com/123456789012/my-queue`"
**maxNumberOfMessages**OptionalInt`10`
**waitTimeSeconds**OptionalInt`5`
**VisibilityTimeout**OptionalInt`123`
**AttributeNames**OptionalList + ```yaml + [ + 'All'|'Policy'|'VisibilityTimeout'|'MaximumMessageSize'|'MessageRetentionPeriod'|'ApproximateNumberOfMessages'|'ApproximateNumberOfMessagesNotVisible'|'CreatedTimestamp'|'LastModifiedTimestamp'|'QueueArn'|'ApproximateNumberOfMessagesDelayed'|'DelaySeconds'|'ReceiveMessageWaitTimeSeconds'|'RedrivePolicy'|'FifoQueue'|'ContentBasedDeduplication'|'KmsMasterKeyId'|'KmsDataKeyReusePeriodSeconds'|'DeduplicationScope'|'FifoThroughputLimit'|'RedriveAllowPolicy'|'SqsManagedSseEnabled', + ] + ``` +
**messageAttributeNames**OptionalList + ```yaml + [ + 'message_attribute_name', + ], + ``` +
**messageSystemAttributeNames**OptionalList`['SenderId', 'SentTimestamp']`
**receiveRequestAttemptId**OptionalString`“req-1234abcd”`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + `{"response": }
` +

+ Response syntax can be referred to receive_message - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/client/receive_message.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "SQS.Client.exceptions.QueueDoesNotExist: "The specified queue does not exist.""`
+
+ + + + + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + -
Workflow example
+ ```yaml + name: sqs-receive-message-test + description: 'Receives a message from an SQS queue' + steps: diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager.mdx new file mode 100644 index 00000000000..a7b8ddd05b9 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager.mdx @@ -0,0 +1,923 @@ +--- +title: "AWS Systems Manager actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions + - AWS Systems Manager actions +metaDescription: "A list of available aws systems manager actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for aws systems manager actions available in the workflow automation actions catalog. These actions enable you to systems manager automation and document operations. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + + + + + + Launches the specified number of instances using an AMI for which you have permissions. + + You can specify a number of options, or leave the default options. The following rules apply: + - If you don’t specify a subnet ID, we choose a default subnet from your default VPC for you. If you don’t have a default VPC, you must specify a subnet ID in the request. + - If any of the AMIs have a product code attached for which the user has not subscribed, the request fails. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**imageId**RequiredString`“ami-0ca4d5db4872d0c28”`
**instanceType**RequiredString`“t2.micro”`
**minCount**RequiredInt`1`
**maxCount**RequiredInt`10`
**parameters**OptionalMap + ```yaml + { + "EbsOptimized": false, + "TagSpecifications": [ + { + "ResourceType": "instance", + "Tags": [ + { + "Key": "Name", + "Value": "My-Web-Server" + } + ] + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object +

+ Response syntax can be referred: [run_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/run_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ec2_run_instance + workflowInputs: + arnRole: + type: String + required: true + steps: + - name: RunInstance + type: action + action: aws.ec2.runInstances + version: '1' + inputs: + awsRoleArn: ${{.workflowInputs.arnRole}} + region: us-east-2 + imageId: ami-0ca4d5db4872d0c28 + instanceType: t2.micro + minCount: 1 + maxCount: 1 + parameters: + EbsOptimized: false + TagSpecifications: + - ResourceType: instance + Tags: + - Key: Name + Value: My-Test-Instance + selectors: + - name: instanceId + expression: .response.Instances[0].InstanceId + ``` +
+
+
+
+
+ + + +## Systems Manager actions + + + + Writes a document to the AWS account based on the AWS credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
**documentType**OptionalString`documentType: "Command"`
**documentFormat**OptionalString`documentFormat: "YAML"`
**documentContent**RequiredString
**override**OptionalBoolean + `override: true (default)`. When `true`, always write the document with the provided name even if one already exist. When `false`, if a document with the provided `documentName` already exist, the action returns `success: false` and `errorMessage:Document already exists`. Please enable override if you want to update the existing document. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**documentName**String`documentName: "my-ssm-document"`
**documentVersion**String`documentVersion: 1`
**documentType**String`documentType: "Command"`
**documentStatus**String`documentStatus: "Active"`.
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + inputs: + Service: lambda + Api: ListFunctions + ``` + + ```yaml + outputs: + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ + + Deletes an AWS document in the AWS account based on the credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**documentName**StringdocumentName: "my-ssm-document"
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + inputs: + Service: lambda + Api: ListFunctions + ``` + + ```yaml + outputs: + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ + + Starts an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartAutomationExecution.html) + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
**parameters**OptionalMap`parameters: myKey: myValue`
**idempotencyToken**OptionalUUID`idempotencyToken: "any token"`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**automationExecutionId**String`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + Service: lambda + Api: ListFunctions + ``` + + ```yaml + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ + + Waits for an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) for more information. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**automationExecutionId**RequiredString`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`. The automation executionID for which we need to wait for its completion.
**automationExecutionStatuses**OptionalListList of automation execution statuses from [AutomationExecution](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_AutomationExecution.html#AutomationExecutionStatus) that can stop the waiting, `Default: ["Success", "Failed"]`
**timeout**Optionalint`timeout: 600`. The duration in seconds can wait for automation status to be one of the expected `automationExecutionStatuses`. Post this timeout duration, the action return value with timeout error.
**selectors**OptionalList`[{\"name\": \"automationExecutionStatus\", \"expression\": \".automationExecutionStatus\"}, {\"name\": \"scriptOutput\", \"expression\": \".automationExecutionOutputs.pythonStep.scriptOutput | tojson\"}]`.
+ + + 1. In the action input, only `awsAccessKeyId` and `awsSecretAccessKey` can be provided, but they should be static credentials of an IAM user. + 2. If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + 3. Refer to the instructions to set up [AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials). + 4. Use selectors to get only the specified parameters as output. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**automationExecutionId**String`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`
**automationExecutionStatus**String`automationExecutionStatus: "Success"`. If action is successful, It will either of the values passed in `automationExecutionStatuses` input field. Else, this will be null.
**automationExecutionOutputs**Map + ```yaml + "automationExecutionOutputs": { + "ExecuteGetApiResources": { + "resultResourceId": [ + "pky3cb" + ] + }, + "ExecuteListVersionsByFunction": { + "resultLambdaVersionArn": [ + "arn:aws:lambda:us-east-2:123456789012:function:ApiGwTestFn:1" + ] + } + } + ``` +

+ The output will be a map of output values from the document. Any output in the document can be collected using this output field and can be used in subsequent steps of the workflow automation definition. +

+
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + Service: lambda + Api: ListFunctions + ``` + + ```yaml + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ +
+ +## General AWS actions + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx deleted file mode 100644 index 8e75f93182b..00000000000 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx +++ /dev/null @@ -1,4935 +0,0 @@ ---- -title: "AWS actions" -tags: - - workflow automation - - workflow - - workflow automation actions - - AWS actions -metaDescription: "A list of available actions in the actions catalog for workflow definitions" -freshnessValidatedDate: never ---- - - - We're still working on this feature, but we'd love for you to try it out! - - This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -This page provides a comprehensive reference for AWS actions available in the workflow automation actions catalog. These actions enable you to integrate AWS services into your workflow definitions, including Lambda functions, Systems Manager automation, EC2 instance management, and general API execution. - -## Prerequisites - -Before using AWS actions in workflow automation, ensure you have: - - * An AWS account with appropriate permissions. - * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). - * The necessary IAM permissions for the specific AWS services you plan to use. - -See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - -## Lambda actions - - - - Invokes a Lambda function synchronously or asynchronously with an optional payload. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`my-lambda-function`
**invocationType**OptionalString`Event'|'RequestResponse'|'DryRun'`
**payload**OptionalString`'{"key": "value"}'`
**parameters**OptionalMap - ```yaml - { - "Qualifier": "1", - "ClientContext":"encoded value" - }, - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - - **Action Timeout**: This action has a maximum 1-minute(60-second) timeout for synchronous invocations - - **Long-Running Functions**: For functions that may run longer than 1 minute, you must use the Event InvocationType. This invokes the function asynchronously. You can then use other actions (like aws.cloudwatch.getLogEvents or checking an SQS/SNS callback) to get the result. - - `InvocationType` is critical: - - `RequestResponse` (default): Invokes the function synchronously. The action waits for the function to complete and returns the response. - - `Event`: Invokes the function asynchronously. The action returns a success status immediately without waiting for the code to finish. - - `ClientContext` is for advanced use cases and the provided String must be Base64-encoded - - Any additional API parameters not listed above can be passed in the `parameters` map. To support a wide range of inputs, the `parameters` map accepts any optional argument available in the official boto3 API documentation. This allows you to dynamically construct requests by adding multiple fields. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - ```yaml - [{"success":true,"response":{"StatusCode":200,"ExecutedVersion":"$LATEST","Payload":{"statusCode":200,"body":"\"Hello userName\""}}}] - ``` -

- Response syntax can be referred to [invoke - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/invoke.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ValidationException: 1 validation error detected"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: lambda-invoke-function-test - description: 'Invokes a Lambda function with a payload' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_lambda_invoke_1 - type: action - action: aws.lambda.invoke - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-1 - functionName: my-lambda-processor - payload: '{"orderId": "12345", "amount": 99.99}' - next: end - ``` -
-
-
-
-
- - - - Modifies the configuration of a specific AWS Lambda function. Provide only the parameters you want to change. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`"my-lambda-function-to-update"`
**role**OptionalString`arn:aws:iam::123456789012:role/new-lambda-role`
**handler**OptionalString`“main.new_handler"`
**description**OptionalString`Updated function description`
**parameters**OptionalMap - ```yaml - { - "Timeout": "60", - "MemorySize": 123, - }, - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - ```yaml - [{"success":true,"response":{"FunctionName":"hello-you","FunctionArn":"arn:aws:lambda:us-east-2:----:function:hello-you","Runtime":"nodejs20.x","Role":"arn:aws:iam::----:role/TF-hello-you-role","Handler":"hello-you.handler","CodeSize":334,"Description":"This is hello you description from action","Timeout":30,"MemorySize":128,"LastModified":"2025-09-23T13:57:03.000+0000","CodeSha256":"CU03aDDg+34=","Version":"$LATEST","TracingConfig":{"Mode":"PassThrough"},"RevisionId":"0f1e4d9b-c45a-4896-a32d-7cd78e77a273","State":"Active","LastUpdateStatus":"InProgress","LastUpdateStatusReason":"The function is being created.","LastUpdateStatusReasonCode":"Creating","PackageType":"Zip","Architectures":["x86_64"],"EphemeralStorage":{"Size":512},"SnapStart":{"ApplyOn":"None","OptimizationStatus":"Off"},"RuntimeVersionConfig":{"RuntimeVersionArn":"arn:aws:lambda:us-east-2::runtime:01eab27397bfdbdc243d363698d4bc355e3c8176d34a51cd47dfe58cf977f508"},"LoggingConfig":{"LogFormat":"Text","LogGroup":"/aws/lambda/hello-you"}}}] - ``` -

- Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/update_function_configuration.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`[ { "errorMessage": "An error occurred (ResourceNotFoundException) when calling the UpdateFunctionConfiguration operation: Function not found: arn:aws:lambda:us-east-2:661945836867:function:my-lambda-function-to-update", "success": false, "response": null } ]`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: lambda-update-config-test - description: 'Updates the timeout and memory of a Lambda function' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_lambda_update_function_configuration_1 - type: action - action: aws.lambda.updateFunctionConfiguration - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-west-2 - functionName: my-lambda-function-to-update - parameters: - Timeout:60 - MemorySize:123 - - next: end - ``` -
-
-
-
-
- - - - Retrieves the configuration details, code location, and other metadata for a specific AWS Lambda function. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`"my-lambda-function"`
**parameters**OptionalMap - ```yaml - { - "Qualifier": "1" - }, - ``` -
**selectors**OptionalList`[[{"name": "response", "expression": ".response"}]`
- - - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - ```yaml - {"response": } - ``` -

- Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/get_function.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ResourceNotFoundException: Function not found"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: lambda-get-function-test - description: 'Retrieves the configuration of a specific Lambda function' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_lambda_getFunction_1 - type: action - action: aws.lambda.getFunction - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-1 - FunctionName: hello-you - parameters: - Qualifier: 1 - next: end - ``` -
-
-
-
-
- - - Returns a list of aliases for a specific AWS Lambda function. Aliases are pointers to function versions. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`“my-lambda-function“`
**marker**OptionalString - Pass the `NextMarker` token from a previous response for pagination. -

- e.g., `“abcd....."` -

-
**maxItems**OptionalInt - Limit the number of aliases returned -

- e.g., `123` -

-
**parameters**OptionalMap - For additional optional API parameters. -

- e.g., `{"AnotherOptionalParam": "value"}` -

-
**selectors**OptionalList`[{"name": "response", "expression": ".response"}]`
- - - - **Pagination**: Use the Marker and MaxItems inputs to paginate through a large number of aliases. - - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - ```yaml - {"response": } - ``` -

- Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/list_aliases.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ResourceNotFoundException: Function not found"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: lambda-list-aliases-test - description: 'Lists all aliases for a Lambda function' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_lambda_list_aliases_1 - type: action - action: aws.lambda.listAliases - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-1 - functionName: hello-you - parameters: - FunctionVersion: 1 - next: end - ``` -
-
-
-
-
-
- -## EC2 actions - - - - - This action deletes an Amazon EC2 snapshot. You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**snapshotId**RequiredString`“snapshot-id-1"`
**selectors**OptionalString`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**Object - No Response in case of success : true -

- Response syntax can be referred [delete_snapshot - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/delete_snapshot.html). -

-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Failed to delete snapshot"`
-
- - - - - - - - - - - - - -
Workflow Example
- ```yaml - name: ec2-deleteSnapshot-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - snapshotId: - type: List - defaultValue: snapshot-id-1 - steps: - - name: aws_ec2_deleteSnapshot_1 - type: action - action: aws.ec2.deleteSnapshot - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - snapshotId: ${{ .workflowInputs.snapshotId }} - next: end - ``` -
-
-
-
-
- - - - Requests a reboot of the specified instances. This operation is asynchronous; it only queues a request to reboot the specified instances. The operation succeeds if the instances are valid and belong to you. Requests to reboot terminated instances are ignored. - - If an instance does not cleanly shut down within a few minutes, Amazon EC2 performs a hard reboot. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**Object[reboot_instances - Boto3 1.40.56 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/reboot_instances.html)
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: reboot-ec2-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: List - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_rebootInstances_1 - type: action - action: aws.ec2.rebootInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end - ``` -
-
-
-
-
- - - - Starts an Amazon EBS-backed instance that you previously stopped. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**Object - ```yaml - {"response":{ - 'StartingInstances': [ - { - 'InstanceId': 'String', - 'CurrentState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - }, - 'PreviousState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - } - }, - ] - } - - } - - } - ``` -

- Response syntax can be referred [start_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/start_instances.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "The parameter instancesSet cannot be used with the parameter maxResults"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: ab-ec2-startInstance-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_startInstances_1 - type: action - action: aws.ec2.startInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end - ``` -
-
-
-
-
- - - - Terminates the specified instances. This operation is [idempotent](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html); if you terminate an instance more than once, each call succeeds. - - If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - ```yaml - { - 'TerminatingInstances': [ - { - 'InstanceId': 'String', - 'CurrentState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - }, - 'PreviousState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - } - }, - ] - } - ``` -

- Response syntax can be referred [terminate_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/terminate_instances.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (`InvalidInstanceID.Malformed`) when calling the TerminateInstances operation: The instance ID 'i-012345678' is malformed"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: ec2-terminate-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_terminateInstances_1 - type: action - action: aws.ec2.terminateInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end - ``` -
-
-
-
-
- - - - Launches the specified number of instances using an AMI for which you have permissions. - - You can specify a number of options, or leave the default options. The following rules apply: - - If you don’t specify a subnet ID, we choose a default subnet from your default VPC for you. If you don’t have a default VPC, you must specify a subnet ID in the request. - - If any of the AMIs have a product code attached for which the user has not subscribed, the request fails. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**imageId**RequiredString`“ami-0ca4d5db4872d0c28”`
**instanceType**RequiredString`“t2.micro”`
**minCount**RequiredInt`1`
**maxCount**RequiredInt`10`
**parameters**OptionalMap - ```yaml - { - "EbsOptimized": false, - "TagSpecifications": [ - { - "ResourceType": "instance", - "Tags": [ - { - "Key": "Name", - "Value": "My-Web-Server" - } - ] - } - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object -

- Response syntax can be referred: [run_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/run_instances.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: ec2_run_instance - workflowInputs: - arnRole: - type: String - required: true - steps: - - name: RunInstance - type: action - action: aws.ec2.runInstances - version: '1' - inputs: - awsRoleArn: ${{.workflowInputs.arnRole}} - region: us-east-2 - imageId: ami-0ca4d5db4872d0c28 - instanceType: t2.micro - minCount: 1 - maxCount: 1 - parameters: - EbsOptimized: false - TagSpecifications: - - ResourceType: instance - Tags: - - Key: Name - Value: My-Test-Instance - selectors: - - name: instanceId - expression: .response.Instances[0].InstanceId - ``` -
-
-
-
-
- -
- -## Systems Manager actions - - - - Writes a document to the AWS account based on the AWS credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
**documentType**OptionalString`documentType: "Command"`
**documentFormat**OptionalString`documentFormat: "YAML"`
**documentContent**RequiredString
**override**OptionalBoolean - `override: true (default)`. When `true`, always write the document with the provided name even if one already exist. When `false`, if a document with the provided `documentName` already exist, the action returns `success: false` and `errorMessage:Document already exists`. Please enable override if you want to update the existing document. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**documentName**String`documentName: "my-ssm-document"`
**documentVersion**String`documentVersion: 1`
**documentType**String`documentType: "Command"`
**documentStatus**String`documentStatus: "Active"`.
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
-
- - - - - - - - - - - - - - - - - -
Workflow definitionInputsOutputs
- ```yaml - schemaVersion: '0.3' - description: List all Lambda function names. - mainSteps: - - name: ExecuteAwsApi - action: aws:executeAwsApi - isEnd: true - ``` - - ```yaml - inputs: - Service: lambda - Api: ListFunctions - ``` - - ```yaml - outputs: - - Name: resultFunctionName - Selector: $..FunctionName - Type: StringList - outputs: - - ExecuteAwsApi.resultFunctionName - ``` -
-
-
-
-
- - - Deletes an AWS document in the AWS account based on the credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**documentName**StringdocumentName: "my-ssm-document"
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
-
- - - - - - - - - - - - - - - - - -
Workflow definitionInputsOutputs
- ```yaml - schemaVersion: '0.3' - description: List all Lambda function names. - mainSteps: - - name: ExecuteAwsApi - action: aws:executeAwsApi - isEnd: true - ``` - - ```yaml - inputs: - Service: lambda - Api: ListFunctions - ``` - - ```yaml - outputs: - - Name: resultFunctionName - Selector: $..FunctionName - Type: StringList - outputs: - - ExecuteAwsApi.resultFunctionName - ``` -
-
-
-
-
- - - Starts an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartAutomationExecution.html) - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
**parameters**OptionalMap`parameters: myKey: myValue`
**idempotencyToken**OptionalUUID`idempotencyToken: "any token"`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**automationExecutionId**String`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
-
- - - - - - - - - - - - - - - - - -
Workflow definitionInputsOutputs
- ```yaml - schemaVersion: '0.3' - description: List all Lambda function names. - mainSteps: - - name: ExecuteAwsApi - action: aws:executeAwsApi - isEnd: true - ``` - - ```yaml - Service: lambda - Api: ListFunctions - ``` - - ```yaml - - Name: resultFunctionName - Selector: $..FunctionName - Type: StringList - outputs: - - ExecuteAwsApi.resultFunctionName - ``` -
-
-
-
-
- - - Waits for an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) for more information. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**automationExecutionId**RequiredString`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`. The automation executionID for which we need to wait for its completion.
**automationExecutionStatuses**OptionalListList of automation execution statuses from [AutomationExecution](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_AutomationExecution.html#AutomationExecutionStatus) that can stop the waiting, `Default: ["Success", "Failed"]`
**timeout**Optionalint`timeout: 600`. The duration in seconds can wait for automation status to be one of the expected `automationExecutionStatuses`. Post this timeout duration, the action return value with timeout error.
**selectors**OptionalList`[{\"name\": \"automationExecutionStatus\", \"expression\": \".automationExecutionStatus\"}, {\"name\": \"scriptOutput\", \"expression\": \".automationExecutionOutputs.pythonStep.scriptOutput | tojson\"}]`.
- - - 1. In the action input, only `awsAccessKeyId` and `awsSecretAccessKey` can be provided, but they should be static credentials of an IAM user. - 2. If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. - 3. Refer to the instructions to set up [AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials). - 4. Use selectors to get only the specified parameters as output. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**automationExecutionId**String`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`
**automationExecutionStatus**String`automationExecutionStatus: "Success"`. If action is successful, It will either of the values passed in `automationExecutionStatuses` input field. Else, this will be null.
**automationExecutionOutputs**Map - ```yaml - "automationExecutionOutputs": { - "ExecuteGetApiResources": { - "resultResourceId": [ - "pky3cb" - ] - }, - "ExecuteListVersionsByFunction": { - "resultLambdaVersionArn": [ - "arn:aws:lambda:us-east-2:123456789012:function:ApiGwTestFn:1" - ] - } - } - ``` -

- The output will be a map of output values from the document. Any output in the document can be collected using this output field and can be used in subsequent steps of the workflow automation definition. -

-
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
-
- - - - - - - - - - - - - - - - - -
Workflow definitionInputsOutputs
- ```yaml - schemaVersion: '0.3' - description: List all Lambda function names. - mainSteps: - - name: ExecuteAwsApi - action: aws:executeAwsApi - isEnd: true - ``` - - ```yaml - Service: lambda - Api: ListFunctions - ``` - - ```yaml - - Name: resultFunctionName - Selector: $..FunctionName - Type: StringList - outputs: - - ExecuteAwsApi.resultFunctionName - ``` -
-
-
-
-
- -
- -## General AWS actions - - - - - This action allows you to execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. - - ### Security and IAM configuration - - To use this action, you must configure AWS credentials. See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for detailed instructions on creating an IAM role or IAM user. - - - **Security best practice:** When defining IAM policies for this action, always use least-privilege access. Grant only the specific AWS API actions your workflow requires, and restrict permissions to specific resources rather than using wildcards. - - - ### Required IAM permissions - - The permissions you need depend on which AWS services and APIs your workflow calls. Use the examples below as templates for creating least-privilege policies. - - **Example: Allow sending messages to a specific SQS queue** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "sqs:SendMessage", - "Resource": "arn:aws:sqs:us-west-2::" - } - ] - } - ``` - - **Example: Allow querying a specific DynamoDB table** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "dynamodb:Query", - "Resource": "arn:aws:dynamodb:us-west-2::table/" - } - ] - } - ``` - - **Example: Multiple services with specific permissions** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "sqs:SendMessage", - "Resource": "arn:aws:sqs:us-west-2::" - }, - { - "Effect": "Allow", - "Action": "dynamodb:Query", - "Resource": "arn:aws:dynamodb:us-west-2::table/" - } - ] - } - ``` - - - - Replace ``, ``, and `` with your actual values - - Find available AWS service APIs in the [Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) - - For more complex IAM policy patterns, see the [AWS IAM documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) - - - For more information on how this action works, see the [AWS Systems Manager executeAwsApi documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-action-executeAwsApi.html). - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**service**RequiredString`service: "sqs"`.[AWS available services](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)
**api**RequiredStringapi: "create_queue"
**parameters**RequiredMap - ```yaml - parameters: { - "QueueName": "dks-testing-queue", - "Attributes": { - "DelaySeconds": "0", - "MessageRetentionPeriod": "86400" - } - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. - - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. - - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. - - Use selectors to get only the specified parameters as output. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object`{"response":` - }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html.
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "User does not have permission to query DynamoDB"`
-
- - - - ### Example 1: Send a message to an SQS queue - - This example demonstrates how to send a message to an Amazon SQS queue using the `aws.execute.api` action with IAM role authentication. - - ```yaml - name: sqs_send_message_example - - workflowInputs: - awsRoleArn: - type: String - description: "ARN of the IAM role to assume (e.g., arn:aws:iam::123456789012:role/workflow-sqs-role)" - awsRegion: - type: String - defaultValue: us-east-2 - awsQueueUrl: - type: String - defaultValue: "https://sqs.us-east-2.amazonaws.com//" - - steps: - - name: sendSqsMessage - type: action - action: aws.execute.api - version: 1 - inputs: - awsRoleArn: ${{ .workflowInputs.awsRoleArn }} - region: ${{ .workflowInputs.awsRegion }} - service: sqs - api: send_message - parameters: - QueueUrl: ${{ .workflowInputs.awsQueueUrl }} - MessageBody: | - { - "message": "deployment is bad", - "status": "not good" - } - selectors: - - name: success - expression: '.success' - - name: messageId - expression: '.response.MessageId' - - name: errorMessage - expression: '.errorMessage' - - - name: logResult - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - message: 'SQS message sent. Success: ${{ .steps.sendSqsMessage.outputs.success }}, MessageId: ${{ .steps.sendSqsMessage.outputs.messageId }}' - licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' - ``` - - **Required IAM policy for this example:** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "sqs:SendMessage", - "Resource": "arn:aws:sqs:us-east-2::" - } - ] - } - ``` - - **Expected outputs:** - - `success`: Boolean indicating whether the message was sent successfully - - `messageId`: The unique ID assigned by SQS to the sent message - - `errorMessage`: Error message if the operation failed - - ### Example 2: Query a DynamoDB table - - This example demonstrates how to query a DynamoDB table using the `aws.execute.api` action with session credentials. - - ```yaml - name: dynamodb_query_example - - workflowInputs: - awsAccessKeyId: - type: String - defaultValue: "${{ :secrets:AWS_ACCESS_KEY_ID }}" - awsSecretAccessKey: - type: String - defaultValue: "${{ :secrets:AWS_SECRET_ACCESS_KEY }}" - awsSessionToken: - type: String - defaultValue: "${{ :secrets:AWS_SESSION_TOKEN }}" - awsRegion: - type: String - defaultValue: us-east-2 - tableName: - type: String - defaultValue: workflow-definitions-prod - scopedName: - type: String - description: "The scoped name to query" - version: - type: String - defaultValue: "1" - - steps: - - name: queryDynamoDB - type: action - action: aws.execute.api - version: 1 - inputs: - awsAccessKeyId: ${{ .workflowInputs.awsAccessKeyId }} - awsSecretAccessKey: ${{ .workflowInputs.awsSecretAccessKey }} - awsSessionToken: ${{ .workflowInputs.awsSessionToken }} - region: ${{ .workflowInputs.awsRegion }} - service: dynamodb - api: query - parameters: - TableName: ${{ .workflowInputs.tableName }} - KeyConditionExpression: "ScopedName = :scopedNameValue AND Version = :versionValue" - ExpressionAttributeValues: - ":scopedNameValue": - S: ${{ .workflowInputs.scopedName }} - ":versionValue": - N: ${{ .workflowInputs.version }} - selectors: - - name: success - expression: '.success' - - name: response - expression: '.response' - - name: errorMessage - expression: '.errorMessage' - - - name: logResult - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - message: 'DynamoDB query result: ${{ .steps.queryDynamoDB.outputs.response.Items }}' - licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' - ``` - - **Required IAM policy for this example:** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "dynamodb:Query", - "Resource": "arn:aws:dynamodb:us-east-2::table/workflow-definitions-prod" - } - ] - } - ``` - - **Expected outputs:** - - `success`: Boolean indicating whether the query was successful - - `response`: The DynamoDB query response containing the matching items - - `errorMessage`: Error message if the operation failed - -
-
-
-
- -## CloudWatch actions - - - - - This action retrieves a batch of log events from a specified log stream in AWS CloudWatch Logs. It's essential for monitoring, auditing, and troubleshooting applications by programmatically fetching log data. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**logStreamName**RequiredString`"2023/10/27/[$LATEST]abcdef123456"`
**logGroupName**OptionalString`"/aws/lambda/my-function"`
**logGroupIdentifier**OptionalString`“arn:partition:service:region:account-id:resource”`
**startTime**OptionalInt`1759296000000`
**endTime**OptionalInt`1759296000000`
**limit**OptionalInt`50`
**startFromHead**OptionalBoolean`true`
**unmask**OptionalBoolean`false`
**nextToken**OptionalString`“f/39218833627378687642013305455131706539523449361490509828/s”`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - ```yaml - { - 'events': [ - { - 'timestamp': 123, - 'message': 'string', - 'ingestionTime': 123 - }, - ], - 'nextForwardToken': 'string', - 'nextBackwardToken': 'string' -} - ``` -
**success**Boolean`success: true | false`
**errorMessage**String`“An error occurred (ExpiredTokenException) when calling the GetLogEvents operation: The security token included in the request is expired”`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: get-lambda-logs - description: 'Retrieve log events from an AWS Lambda function' - workflowInputs: - region: - type: String - defaultValue: us-east-2 - logGroupName: - type: String - defaultValue: /aws/lambda/my-function - logStreamName: - type: String - defaultValue: 2023/10/27/[$LATEST]abcdef123456 - steps: - name: get_events_step - type: action - action: aws.cloudwatch.get_log_events - version: '1' - inputs: - region: ${{ .workflowInputs.region }} - logGroupName: ${{ .workflowInputs.logGroupName }} - logStreamName: ${{ .workflowInputs.logStreamName }} - limit: 100 - ``` -
-
-
-
-
- - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**logGroupName**RequiredString`"/aws/lambda/hello-you"`
**logStreamName**RequiredString`"2025/09/24/[$LATEST]09f7ca9e9ab044f389419ce60305f594"`
**logEvents**RequiredList - ```yaml - [ - -{ "timestamp": 1698384000000, "message": "Workflow task started." }, - - { "timestamp": 1698384000015, "message": "Data validated successfully." } ] - ``` -
**entity**OptionalDict`{ "entity": { "keyAttributes": { "ResourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer", "Identifier": "app/my-web-lb/12345", "Environment": "Production" }, "attributes": { "MonitoringTier": "Gold", "OwnerTeam": "Networking", "MaintenanceWindow": "Sat: 0200-0400" } } }`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - ```yaml - { - 'events': [ - { - 'timestamp': 123, - 'message': 'string', - 'ingestionTime': 123 - }, - ], - 'nextForwardToken': 'string', - 'nextBackwardToken': 'string' - } -``` -
**success**Boolean`success: true | false`
**errorMessage**String`“An error occurred (ExpiredTokenException) when calling the GetLogEvents operation: The security token included in the request is expired”`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: get-lambda-logs - description: 'Retrieve log events from an AWS Lambda function' - workflowInputs: - region: - type: String - defaultValue: us-east-2 - logGroupName: - type: String - defaultValue: /aws/lambda/my-function - logStreamName: - type: String - defaultValue: 2023/10/27/[$LATEST]abcdef123456 - steps: - name: get_events_step - type: action - action: aws.cloudwatch.get_log_events - version: '1' - inputs: - region: ${{ .workflowInputs.region }} - logGroupName: ${{ .workflowInputs.logGroupName }} - logStreamName: ${{ .workflowInputs.logStreamName }} - limit: 100 - ``` -
-
-
-
-
-
- -## S3 actions - - - - - The `listObjectsV2` method returns some or all (up to 1,000) of the objects in a bucket. It is a more modern and recommended version of `list_objects`. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**prefix**OptionalString"`path/to/folder/`"
**maxKeys**OptionalInteger`100`
**continuationToken**OptionalString`some-token`
**parameters**OptionalMap - ```graphql - { - "Delimiter": "/" - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldType
EncodingTypeString
FetchOwnerBoolean
StartAfterString
RequestPayerString
ExpectedBucketOwnerString
OptionalObjectAttributesList
DelimiterString
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - - - ```yaml - { - 'IsTruncated': True|False, - 'Contents': [ - { - 'Key': 'string', - 'LastModified': datetime(2015, 1, 1), - 'ETag': 'string', - 'ChecksumAlgorithm': [ - 'CRC32'|'CRC32C'|'SHA1'|'SHA256'|'CRC64NVME', - ], - 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', - 'Size': 123, - 'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'GLACIER'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'DEEP_ARCHIVE'|'OUTPOSTS'|'GLACIER_IR'|'SNOW'|'EXPRESS_ONEZONE'|'FSX_OPENZFS', - 'Owner': { - 'DisplayName': 'string', - 'ID': 'string' - }, - 'RestoreStatus': { - 'IsRestoreInProgress': True|False, - 'RestoreExpiryDate': datetime(2015, 1, 1) - } - }, - ], - 'Name': 'string', - 'Prefix': 'string', - 'Delimiter': 'string', - 'MaxKeys': 123, - 'CommonPrefixes': [ - { - 'Prefix': 'string' - }, - ], - 'EncodingType': 'url', - 'KeyCount': 123, - 'ContinuationToken': 'string', - 'NextContinuationToken': 'string', - 'StartAfter': 'string', - 'RequestCharged': 'requester' - } - ``` -

- Response syntax can be referred to in the [list_objects_v2 - Boto3 1.40.52 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/list_objects_v2.html) -

-
-
-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Parameter validation failed:\nInvalid bucket name \"s3-activity-test \": Bucket name must match the regex \"^[a-zA-Z0-9.\\-_]{1,255}$\" or be an ARN matching the regex \"^arn:(aws).:(s3|s3-object-lambda):[a-z\\-0-9]:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\\-]{1,63}$\""`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: aws-s3-list-objects-v2 - description: 'List Objects in an AWS S3 Bucket' - - steps: - - name: aws_s3_listObjectsV2_1 - type: action - action: aws.s3.listObjectsV2 - version: '1' - inputs: - awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" - region: "us-east-2" - bucket: "examplebucket" - prefix: "path/to/folder/" - maxKeys: 100 - continuationToken: "some-token" - next: end - ``` -
-
-
-
-
- - - - The `deleteObject` method permanently removes a single object from a bucket. For versioned buckets, this operation inserts a **delete marker**, which hides the object without permanently deleting it unless a `VersionId` is specified. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**parameters**OptionalMap - ```yaml - { - "RequestPayer": "test", - "BypassGovernanceRetention": false - "VersionId":"testVersion", - "MFA":"Test" - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldType
RequestPayerString
BypassGovernanceRetentionBoolean
ExpectedBucketOwnerString
IfMatchString
IfMatchLastModifiedTimeMap
IfMatchSizeInt
VersionIdString
MFAString
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - - - ```yaml - { - 'DeleteMarker': True|False, - 'VersionId': 'string', - 'RequestCharged': 'requester' - } - ``` -

- Response syntax can be referred [delete_object - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/delete_object.html) -

-
-
-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Parameter validation failed:\nInvalid bucket name \"s3-activity-test \": Bucket name must match the regex \"^[a-zA-Z0-9.\\-_]{1,255}$\" or be an ARN matching the regex \"^arn:(aws).:(s3|s3-object-lambda):[a-z\\-0-9]:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\\-]{1,63}$\""`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: aws-s3-delete-object - description: 'Delete an AWS S3 Object' - - steps: - - name: aws_s3_deleteObject_1 - type: action - action: aws.s3.deleteObject - version: '1' - inputs: - awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" - region: "us-west-2" - bucket: "my-bucket" - key: "path/to/object.txt" - next: end - ``` -
-
-
-
-
- - - - Adds an object to a bucket. Amazon S3 is a distributed system. If it receives multiple write requests for the same object simultaneously, it overwrites all but the last object written. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**body**RequiredString`file content`
**contentType**RequiredString"`plain/text`"
**tagging**OptionalString`“key1=value1"`
**parameters**OptionalMap - ```yaml - { - "ServerSideEncryption": "AES256", - "Metadata": { - 'metadata1': 'value1', - 'metadata2': 'value2', - } - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldType
RequestPayerString
ACLString
CacheControlString
ContentDispositionString
ContentEncodingString
ContentLanguageString
ContentLengthInt
ContentMD5String
ChecksumAlgorithmString
ChecksumCRC32String
ChecksumCRC32CString
ChecksumCRC64NVMEString
ChecksumSHA1String
ChecksumSHA256String
ExpiresMap
IfMatchString
IfNoneMatchString
GrantFullControlString
GrantReadString
GrantReadACPString
GrantWriteACPString
WriteOffsetBytesInt
ServerSideEncryptionString
StorageClassString
WebsiteRedirectLocationString
SSECustomerAlgorithmString
SSECustomerKeyString
SSEKMSKeyIdString
SSEKMSEncryptionContextString
BucketKeyEnabledBoolean
RequestPayerString
ObjectLockModeString
ObjectLockRetainUntilDateMap
ObjectLockLegalHoldStatusString
ExpectedBucketOwnerString
MetadataMap
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - - - ```yaml - { - 'Expiration': 'string', - 'ETag': 'string', - 'ChecksumCRC32': 'string', - 'ChecksumCRC32C': 'string', - 'ChecksumCRC64NVME': 'string', - 'ChecksumSHA1': 'string', - 'ChecksumSHA256': 'string', - 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', - 'ServerSideEncryption': 'AES256'|'aws:fsx'|'aws:kms'|'aws:kms:dsse', - 'VersionId': 'string', - 'SSECustomerAlgorithm': 'string', - 'SSECustomerKeyMD5': 'string', - 'SSEKMSKeyId': 'string', - 'SSEKMSEncryptionContext': 'string', - 'BucketKeyEnabled': True|False, - 'Size': 123, - 'RequestCharged': 'requester' - } - ``` -

- Response syntax can be referred [put_object - Boto3 1.40.59 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/put_object.html) -

-
-
-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: s3-put-object - description: 'Put an AWS S3 Object' - - steps: - - name: aws_s3_putObject_1 - type: action - action: aws.s3.putObject - version: '1' - inputs: - awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" - region: "us-east-2" - bucket: "examplebucket" - key: "path/to/object.txt" - body: "Hello world" - contentType: "plain/text" - tagging: "key1=value1" - next: end - ``` -
-
-
-
-
- - - - In the `GetObject` request, specify the full key name for the object. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**versionId**OptionalString`"some-version-id"`
**range**OptionalString`bytes=0-99`
**parameters**OptionalMap - ```yaml - { - "ChecksumMode": "ENABLED", - "ExpectedBucketOwner": "test-user" - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - The action will fail if the object is more than 100kb. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldType
IfMatchString
IfModifiedSinceMap
IfNoneMatchString
IfUnmodifiedSinceMap
ResponseCacheControlString
ResponseContentDispositionString
ResponseContentEncodingString
ResponseContentLanguageString
ResponseContentTypeString
ResponseExpiresMap
SSECustomerAlgorithmString
SSECustomerKeyString
RequestPayerString
PartNumberInt
ExpectedBucketOwnerString
ChecksumModeString
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - - - ```yaml - { - 'Body': StreamingBody(), - 'DeleteMarker': True|False, - 'AcceptRanges': 'string', - 'Expiration': 'string', - 'Restore': 'string', - 'LastModified': datetime(2015, 1, 1), - 'ContentLength': 123, - 'ETag': 'string', - 'ChecksumCRC32': 'string', - 'ChecksumCRC32C': 'string', - 'ChecksumCRC64NVME': 'string', - 'ChecksumSHA1': 'string', - 'ChecksumSHA256': 'string', - 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', - 'MissingMeta': 123, - 'VersionId': 'string', - 'CacheControl': 'string', - 'ContentDisposition': 'string', - 'ContentEncoding': 'string', - 'ContentLanguage': 'string', - 'ContentRange': 'string', - 'ContentType': 'string', - 'Expires': datetime(2015, 1, 1), - 'ExpiresString': 'string', - 'WebsiteRedirectLocation': 'string', - 'ServerSideEncryption': 'AES256'|'aws:fsx'|'aws:kms'|'aws:kms:dsse', - 'Metadata': { - 'string': 'string' - }, - 'SSECustomerAlgorithm': 'string', - 'SSECustomerKeyMD5': 'string', - 'SSEKMSKeyId': 'string', - 'BucketKeyEnabled': True|False, - 'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'GLACIER'|'DEEP_ARCHIVE'|'OUTPOSTS'|'GLACIER_IR'|'SNOW'|'EXPRESS_ONEZONE'|'FSX_OPENZFS', - 'RequestCharged': 'requester', - 'ReplicationStatus': 'COMPLETE'|'PENDING'|'FAILED'|'REPLICA'|'COMPLETED', - 'PartsCount': 123, - 'TagCount': 123, - 'ObjectLockMode': 'GOVERNANCE'|'COMPLIANCE', - 'ObjectLockRetainUntilDate': datetime(2015, 1, 1), - 'ObjectLockLegalHoldStatus': 'ON'|'OFF' - } - ``` -

- Response syntax can be referred to in the [get_object - Boto3 1.40.59 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/get_object.html) -

-
-
-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (InvalidArgument) when calling the GetObject operation: Invalid version id specified"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: s3-get-object - description: 'Get an AWS S3 Object' - - steps: - - name: aws_s3_getObject_1 - type: action - action: aws.s3.getObject - version: '1' - inputs: - awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" - region: "us-east-2" - bucket: "examplebucket" - key: "path/to/object.txt" - next: end - ``` -
-
-
-
-
-
- -## SNS actions - - - - - Sends a message to an Amazon SNS topic. All subscribers to the topic will receive the message. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**message**RequiredString - Messages must be UTF-8 encoded strings and at most 256 KB in size -

- `'Workflow failed at step 3'` -

-
**topicArn**OptionalString - If you don’t specify a value for the topicArn parameter, Must specify a value for the targetArn parameters. -

- `“arn:aws:sns:us-east-2:123456789012:my-topic”` -

-
**targetArn**OptionalString - If you don’t specify a value for the topicArn parameter, Must specify a value for the targetArn parameters. -

- `"arn:aws:sns:us-east-2:123456789012:MySNSTopic"` -

-
**subject**OptionalString`"Workflow Update"`
**MessageStructure**OptionalString`MessageStructure`
**messageAttributes**OptionalMap - ```json - { - 'string': { - 'DataType': 'string', - 'StringValue': 'string', - 'BinaryValue': b'bytes' - } - }, - ``` -
**messageDeduplicationId**OptionalString`“abc123deduplicationId5678”`
**messageGroupId**OptionalString`“order-processing-group-2023_A”`
- - - - - - - - - - - - - - - - - - -
Input FieldTypeExample
PhoneNumberStringWe do not include PhoneNumber as it is considered Personally Identifiable Information (PII).
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - `[{"success":true,"response":{"MessageId":"2333ededwedwed-52f5-a716-e10355e3e2ff"}}]` -

- Response syntax can be referred to sns-publish- Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns/client/publish.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`[{"errorMessage":"An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: TopicArn or TargetArn Reason: no value for required parameter","success":false,"response":null}]`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: sns-publish-test - description: Publishes a notification to an SNS topic - workflowInputs: - arnRole: - type: String - steps: - - name: aws_sns_publish_1 - type: action - action: aws.sns.publish - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-1 - topicArn: arn:aws:sns:us-east-1:123456789012:workflow-test-topic - subject: "Workflow Update" - message: "The data processing workflow has completed successfully." - next: end - ``` -
-
-
-
-
-
- -## SQS actions - - - - - Sends a message to a specified Amazon SQS queue. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**queueUrl**RequiredString"`https://sqs.us-east-2.amazonaws.com/123456789012/my-queue`"
**messageBody**RequiredString`“This is a test message”`
**messageDeduplicationId**OptionalString`“abc123deduplicationId5678”`
**messageGroupId**OptionalString`“group1”`
**messageAttributes**OptionalMap -

- `{ "my_attribute_name_1": { "DataType": "String", "StringValue":"my_attribute_value_1"},` -

- -

- `"my_attribute_name_2": { "DataType": "String", "StringValue":"my_attribute_value_2"}}` -

-
**delaySeconds**OptionalInt`123`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - `{"statusCode":200, "payload":{"status":"success","data":{"MessageId":"e9b73a52-d018-4a73-9fcd-8efb682fba43","MD5OfMessageBody":"fae535c7f7c5687a1c3d8bc52288e33a","MD5OfMessageAttributes":"3ae3c4f59958e031d0d53af2d157e834", }, "message":"Message sent successfully to the SQS queue." }}` -

- Response syntax can be referred to [SQS send_message - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/client/send_message.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "SQS.Client.exceptions.QueueDoesNotExist: "The specified queue does not exist.""`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: sqs-send-message-test - description: Sends a message to an SQS queue - workflowInputs: - arnRole: - type: String - steps: - - name: aws_sqs_sendMessage_1 - type: action - action: aws.sqs.sendMessage - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-2 - queueUrl: https://sqs.us-east-2.amazonaws.com/123456789012/workflow-test-queue - messageBody: "This is a test message" - messageAttributes: - my_attribute_name_1: - DataType: "String" - StringValue: "my_attribute_value_1" - my_attribute_name_2: - DataType: "String" - StringValue: "my_attribute_value_2" - next: end - ``` -
-
-
-
-
-
- - - - - Retrieves one or more messages, from the specified queue - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**queueUrl**RequiredString"`https://sqs.us-east-2.amazonaws.com/123456789012/my-queue`"
**maxNumberOfMessages**OptionalInt`10`
**waitTimeSeconds**OptionalInt`5`
**VisibilityTimeout**OptionalInt`123`
**AttributeNames**OptionalList - ```yaml - [ - 'All'|'Policy'|'VisibilityTimeout'|'MaximumMessageSize'|'MessageRetentionPeriod'|'ApproximateNumberOfMessages'|'ApproximateNumberOfMessagesNotVisible'|'CreatedTimestamp'|'LastModifiedTimestamp'|'QueueArn'|'ApproximateNumberOfMessagesDelayed'|'DelaySeconds'|'ReceiveMessageWaitTimeSeconds'|'RedrivePolicy'|'FifoQueue'|'ContentBasedDeduplication'|'KmsMasterKeyId'|'KmsDataKeyReusePeriodSeconds'|'DeduplicationScope'|'FifoThroughputLimit'|'RedriveAllowPolicy'|'SqsManagedSseEnabled', - ] - ``` -
**messageAttributeNames**OptionalList - ```yaml - [ - 'message_attribute_name', - ], - ``` -
**messageSystemAttributeNames**OptionalList`['SenderId', 'SentTimestamp']`
**receiveRequestAttemptId**OptionalString`“req-1234abcd”`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object - `{"response": }
` -

- Response syntax can be referred to receive_message - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/client/receive_message.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "SQS.Client.exceptions.QueueDoesNotExist: "The specified queue does not exist.""`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: sqs-receive-message-test - description: 'Receives a message from an SQS queue' - steps: - - name: aws_sqs_receiveMessage_1 - type: action - action: aws.sqs.receiveMessage - version: '1' - inputs: - awsRoleArn: ${{ :secrets:awsRoleArn }} - region: us-east-1 - queueUrl: https://sqs.us-east-1.amazonaws.com/123456789012/workflow-test-queue - waitTimeSeconds: 5 - maxNumberOfMessages: 10 - messageAttributeNames: ['message_attribute_name'], - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete.mdx new file mode 100644 index 00000000000..ea6c40a6dd1 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete.mdx @@ -0,0 +1,193 @@ +--- +title: "HTTP DELETE" +tags: + - workflow automation + - workflow + - workflow automation actions + - HTTP actions + - HTTP DELETE +metaDescription: "A list of available http delete in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for http delete available in the workflow automation actions catalog. These actions enable you to http delete request operations. + +## Prerequisites + +Before using HTTP actions in workflow automation, ensure you have: + + * Target API endpoint URLs. + * Any required authentication credentials (API keys, tokens, etc.). + * Understanding of the API request/response formats. + + + HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. + + + + + + + +Performs an HTTP DELETE request to remove data at an API endpoint. + + + If you need to pass sensitive data to an input, for example an `Api-Key` header, you can use values stored via the [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph mutation. + + Example: + ```json + { + "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + } + ``` + + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The URL must include the scheme (for example, https:// or http://). Example: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
+
+ + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: httpDeleteTest + description: 'Performs an HTTP DELETE request to remove data' + workflowInputs: + url: + type: String + urlParams: + type: String + headers: + type: String + selectors: + type: String + steps: + - name: query + type: action + action: http.delete + version: '1' + inputs: + url: ${{ .workflowInputs.url }} + urlParams: ${{ .workflowInputs.urlParams }} + headers: ${{ .workflowInputs.headers }} + selectors: ${{ .workflowInputs.selectors }} + next: end + ``` + + **Example inputs:** + ```json + { + "url": "https://example.com", + "urlParams": "{\"foo\": \"bar\"}", + "headers": "{\"baz\": \"bat\"}", + "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" + } + ``` + + **Example outputs:** + ```json + { + "responseBody": "\n...\n", + "statusCode": 200 + } + ``` +
+
+
+
+
+ diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get.mdx new file mode 100644 index 00000000000..50539f13f43 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get.mdx @@ -0,0 +1,181 @@ +--- +title: "HTTP GET" +tags: + - workflow automation + - workflow + - workflow automation actions + - HTTP actions + - HTTP GET +metaDescription: "A list of available http get in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for http get available in the workflow automation actions catalog. These actions enable you to http get request operations. + +## Prerequisites + +Before using HTTP actions in workflow automation, ensure you have: + + * Target API endpoint URLs. + * Any required authentication credentials (API keys, tokens, etc.). + * Understanding of the API request/response formats. + + + HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. + + + + + + + +Perform an HTTP GET call to retrieve data from an API endpoint. + + + This supports secret syntax for any header value. + + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The scheme must be included: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
+
+ + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: httpGetTest + description: 'Performs an HTTP GET request to retrieve data' + workflowInputs: + url: + type: String + urlParams: + type: String + headers: + type: String + steps: + - name: query + type: action + action: http.get + version: '1' + inputs: + url: ${{ .workflowInputs.url }} + urlParams: ${{ .workflowInputs.urlParams }} + headers: ${{ .workflowInputs.headers }} + next: end + ``` + + **Example inputs:** + ```json + { + "url": "https://example.com", + "urlParams": "{\"foo\": \"bar\"}", + "headers": "{\"baz\": \"bat\"}" + } + ``` + + **Example outputs:** + ```json + { + "responseBody": "\n...\n", + "statusCode": 200 + } + ``` +
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post.mdx new file mode 100644 index 00000000000..562d6c1ad31 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post.mdx @@ -0,0 +1,191 @@ +--- +title: "HTTP POST" +tags: + - workflow automation + - workflow + - workflow automation actions + - HTTP actions + - HTTP POST +metaDescription: "A list of available http post in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for http post available in the workflow automation actions catalog. These actions enable you to http post request operations. + +## Prerequisites + +Before using HTTP actions in workflow automation, ensure you have: + + * Target API endpoint URLs. + * Any required authentication credentials (API keys, tokens, etc.). + * Understanding of the API request/response formats. + + + HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. + + + + + + + +Performs an HTTP POST call to send data to an API endpoint. + + + This supports secret syntax for any header value. + + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The scheme must be included: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**body**OptionalStringThe request body.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
+
+ + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: httpPostTest + description: 'Performs an HTTP POST request to send data' + workflowInputs: + url: + type: String + urlParams: + type: String + headers: + type: String + body: + type: String + steps: + - name: query + type: action + action: http.post + version: '1' + inputs: + url: ${{ .workflowInputs.url }} + urlParams: ${{ .workflowInputs.urlParams }} + headers: ${{ .workflowInputs.headers }} + body: ${{ .workflowInputs.body }} + next: end + ``` + + **Example inputs:** + ```json + { + "url": "https://example.com", + "headers": "{\"Content-Type\":\"application/json\"}", + "urlParams": "{\"foo\": \"bar\"}", + "body": "{\"foo\": \"bar\"}" + } + ``` + + **Example outputs:** + ```json + { + "responseBody": "", + "statusCode": 200 + } + ``` +
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put.mdx new file mode 100644 index 00000000000..b0884f726b1 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put.mdx @@ -0,0 +1,202 @@ +--- +title: "HTTP PUT" +tags: + - workflow automation + - workflow + - workflow automation actions + - HTTP actions + - HTTP PUT +metaDescription: "A list of available http put in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for http put available in the workflow automation actions catalog. These actions enable you to http put request operations. + +## Prerequisites + +Before using HTTP actions in workflow automation, ensure you have: + + * Target API endpoint URLs. + * Any required authentication credentials (API keys, tokens, etc.). + * Understanding of the API request/response formats. + + + HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. + + + + + + + +Performs an HTTP PUT request to update data at an API endpoint. + + + If you need to pass sensitive data to an input, for example an `Api-Key` header, you can use values stored via the [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph mutation. + + Example: + ```json + { + "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + } + ``` + + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The URL must include the scheme (for example, https:// or http://). Example: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**body**OptionalStringThe request body.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
+
+ + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: httpPutTest + description: 'Performs an HTTP PUT request to update data' + workflowInputs: + url: + type: String + urlParams: + type: String + headers: + type: String + body: + type: String + selectors: + type: String + steps: + - name: query + type: action + action: http.put + version: '1' + inputs: + url: ${{ .workflowInputs.url }} + urlParams: ${{ .workflowInputs.urlParams }} + headers: ${{ .workflowInputs.headers }} + body: ${{ .workflowInputs.body }} + selectors: ${{ .workflowInputs.selectors }} + next: end + ``` + + **Example inputs:** + ```json + { + "url": "https://example.com", + "headers": "{\"Content-Type\":\"application/json\"}", + "urlParams": "{\"foo\": \"bar\"}", + "body": "{\"foo\": \"bar\"}", + "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" + } + ``` + + **Example outputs:** + ```json + { + "responseBody": "", + "statusCode": 200 + } + ``` +
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx deleted file mode 100644 index edfc92f7285..00000000000 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx +++ /dev/null @@ -1,664 +0,0 @@ ---- -title: "HTTP actions" -tags: - - workflow automation - - workflow - - workflow automation actions - - HTTP actions -metaDescription: "A list of available HTTP actions in the actions catalog for workflow definitions" -freshnessValidatedDate: never ---- - - - We're still working on this feature, but we'd love for you to try it out! - - This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -This page provides a comprehensive reference for HTTP actions available in the workflow automation actions catalog. These actions enable you to make HTTP requests (GET, POST, PUT, DELETE) to external APIs and services as part of your workflow definitions. - -## Prerequisites - -Before using HTTP actions in workflow automation, ensure you have: - - * Target API endpoint URLs. - * Any required authentication credentials (API keys, tokens, etc.). - * Understanding of the API request/response formats. - - - HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. - - -## HTTP actions - - - - -Perform an HTTP GET call to retrieve data from an API endpoint. - - - This supports secret syntax for any header value. - - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The scheme must be included: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
-
- - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: httpGetTest - description: 'Performs an HTTP GET request to retrieve data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - steps: - - name: query - type: action - action: http.get - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - next: end - ``` - - **Example inputs:** - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}" - } - ``` - - **Example outputs:** - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - -Performs an HTTP POST call to send data to an API endpoint. - - - This supports secret syntax for any header value. - - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The scheme must be included: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**body**OptionalStringThe request body.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
-
- - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: httpPostTest - description: 'Performs an HTTP POST request to send data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - steps: - - name: query - type: action - action: http.post - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - next: end - ``` - - **Example inputs:** - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}" - } - ``` - - **Example outputs:** - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - -Performs an HTTP PUT request to update data at an API endpoint. - - - If you need to pass sensitive data to an input, for example an `Api-Key` header, you can use values stored via the [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph mutation. - - Example: - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The URL must include the scheme (for example, https:// or http://). Example: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**body**OptionalStringThe request body.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
-
- - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: httpPutTest - description: 'Performs an HTTP PUT request to update data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.put - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Example inputs:** - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Example outputs:** - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - -Performs an HTTP DELETE request to remove data at an API endpoint. - - - If you need to pass sensitive data to an input, for example an `Api-Key` header, you can use values stored via the [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph mutation. - - Example: - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeDescription
**url**RequiredStringThe target URL for the request. The URL must include the scheme (for example, https:// or http://). Example: `https://example.com`
**urlParams**OptionalMapThe query parameters to append to the URL. Takes a stringified JSON object.
**headers**OptionalMapThe headers to add to the request. Takes a stringified JSON object.
**selectors**OptionalListThe selectors to get only the specified parameters as output.
-
- - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeDescription
**responseBody**StringThe body of the response.
**statusCode**IntegerThe HTTP status code of the response.
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: httpDeleteTest - description: 'Performs an HTTP DELETE request to remove data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.delete - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Example inputs:** - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Example outputs:** - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
-
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx deleted file mode 100644 index 4c2acb0fd97..00000000000 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx +++ /dev/null @@ -1,1132 +0,0 @@ ---- -title: "New Relic actions" -tags: - - workflow automation - - workflow - - workflow automation actions - - New relic actions -metaDescription: "A list of available actions in the actions catalog for workflow definitions" -freshnessValidatedDate: never ---- - - - We're still working on this feature, but we'd love for you to try it out! - - This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -This page provides a comprehensive reference for New Relic actions available in the workflow automation actions catalog. These actions enable you to integrate New Relic platform capabilities into your workflow definitions, including sending custom events and logs, executing NerdGraph queries, running NRQL queries, and sending notifications. - -## Prerequisites - -Before using New Relic actions in workflow automation, ensure you have: - - * A New Relic account with appropriate permissions. - * A New Relic license key (if sending data to a different account). - * The necessary permissions for the specific New Relic services you plan to use. - -See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. - -## Data ingest actions - - - - Sends a custom events to New Relic - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**attributes**OptionalMap`"{\"page\": \"1\", \"limit\": \"10\"}"`
**events**Requiredlist`"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]`
**licenseKey**Optionalstring`"{{ .secrets.secretName }}"`
**selectors**Optionallist`[{\"name\": \"success\", \"expression\": \".success\"}]`
- - - - **attributes**: Common attributes which are part of all the events when provided. Merging for each event item when needed event item overrides common definition. - - **events**: The list of event data. Note that events requires the use of an `eventType` field that represents the custom event type and the maximum events allowed per request is 100. - - **licenseKey**: The New Relic Account License Key that specifies the target account where events are sent. If this value is not provided, a default license key is assumed based on the account executing the workflow. - - **selectors**: The selectors to get only the specified parameters as output. - -
- - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**success**Boolean`true`
**errorMessage**string`"Error message if operation failed"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: heartbeat_newrelicIngestSendEvents - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendEvents - version: 1 - inputs: - attributes: - colour: red - id: 1234 - events: - - eventType: HeartBeat - test: "OK" - attributes: - foo: bar - - eventType: HeartBeat1234 - test: "OK1234" - attributes: - foo: bar - - eventType: HeartBeat12345 - test: "OK12345" - attributes: - foo: bar - colour: yellow - - eventType: HeartBeat12345678 - test: "OK12345678" - selectors: - - name: success - expression: ".success" - ``` - - **Expected output:** - ```yaml - { - "success": true - } - ``` - - **Retrieve events:** - - After successfully executing a workflow, you can retrieve the associated event by running a query under the account that executed the workflow: - ```sql - SELECT * FROM HeartBeat - ``` -
-
-
-
-
-
- - - - -Send logs to New Relic - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**attributes**Optionalmap`"{\"page\": \"1\", \"limit\": \"10\"}"`
**logs**Requiredlist`"[{\"message\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"message\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"`
**licenseKey**Optionalstring`"{{ .secrets.secretName }}"`
**selectors**Optionallist`[{\"name\": \"success\", \"expression\": \".success\"}]`
- - - - **attributes**: Common attributes included in all logs when provided. If a log item specifies the same attribute, it overrides the common definition. - - **logs**: The list of log data. Note that the maximum logs allowed per request is 100. - - **licenseKey**: The New Relic Account License Key that specifies the target account where logs are sent. If not provided, a default license key is assumed based on the account executing the workflow. See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for more information. - - **selectors**: The selectors to get only the specified parameters as output. - -
- - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**success**Boolean`true`
**errorMessage**string`"Error message if operation failed"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: heartbeat_newrelicIngestSendLogs - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - attributes: - colour: red - id: 1234 - logs: - - message: 'Heartbeat sendLogs Action Test Message' - attributes: - foo: bar - - message: 'HeartBeat1234' - attributes: - foo: bar - - message: 'HeartBeat12345' - attributes: - foo: bar - colour: yellow - - message: 'HeartBeat12345678' - selectors: - - name: success - expression: ".success" - ``` - - **Expected output:** - ```yaml - { - "success": true - } - ``` - - **Retrieve logs:** - - After successfully executing a workflow, you can retrieve the associated log by running a query under the account that executed the workflow: - ```sql - SELECT * FROM Log - ``` -
-
-
-
-
-
- -## NerdGraph actions - - - - -Executes a Graphql command against newrelic NerdGraph API. The command can either be a query or a mutation. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputOptionalityTypeDescriptionExample
**graphql**RequiredstringA GraphQL syntax. You should use GraphiQL to build and test your command
**variables**Requiredmap[string]anyAny key/value pair variables to use with the GraphQL statement.
**selectors**OptionalListThe selectors to get the only specified parameters as output. - ```yaml - steps: - - name: findingVar - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - query GetEntity($entityGuid: EntityGuid!) { - actor { - entity(guid: $entityGuid) { - alertSeverity - } - } - } - variables: - entityGuid: ${{ .workflowInputs.entityGuid }} - - name: findingInline - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - { - actor { - entity(guid: "${{ .workflowInputs.entityGuid }}") { - alertSeverity - } - } - } - selectors: - - name: entities - expression: '.data' - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
OutputTypeDescription
**data**map[string]anyContents of the `data` property of a NerdGraph response.
**success**BooleanStatus of the request.s
**errorMessage**StringFailure reason as message.
-
- - - - - - - - - - - - - -
Example
- ```yaml - steps: - - name: currentUserId - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - query userId { - currentUser { - id - } - } - - name: sayHello - type: action - action: example.messaging.sayHello - version: 1 - inputs: - name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} - ``` -
-
-
-
-
-
- -## Query actions - - - - -Executes a cross-accounts NRQL query through the NerdGraph API. - - - - - Inputs - - - - Outputs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputOptionalityTypeDescriptionExample
**query**RequiredstringThe NRQL query statement.
**accountIds**Optionallist of intThe **New Relic Account ID** input is a list of target IDs that allows you to specify the target accounts where the query is executed against. If this value is not provided as an input, the query will automatically be executed against the account associated with the workflow's execution account.
**selectors**OptionallistThe selectors to get the only specified parameters as output. - ```json - steps: - - name: queryForLog - type: action - action: newrelic.nrdb.query - version: 1 - inputs: - accountIds: [12345] - query: FROM Log SELECT * WHERE message LIKE 'DEMO%' - selectors: - - name: resultsAsString - expression: '.results | tostring' - ``` -
-
- - - - - - - - - - - - - - - - - -
OutputTypeExample
**results**: An array of objects containing the results of the query. - ```yaml - { - results=[ - { message=[INFO] - Workflow: test has ended, messageId=39af98 }, - { message=[INFO] - Workflow: test - Step query has started, messageId=649c612 }, - ... - ] - } - ``` -
-
-
-
-
-
- -## Notifications actions - - - - - Sends a message to a channel, integrated with destinations for example slack - - - - - Inputs - - - - Outputs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputOptionalityTypeDescriptionExample
**type**RequiredstringType of newrelic destination`slack`
**destinationId**RequiredStringDestinationId associated with the newrelic destination.`123e4567-e89b-12d3-a456-426614174000`
**parameters**RequiredmapFields required to send notification to chosen destination type.`{\"channel\": \"${{ YOUR_CHANNEL }}\", \"text\": \"Enter your text here\"}`
**selectors**OptionallistThe selectors to get the only specified parameters as output.`[{\"name\": \"success\", \"expression\": \".success\"}]`
-
- - - - - - - - - - - - - - - - - -
OutputTypeExample
successboolean`true/false`
-
-
-
-
-
- - - - - Sends a message to a MS team channel, integrated with destinations. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityDatatypeDescriptionExample
**destinationId**RequiredString - DestinationId associated with the newrelic destination. -

- Refer [New Relic integration for Microsoft Teams](/docs/alerts/get-notified/microsoft-teams-integrations/) for steps on how to configure a new destination and listing destination Id. -

-

- Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations. -

- - - - ```sh - { - actor { - account(id: 12345678) { - aiNotifications { - destinations(filters: {type: MICROSOFT_TEAMS, active: true}) { - entities { - createdAt - id - name - active - } - } - } - } - } - } - ``` - - - -
`123e4567-e89b-12d3-a456-426614174000`
**teamName**RequiredStringTeam name associated with given destination id`TEST_TEAM`
**channelName**RequiredStringChannel name where message need to be sent`StagingTesting`
**message**RequiredStringText message which need to be sent`Hello! this message from Workflow`
**selectors**OptionalListThe selectors to get the only specified parameters as output.`[{\"name\": \"success\", \"expression\": \".success\"}]`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**success**Boolean`true/false`
**sessionId**String`"sessionId": "7fa97f26-3791-492e-a39b-53793163dfb9"`
**errorMessage**String`Message is a required field in the notification send"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: msTeam_notification_workflow - description: This is a test workflow to test MSTeam notification send action - steps: - - name: SendMessageUsingMSTeam - type: action - action: newrelic.notification.sendMicrosoftTeams - version: 1 - inputs: - destinationId: acc24dc2-d4fc-4eba-a7b4-b3ad0170f8aa - channel: DEV_TESTING - teamName: TEST_TEAM_DEV - message: Hello from Workflow - ``` -
-
-
-
-
-
- - - - - Sends a email to NewRelic email destinations with or without attachments - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityDatatypeDescriptionExample
**destinationId**RequiredString - DestinationId associated with the newrelic destination. -

- Refer [New Relic integration for Microsoft Teams](/docs/alerts/get-notified/microsoft-teams-integrations/) for steps on how to configure a new destination and listing destination Id. -

-

- Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations. -

- - - - ```yaml - { - actor { - account(id: 12345678) { - aiNotifications { - destinations(filters: {type: EMAIL, active: true}) { - entities { - createdAt - id - name - active - } - } - } - } - } - } - ``` - - -
`123e4567-e89b-12d3-a456-426614174000`
**subject**RequiredStringSubject of email`workflow-notification`
**message**RequiredStringMessage which need to be send in email`Hello! from Workflow Automation`
**attachments**OptionalListA list of optional attachment
**attachment.type**RequiredEnumOne of: `QUERY`, `RAW`
**attachment.query**OptionalStringFor `QUERY` type, this is NRQL query statement.`SELECT * FROM LOG`
**attachment.accountIds**OptionalListFor `QUERY`, the **New Relic Account IDs** to execute the query. If not provided, the account associated with the workflow's execution is used.`[12345567]`
**attachment.format**OptionalEnumFor `QUERY`, specify the type for the results, default `JSON``JSON CSV`
**attachment.content**OptionalStringFor `RAW`, this is the content to for the attachment in UTF-8.`A,B,C\n1,2,3`
**attachment.filename**OptionalStringA filename for the attachment`log_count.csv`
**selectors**OptionalListThe selectors to get the only specified parameters as output.`[{\"name\": \"success\", \"expression\": \".success\"},{\"name\": \"attachments\", \"expression\": \".response.attachments\"},{\"name\": \"sessionId\", \"expression\": \".response.sessionId\"}]`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**success**Boolean`true/false`
**sessionId**String`"sessionId": "7fa97f26-3791-492e-a39b-53793163dfb9"`
**errorMessage**String`Channel is a required field in the notification send"`
**attachments**List - ```yaml - [{ - "blobId": "43werdtfgvhiu7y8t6r5e4398yutfgvh", - "rowCount": 100 - }] - ``` -
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: email_testing_with_attachment - description: Workflow to test sending an email notification via NewRelic with log step - workflowInputs: - destinationId: - type: String - steps: - - name: sendEmailNotification - type: action - action: newrelic.notification.sendEmail - version: '1' - inputs: - destinationId: ${{ .workflowInputs.destinationId }} - subject: "workflow notification" - message: "Workflow Email Notification Testing from local" - attachments: - - type: QUERY - query: "SELECT * FROM Log" - format: JSON - filename: "log_count.json" - selectors: - - name: success - expression: '.success' - - name: sessionId - expression: '.response.sessionId' - - name: attachments - expression: '.response.attachments' - - name: logOutput - type: action - action: newrelic.ingest.sendLogs - version: '1' - inputs: - logs: - - message: "Hello from cap check Testing staging server user2 : ${{ .steps.sendEmailNotification.outputs.result.attachments }}" - licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }} - ``` -
-
-
-
-
-
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest.mdx new file mode 100644 index 00000000000..673f0b796ba --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest.mdx @@ -0,0 +1,356 @@ +--- +title: "New Relic Ingest actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - New Relic actions + - New Relic Ingest actions +metaDescription: "A list of available new relic ingest actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for new relic ingest actions available in the workflow automation actions catalog. These actions enable you to send events and logs to new relic. + +## Prerequisites + +Before using New Relic actions in workflow automation, ensure you have: + + * A New Relic account with appropriate permissions. + * A New Relic license key (if sending data to a different account). + * The necessary permissions for the specific New Relic services you plan to use. + +See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. + + + +## Data ingest actions + + + + Sends a custom events to New Relic + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**attributes**OptionalMap`"{\"page\": \"1\", \"limit\": \"10\"}"`
**events**Requiredlist`"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]`
**licenseKey**Optionalstring`"{{ .secrets.secretName }}"`
**selectors**Optionallist`[{\"name\": \"success\", \"expression\": \".success\"}]`
+ + + - **attributes**: Common attributes which are part of all the events when provided. Merging for each event item when needed event item overrides common definition. + - **events**: The list of event data. Note that events requires the use of an `eventType` field that represents the custom event type and the maximum events allowed per request is 100. + - **licenseKey**: The New Relic Account License Key that specifies the target account where events are sent. If this value is not provided, a default license key is assumed based on the account executing the workflow. + - **selectors**: The selectors to get only the specified parameters as output. + +
+ + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**success**Boolean`true`
**errorMessage**string`"Error message if operation failed"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: heartbeat_newrelicIngestSendEvents + + workflowInputs: + cellName: + type: String + + steps: + - name: runAction + type: action + action: newrelic.ingest.sendEvents + version: 1 + inputs: + attributes: + colour: red + id: 1234 + events: + - eventType: HeartBeat + test: "OK" + attributes: + foo: bar + - eventType: HeartBeat1234 + test: "OK1234" + attributes: + foo: bar + - eventType: HeartBeat12345 + test: "OK12345" + attributes: + foo: bar + colour: yellow + - eventType: HeartBeat12345678 + test: "OK12345678" + selectors: + - name: success + expression: ".success" + ``` + + **Expected output:** + ```yaml + { + "success": true + } + ``` + + **Retrieve events:** + + After successfully executing a workflow, you can retrieve the associated event by running a query under the account that executed the workflow: + ```sql + SELECT * FROM HeartBeat + ``` +
+
+
+
+
+
+ + + + +Send logs to New Relic + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**attributes**Optionalmap`"{\"page\": \"1\", \"limit\": \"10\"}"`
**logs**Requiredlist`"[{\"message\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"message\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"`
**licenseKey**Optionalstring`"{{ .secrets.secretName }}"`
**selectors**Optionallist`[{\"name\": \"success\", \"expression\": \".success\"}]`
+ + + - **attributes**: Common attributes included in all logs when provided. If a log item specifies the same attribute, it overrides the common definition. + - **logs**: The list of log data. Note that the maximum logs allowed per request is 100. + - **licenseKey**: The New Relic Account License Key that specifies the target account where logs are sent. If not provided, a default license key is assumed based on the account executing the workflow. See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for more information. + - **selectors**: The selectors to get only the specified parameters as output. + +
+ + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**success**Boolean`true`
**errorMessage**string`"Error message if operation failed"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: heartbeat_newrelicIngestSendLogs + + workflowInputs: + cellName: + type: String + + steps: + - name: runAction + type: action + action: newrelic.ingest.sendLogs + version: 1 + inputs: + attributes: + colour: red + id: 1234 + logs: + - message: 'Heartbeat sendLogs Action Test Message' + attributes: + foo: bar + - message: 'HeartBeat1234' + attributes: + foo: bar + - message: 'HeartBeat12345' + attributes: + foo: bar + colour: yellow + - message: 'HeartBeat12345678' + selectors: + - name: success + expression: ".success" + ``` + + **Expected output:** + ```yaml + { + "success": true + } + ``` + + **Retrieve logs:** + + After successfully executing a workflow, you can retrieve the associated log by running a query under the account that executed the workflow: + ```sql + SELECT * FROM Log + ``` +
+
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph.mdx new file mode 100644 index 00000000000..692f42eda68 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph.mdx @@ -0,0 +1,198 @@ +--- +title: "New Relic NerdGraph actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - New Relic actions + - New Relic NerdGraph actions +metaDescription: "A list of available new relic nerdgraph actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for new relic nerdgraph actions available in the workflow automation actions catalog. These actions enable you to execute nerdgraph queries and mutations. + +## Prerequisites + +Before using New Relic actions in workflow automation, ensure you have: + + * A New Relic account with appropriate permissions. + * A New Relic license key (if sending data to a different account). + * The necessary permissions for the specific New Relic services you plan to use. + +See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. + + + +## NerdGraph actions + + + + +Executes a Graphql command against newrelic NerdGraph API. The command can either be a query or a mutation. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InputOptionalityTypeDescriptionExample
**graphql**RequiredstringA GraphQL syntax. You should use GraphiQL to build and test your command
**variables**Requiredmap[string]anyAny key/value pair variables to use with the GraphQL statement.
**selectors**OptionalListThe selectors to get the only specified parameters as output. + ```yaml + steps: + - name: findingVar + type: action + action: newrelic.nerdgraph.execute + version: 1 + inputs: + graphql: | + query GetEntity($entityGuid: EntityGuid!) { + actor { + entity(guid: $entityGuid) { + alertSeverity + } + } + } + variables: + entityGuid: ${{ .workflowInputs.entityGuid }} + - name: findingInline + type: action + action: newrelic.nerdgraph.execute + version: 1 + inputs: + graphql: | + { + actor { + entity(guid: "${{ .workflowInputs.entityGuid }}") { + alertSeverity + } + } + } + selectors: + - name: entities + expression: '.data' + ``` +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
OutputTypeDescription
**data**map[string]anyContents of the `data` property of a NerdGraph response.
**success**BooleanStatus of the request.s
**errorMessage**StringFailure reason as message.
+
+ + + + + + + + + + + + + +
Example
+ ```yaml + steps: + - name: currentUserId + type: action + action: newrelic.nerdgraph.execute + version: 1 + inputs: + graphql: | + query userId { + currentUser { + id + } + } + - name: sayHello + type: action + action: example.messaging.sayHello + version: 1 + inputs: + name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} + ``` +
+
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification.mdx new file mode 100644 index 00000000000..4d91421c3b7 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification.mdx @@ -0,0 +1,537 @@ +--- +title: "New Relic Notification actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - New Relic actions + - New Relic Notification actions +metaDescription: "A list of available new relic notification actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for new relic notification actions available in the workflow automation actions catalog. These actions enable you to send notifications through new relic. + +## Prerequisites + +Before using New Relic actions in workflow automation, ensure you have: + + * A New Relic account with appropriate permissions. + * A New Relic license key (if sending data to a different account). + * The necessary permissions for the specific New Relic services you plan to use. + +See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. + + + +## Notifications actions + + + + + Sends a message to a channel, integrated with destinations for example slack + + + + + Inputs + + + + Outputs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InputOptionalityTypeDescriptionExample
**type**RequiredstringType of newrelic destination`slack`
**destinationId**RequiredStringDestinationId associated with the newrelic destination.`123e4567-e89b-12d3-a456-426614174000`
**parameters**RequiredmapFields required to send notification to chosen destination type.`{\"channel\": \"${{ YOUR_CHANNEL }}\", \"text\": \"Enter your text here\"}`
**selectors**OptionallistThe selectors to get the only specified parameters as output.`[{\"name\": \"success\", \"expression\": \".success\"}]`
+
+ + + + + + + + + + + + + + + + + +
OutputTypeExample
successboolean`true/false`
+
+
+
+
+
+ + + + + Sends a message to a MS team channel, integrated with destinations. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityDatatypeDescriptionExample
**destinationId**RequiredString + DestinationId associated with the newrelic destination. +

+ Refer [New Relic integration for Microsoft Teams](/docs/alerts/get-notified/microsoft-teams-integrations/) for steps on how to configure a new destination and listing destination Id. +

+

+ Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations. +

+ + + + ```sh + { + actor { + account(id: 12345678) { + aiNotifications { + destinations(filters: {type: MICROSOFT_TEAMS, active: true}) { + entities { + createdAt + id + name + active + } + } + } + } + } + } + ``` + + + +
`123e4567-e89b-12d3-a456-426614174000`
**teamName**RequiredStringTeam name associated with given destination id`TEST_TEAM`
**channelName**RequiredStringChannel name where message need to be sent`StagingTesting`
**message**RequiredStringText message which need to be sent`Hello! this message from Workflow`
**selectors**OptionalListThe selectors to get the only specified parameters as output.`[{\"name\": \"success\", \"expression\": \".success\"}]`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**success**Boolean`true/false`
**sessionId**String`"sessionId": "7fa97f26-3791-492e-a39b-53793163dfb9"`
**errorMessage**String`Message is a required field in the notification send"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: msTeam_notification_workflow + description: This is a test workflow to test MSTeam notification send action + steps: + - name: SendMessageUsingMSTeam + type: action + action: newrelic.notification.sendMicrosoftTeams + version: 1 + inputs: + destinationId: acc24dc2-d4fc-4eba-a7b4-b3ad0170f8aa + channel: DEV_TESTING + teamName: TEST_TEAM_DEV + message: Hello from Workflow + ``` +
+
+
+
+
+
+ + + + + Sends a email to NewRelic email destinations with or without attachments + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityDatatypeDescriptionExample
**destinationId**RequiredString + DestinationId associated with the newrelic destination. +

+ Refer [New Relic integration for Microsoft Teams](/docs/alerts/get-notified/microsoft-teams-integrations/) for steps on how to configure a new destination and listing destination Id. +

+

+ Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations. +

+ + + + ```yaml + { + actor { + account(id: 12345678) { + aiNotifications { + destinations(filters: {type: EMAIL, active: true}) { + entities { + createdAt + id + name + active + } + } + } + } + } + } + ``` + + +
`123e4567-e89b-12d3-a456-426614174000`
**subject**RequiredStringSubject of email`workflow-notification`
**message**RequiredStringMessage which need to be send in email`Hello! from Workflow Automation`
**attachments**OptionalListA list of optional attachment
**attachment.type**RequiredEnumOne of: `QUERY`, `RAW`
**attachment.query**OptionalStringFor `QUERY` type, this is NRQL query statement.`SELECT * FROM LOG`
**attachment.accountIds**OptionalListFor `QUERY`, the **New Relic Account IDs** to execute the query. If not provided, the account associated with the workflow's execution is used.`[12345567]`
**attachment.format**OptionalEnumFor `QUERY`, specify the type for the results, default `JSON``JSON CSV`
**attachment.content**OptionalStringFor `RAW`, this is the content to for the attachment in UTF-8.`A,B,C\n1,2,3`
**attachment.filename**OptionalStringA filename for the attachment`log_count.csv`
**selectors**OptionalListThe selectors to get the only specified parameters as output.`[{\"name\": \"success\", \"expression\": \".success\"},{\"name\": \"attachments\", \"expression\": \".response.attachments\"},{\"name\": \"sessionId\", \"expression\": \".response.sessionId\"}]`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**success**Boolean`true/false`
**sessionId**String`"sessionId": "7fa97f26-3791-492e-a39b-53793163dfb9"`
**errorMessage**String`Channel is a required field in the notification send"`
**attachments**List + ```yaml + [{ + "blobId": "43werdtfgvhiu7y8t6r5e4398yutfgvh", + "rowCount": 100 + }] + ``` +
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: email_testing_with_attachment + description: Workflow to test sending an email notification via NewRelic with log step + workflowInputs: + destinationId: + type: String + steps: + - name: sendEmailNotification + type: action + action: newrelic.notification.sendEmail + version: '1' + inputs: + destinationId: ${{ .workflowInputs.destinationId }} + subject: "workflow notification" + message: "Workflow Email Notification Testing from local" + attachments: + - type: QUERY + query: "SELECT * FROM Log" + format: JSON + filename: "log_count.json" + selectors: + - name: success + expression: '.success' + - name: sessionId + expression: '.response.sessionId' + - name: attachments + expression: '.response.attachments' + - name: logOutput + type: action + action: newrelic.ingest.sendLogs + version: '1' + inputs: + logs: + - message: "Hello from cap check Testing staging server user2 : ${{ .steps.sendEmailNotification.outputs.result.attachments }}" + licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }} + ``` +
+
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb.mdx new file mode 100644 index 00000000000..6b9601d3a03 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb.mdx @@ -0,0 +1,137 @@ +--- +title: "New Relic NRDB actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - New Relic actions + - New Relic NRDB actions +metaDescription: "A list of available new relic nrdb actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for new relic nrdb actions available in the workflow automation actions catalog. These actions enable you to query new relic database. + +## Prerequisites + +Before using New Relic actions in workflow automation, ensure you have: + + * A New Relic account with appropriate permissions. + * A New Relic license key (if sending data to a different account). + * The necessary permissions for the specific New Relic services you plan to use. + +See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. + + + +## Query actions + + + + +Executes a cross-accounts NRQL query through the NerdGraph API. + + + + + Inputs + + + + Outputs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InputOptionalityTypeDescriptionExample
**query**RequiredstringThe NRQL query statement.
**accountIds**Optionallist of intThe **New Relic Account ID** input is a list of target IDs that allows you to specify the target accounts where the query is executed against. If this value is not provided as an input, the query will automatically be executed against the account associated with the workflow's execution account.
**selectors**OptionallistThe selectors to get the only specified parameters as output. + ```json + steps: + - name: queryForLog + type: action + action: newrelic.nrdb.query + version: 1 + inputs: + accountIds: [12345] + query: FROM Log SELECT * WHERE message LIKE 'DEMO%' + selectors: + - name: resultsAsString + expression: '.results | tostring' + ``` +
+
+ + + + + + + + + + + + + + + + + +
OutputTypeExample
**results**: An array of objects containing the results of the query. + ```yaml + { + results=[ + { message=[INFO] - Workflow: test has ended, messageId=39af98 }, + { message=[INFO] - Workflow: test - Step query has started, messageId=649c612 }, + ... + ] + } + ``` +
+
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx deleted file mode 100644 index c7f948557b7..00000000000 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx +++ /dev/null @@ -1,419 +0,0 @@ ---- -title: "Utility actions" -tags: - - workflow automation - - workflow - - workflow automation actions - - utility actions -metaDescription: "A list of available utility actions in the actions catalog for workflow definitions" -freshnessValidatedDate: never ---- - -This page provides a reference for utility actions available in the workflow automation actions catalog. These actions enable you to perform common data transformation and utility operations in your workflow definitions. - -## Utility actions - - - - This action is used to transform from epoch timestamp to date/time. Possible references: - -* https://en.wikipedia.org/wiki/List_of_tz_database_time_zones -* https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS - -Refer [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more information. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputOptionalityTypeDescription
**timestamp**RequiredintAn integer representing epoch timestamp. Note that, UNIX epochs are the number of seconds after 1st Jan 1970, midnight UTC (00:00)
**timestampUnit**OptionalstringA string representing unit of provided timestamp. Acceptable values: SECONDS, MILLISECONDS(DEFAULT)
**timezoneId**OptionalstringA string representing timezone for desired date/time, default: UTC
**pattern**OptionalstringA string representing pattern for desired datetime, default: ISO-8601
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldOptionalityDatatypeDescription
**date**RequiredstringA string representation of date.
**time**RequiredstringA string representation of time.
**datetime**RequiredstringA string representation of datetime.
**timezone**RequiredmapA map representation of timezoneId and abbreviation.
-
- - - - - - - - - - - - - - - - - -
ExampleWorkflow InputOutputs
- ```yaml - name: from_epoch - - workflowInputs: - timestamp: - type: Int - timestampUnit: - type: String - timezoneId: - type: String - pattern: - type: String - - steps: - - name: epochTime - type: action - action: utils.datetime.fromEpoch - version: 1 - inputs: - timestamp: ${{ .workflowInputs.timestamp }} - timezoneId: ${{ .workflowInputs.timezoneId }} - pattern: ${{ .workflowInputs.pattern }} - timestampUnit: ${{ .workflowInputs.timestampUnit }} - ``` - - ```json - mutation { - workflowAutomationStartWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { name: "from_epoch" } - workflowInputs: [ - {key: "timestamp", value: "1738236424003"} - {key: "timestampUnit", value: "MILLISECONDS"} - {key: "pattern", value: "yyyy-mm-dd HH:SS"} - {key: "timezoneId", value: "Asia/Kolkata"} - ] - ) { - runId - } - } - ``` - - ```json - { - "date": "2025-01-30", - "time": "16:57:04.003" - "datetime": "2025-01-30 16:00", - "timezone": { - "abbreviation": "IST", - "id": "Asia/Kolkata" - } - } - ``` -
-
-
-
-
-
- - - - This action is used to transform various type of input (JSON, map) to a CSV format. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - -
InputOptionalityTypeDescription
**data**RequiredanyA string representing a data to transform into CSV, typically a JSON string or a map.
-
- - - - - - - - - - - - - - - - - - - -
FieldOptionalityDatatypeDescription
**csv**RequiredstringA CSV representation of the data received.
-
- - - - - - - - - - - - - - - - - -
ExampleWorkflow InputOutputs
- ```json - name: nrqltocsv - - steps: - - name: queryForLog - type: action - action: newrelic.nrql.query - version: 1 - inputs: - accountIds: ['${{ .workflowInputs.accountId }}'] - query: ${{ .workflowInputs.nrql }} - - - name: csv1 - type: action - action: utils.transform.toCSV - version: 1 - inputs: - data: ${{ .steps.queryForLog.outputs.results | tostring }} - ``` - - ```json - mutation { - startWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { - name: "nrqltocsv", - } - workflowInputs: [ - {key: "accountId" value: "12345678"} - {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} - ] - ) - { runId } - } - ``` -
-
-
-
-
-
- - - - Generate an RFC-compliant V4 uuid. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - -
InputOptionalityDatatypeDescription
-
- - - - - - - - - - - - - - - - - -
FieldDatatypeDescription
**uuid**string
-
- - - - - - - - - - - - - - - - - -
ExampleWorkflow InputOutputs
- name: generateUUID

- steps: - - name: generateUUID - type: action - action: utils.uuid.generate - version: 1 -
- ```json - { - "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", - } - ``` -
-
-
-
-
-
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident.mdx similarity index 97% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident.mdx index a7c9f773de2..89ae9e8851a 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident.mdx @@ -1,15 +1,22 @@ --- -title: "PagerDuty actions" +title: "PagerDuty Incident actions" tags: - workflow automation - workflow - workflow automation actions - - pagerduty actions -metaDescription: "A list of available actions in the actions catalog for workflow definitions" + - PagerDuty actions + - PagerDuty Incident actions +metaDescription: "A list of available pagerduty incident actions in the actions catalog for workflow definitions" freshnessValidatedDate: never --- -This page provides a comprehensive reference for PagerDuty actions available in the workflow automation actions catalog. These actions enable you to integrate PagerDuty incident management into your workflow definitions, including creating, updating, resolving, listing, and retrieving incidents. + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for pagerduty incident actions available in the workflow automation actions catalog. These actions enable you to pagerduty incident management. ## Prerequisites @@ -20,6 +27,8 @@ Before using PagerDuty actions in workflow automation, ensure you have: * The necessary permissions to manage incidents in your PagerDuty account. * For account tokens, you'll need to provide the `from` email address in relevant actions. + + ## Incident actions diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat.mdx similarity index 95% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat.mdx index a8a5f871cfc..e2dac2add33 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat.mdx @@ -1,13 +1,13 @@ --- -title: "Communication actions" +title: "Slack Chat actions" tags: - workflow automation - workflow - workflow automation actions + - Slack actions - communication actions - - slack actions - - ms teams actions -metaDescription: "A list of available actions in the actions catalog for workflow definitions" + - Slack Chat actions +metaDescription: "A list of available slack chat actions in the actions catalog for workflow definitions" freshnessValidatedDate: never --- @@ -17,7 +17,7 @@ freshnessValidatedDate: never This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). -This page provides a comprehensive reference for communication actions available in the workflow automation actions catalog. These actions enable you to integrate communication platforms into your workflow definitions, including sending messages to Slack channels, retrieving reactions, and more. +This page provides a comprehensive reference for slack chat actions available in the workflow automation actions catalog. These actions enable you to slack messaging operations. ## Prerequisites @@ -29,6 +29,8 @@ Before using communication actions in workflow automation, ensure you have: See [Add Slack configuration](/docs/autoflow/overview#add-the-slack-integration) for information on how to set up Slack integration. + + ## Slack actions diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime.mdx new file mode 100644 index 00000000000..9f8a97ec052 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime.mdx @@ -0,0 +1,204 @@ +--- +title: "Utilities - DateTime" +tags: + - workflow automation + - workflow + - workflow automation actions + - utility actions + - Utilities - DateTime +metaDescription: "A list of available utilities - datetime in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for utilities - datetime available in the workflow automation actions catalog. These actions enable you to date and time utilities. + +## Utility actions + + + + This action is used to transform from epoch timestamp to date/time. Possible references: + +* https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +* https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS + +Refer [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more information. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InputOptionalityTypeDescription
**timestamp**RequiredintAn integer representing epoch timestamp. Note that, UNIX epochs are the number of seconds after 1st Jan 1970, midnight UTC (00:00)
**timestampUnit**OptionalstringA string representing unit of provided timestamp. Acceptable values: SECONDS, MILLISECONDS(DEFAULT)
**timezoneId**OptionalstringA string representing timezone for desired date/time, default: UTC
**pattern**OptionalstringA string representing pattern for desired datetime, default: ISO-8601
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldOptionalityDatatypeDescription
**date**RequiredstringA string representation of date.
**time**RequiredstringA string representation of time.
**datetime**RequiredstringA string representation of datetime.
**timezone**RequiredmapA map representation of timezoneId and abbreviation.
+
+ + + + + + + + + + + + + + + + + +
ExampleWorkflow InputOutputs
+ ```yaml + name: from_epoch + + workflowInputs: + timestamp: + type: Int + timestampUnit: + type: String + timezoneId: + type: String + pattern: + type: String + + steps: + - name: epochTime + type: action + action: utils.datetime.fromEpoch + version: 1 + inputs: + timestamp: ${{ .workflowInputs.timestamp }} + timezoneId: ${{ .workflowInputs.timezoneId }} + pattern: ${{ .workflowInputs.pattern }} + timestampUnit: ${{ .workflowInputs.timestampUnit }} + ``` + + ```json + mutation { + workflowAutomationStartWorkflowRun( + scope: { type: ACCOUNT id: "12345678" } + definition: { name: "from_epoch" } + workflowInputs: [ + {key: "timestamp", value: "1738236424003"} + {key: "timestampUnit", value: "MILLISECONDS"} + {key: "pattern", value: "yyyy-mm-dd HH:SS"} + {key: "timezoneId", value: "Asia/Kolkata"} + ] + ) { + runId + } + } + ``` + + ```json + { + "date": "2025-01-30", + "time": "16:57:04.003" + "datetime": "2025-01-30 16:00", + "timezone": { + "abbreviation": "IST", + "id": "Asia/Kolkata" + } + } + ``` +
+
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform.mdx new file mode 100644 index 00000000000..edf4d8e42e0 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform.mdx @@ -0,0 +1,142 @@ +--- +title: "Utilities - Transform" +tags: + - workflow automation + - workflow + - workflow automation actions + - utility actions + - Utilities - Transform +metaDescription: "A list of available utilities - transform in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for utilities - transform available in the workflow automation actions catalog. These actions enable you to data transformation utilities. + + + + This action is used to transform various type of input (JSON, map) to a CSV format. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + +
InputOptionalityTypeDescription
**data**RequiredanyA string representing a data to transform into CSV, typically a JSON string or a map.
+
+ + + + + + + + + + + + + + + + + + + +
FieldOptionalityDatatypeDescription
**csv**RequiredstringA CSV representation of the data received.
+
+ + + + + + + + + + + + + + + + + +
ExampleWorkflow InputOutputs
+ ```json + name: nrqltocsv + + steps: + - name: queryForLog + type: action + action: newrelic.nrql.query + version: 1 + inputs: + accountIds: ['${{ .workflowInputs.accountId }}'] + query: ${{ .workflowInputs.nrql }} + + - name: csv1 + type: action + action: utils.transform.toCSV + version: 1 + inputs: + data: ${{ .steps.queryForLog.outputs.results | tostring }} + ``` + + ```json + mutation { + startWorkflowRun( + scope: { type: ACCOUNT id: "12345678" } + definition: { + name: "nrqltocsv", + } + workflowInputs: [ + {key: "accountId" value: "12345678"} + {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} + ] + ) + { runId } + } + ``` +
+
+
+
+
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid.mdx new file mode 100644 index 00000000000..642775cc6a3 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid.mdx @@ -0,0 +1,118 @@ +--- +title: "Utilities - UUID" +tags: + - workflow automation + - workflow + - workflow automation actions + - utility actions + - Utilities - UUID +metaDescription: "A list of available utilities - uuid in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for utilities - uuid available in the workflow automation actions catalog. These actions enable you to uuid generation utilities. + + + + + Generate an RFC-compliant V4 uuid. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + +
InputOptionalityDatatypeDescription
+
+ + + + + + + + + + + + + + + + + +
FieldDatatypeDescription
**uuid**string
+
+ + + + + + + + + + + + + + + + + +
ExampleWorkflow InputOutputs
+ name: generateUUID

+ steps: + - name: generateUUID + type: action + action: utils.uuid.generate + version: 1 +
+ ```json + { + "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", + } + ``` +
+
+
+
+
+
From f71ecfd1142d512176bab3f0f37ea88f911727b2 Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Thu, 20 Nov 2025 12:33:50 +0530 Subject: [PATCH 02/11] Delete extract_actions.py --- extract_actions.py | 156 --------------------------------------------- 1 file changed, 156 deletions(-) delete mode 100644 extract_actions.py diff --git a/extract_actions.py b/extract_actions.py deleted file mode 100644 index 383d17ebfd1..00000000000 --- a/extract_actions.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to extract action sections from existing files and create new organized files -""" - -import re -import os - -BASE_DIR = "src/content/docs/workflow-automation/setup-and-configuration/actions-catalog" - -# Define file extractions mapping -# Format: (source_file, line_start, line_end, dest_file, title_suffix, description) -AWS_EXTRACTIONS = [ - # EC2 - ("aws.mdx", 773, 1449, "aws-ec2.mdx", "AWS EC2 actions", "EC2 instance and snapshot management"), - # SystemsManager - ("aws.mdx", 1451, 2341, "aws-systemsmanager.mdx", "AWS Systems Manager actions", "Systems Manager automation and document operations"), - # Execute API - ("aws.mdx", 2343, 2720, "aws-execute-api.mdx", "AWS Execute API", "Execute any AWS API operation"), - # CloudWatch - ("aws.mdx", 2721, 3110, "aws-cloudwatch.mdx", "AWS CloudWatch actions", "CloudWatch Logs operations"), - # S3 - ("aws.mdx", 3111, 4311, "aws-s3.mdx", "AWS S3 actions", "S3 bucket and object operations"), - # SNS - ("aws.mdx", 4312, 4549, "aws-sns.mdx", "AWS SNS actions", "SNS topic operations"), - # SQS - ("aws.mdx", 4550, 4914, "aws-sqs.mdx", "AWS SQS actions", "SQS queue operations"), -] - -HTTP_EXTRACTIONS = [ - ("http.mdx", 34, 180, "http-get.mdx", "HTTP GET", "HTTP GET request operations"), - ("http.mdx", 181, 337, "http-post.mdx", "HTTP POST", "HTTP POST request operations"), - ("http.mdx", 338, 505, "http-put.mdx", "HTTP PUT", "HTTP PUT request operations"), - ("http.mdx", 506, 665, "http-delete.mdx", "HTTP DELETE", "HTTP DELETE request operations"), -] - -NEWRELIC_EXTRACTIONS = [ - ("new-relic.mdx", 30, 353, "newrelic-ingest.mdx", "New Relic Ingest actions", "Send events and logs to New Relic"), - ("new-relic.mdx", 355, 520, "newrelic-nerdgraph.mdx", "New Relic NerdGraph actions", "Execute NerdGraph queries and mutations"), - ("new-relic.mdx", 522, 626, "newrelic-nrdb.mdx", "New Relic NRDB actions", "Query New Relic database"), - ("new-relic.mdx", 628, 1133, "newrelic-notification.mdx", "New Relic Notification actions", "Send notifications through New Relic"), -] - -COMMUNICATION_EXTRACTIONS = [ - ("communication.mdx", 32, 445, "slack-chat.mdx", "Slack Chat actions", "Slack messaging operations"), -] - -PAGERDUTY_EXTRACTIONS = [ - ("pagerduty.mdx", 23, 1016, "pagerduty-incident.mdx", "PagerDuty Incident actions", "PagerDuty incident management"), -] - -UTILS_EXTRACTIONS = [ - ("others.mdx", 14, 197, "utils-datetime.mdx", "Utilities - DateTime", "Date and time utilities"), - ("others.mdx", 199, 320, "utils-transform.mdx", "Utilities - Transform", "Data transformation utilities"), - ("others.mdx", 322, 420, "utils-uuid.mdx", "Utilities - UUID", "UUID generation utilities"), -] - -def read_file_lines(filepath, start_line, end_line): - """Read specific lines from a file""" - with open(filepath, 'r') as f: - lines = f.readlines() - return ''.join(lines[start_line-1:end_line]) - -def get_prerequisites(source_file): - """Extract prerequisites section from source file""" - with open(source_file, 'r') as f: - content = f.read() - match = re.search(r'## Prerequisites.*?(?=##|\Z)', content, re.DOTALL) - if match: - return match.group(0) - return "" - -def create_file(source_file, start_line, end_line, dest_file, title, description): - """Create a new action file from extracted content""" - source_path = os.path.join(BASE_DIR, source_file) - dest_path = os.path.join(BASE_DIR, dest_file) - - # Get prerequisites - prereqs = get_prerequisites(source_path) - - # Get action content - action_content = read_file_lines(source_path, start_line, end_line) - - # Create frontmatter - tags_base = [ - "workflow automation", - "workflow", - "workflow automation actions", - ] - - if "aws" in dest_file.lower(): - tags_base.extend(["AWS actions", f"{title}"]) - elif "http" in dest_file.lower(): - tags_base.extend(["HTTP actions", f"{title}"]) - elif "newrelic" in dest_file.lower(): - tags_base.extend(["New Relic actions", f"{title}"]) - elif "slack" in dest_file.lower(): - tags_base.extend(["Slack actions", "communication actions", f"{title}"]) - elif "pagerduty" in dest_file.lower(): - tags_base.extend(["PagerDuty actions", f"{title}"]) - elif "utils" in dest_file.lower(): - tags_base.extend(["utility actions", f"{title}"]) - - tags_str = "\n - ".join(tags_base) - - frontmatter = f"""--- -title: "{title}" -tags: - - {tags_str} -metaDescription: "A list of available {title.lower()} in the actions catalog for workflow definitions" -freshnessValidatedDate: never ---- - - - We're still working on this feature, but we'd love for you to try it out! - - This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -This page provides a comprehensive reference for {title.lower()} available in the workflow automation actions catalog. These actions enable you to {description.lower()}. - -""" - - # Write the file - with open(dest_path, 'w') as f: - f.write(frontmatter) - if prereqs: - f.write(prereqs + "\n\n") - f.write(action_content) - - print(f"Created: {dest_file}") - -def main(): - """Main execution""" - print("Starting extraction...") - - # Process all extractions - all_extractions = ( - AWS_EXTRACTIONS + - HTTP_EXTRACTIONS + - NEWRELIC_EXTRACTIONS + - COMMUNICATION_EXTRACTIONS + - PAGERDUTY_EXTRACTIONS + - UTILS_EXTRACTIONS - ) - - for source, start, end, dest, title, desc in all_extractions: - try: - create_file(source, start, end, dest, title, desc) - except Exception as e: - print(f"Error creating {dest}: {e}") - - print("\nExtraction complete!") - -if __name__ == "__main__": - main() From f1219d95bedda6a3bd8108cc8a7b0783110fcd5c Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Thu, 20 Nov 2025 13:49:57 +0530 Subject: [PATCH 03/11] Deleted the orphan files --- .../lambda-extension-2.3.mdx | 20 - .../browser-agent-v1.302.mdx | 39 - .../node-api-runtime-rc1.mdx | 10 - .../actions-catalog/communication.mdx | 652 --------- .../actions-catalog/http.mdx | 1043 -------------- .../actions-catalog/new-relic.mdx | 1212 ----------------- .../actions-catalog/others.mdx | 634 --------- .../lambda-extension-2.3.mdx | 20 - .../browser-agent-v1.302.mdx | 39 - .../node-api-runtime-rc1.mdx | 10 - .../actions-catalog/communication.mdx | 652 --------- .../actions-catalog/http.mdx | 1043 -------------- .../actions-catalog/new-relic.mdx | 1212 ----------------- .../actions-catalog/others.mdx | 634 --------- .../lambda-extension-2.3.mdx | 20 - .../browser-agent-v1.302.mdx | 39 - .../node-api-runtime-rc1.mdx | 10 - .../actions-catalog/communication.mdx | 652 --------- .../actions-catalog/http.mdx | 1043 -------------- .../actions-catalog/new-relic.mdx | 1210 ---------------- .../actions-catalog/others.mdx | 634 --------- .../lambda-extension-2.3.mdx | 20 - .../browser-agent-v1.302.mdx | 39 - .../node-api-runtime-rc1.mdx | 10 - .../node-browser-runtime-3.0.50.mdx | 14 - .../actions-catalog/communication.mdx | 652 --------- .../actions-catalog/http.mdx | 1043 -------------- .../actions-catalog/new-relic.mdx | 1210 ---------------- .../actions-catalog/others.mdx | 634 --------- .../lambda-extension-2.3.mdx | 20 - .../browser-agent-v1.302.mdx | 39 - .../node-api-runtime-rc1.mdx | 10 - .../actions-catalog/communication.mdx | 652 --------- .../actions-catalog/http.mdx | 1043 -------------- .../actions-catalog/new-relic.mdx | 1212 ----------------- .../actions-catalog/others.mdx | 634 --------- 36 files changed, 18060 deletions(-) delete mode 100644 src/i18n/content/es/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx delete mode 100644 src/i18n/content/es/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx delete mode 100644 src/i18n/content/es/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx delete mode 100644 src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx delete mode 100644 src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx delete mode 100644 src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx delete mode 100644 src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx delete mode 100644 src/i18n/content/fr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx delete mode 100644 src/i18n/content/fr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx delete mode 100644 src/i18n/content/fr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx delete mode 100644 src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx delete mode 100644 src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx delete mode 100644 src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx delete mode 100644 src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx delete mode 100644 src/i18n/content/jp/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx delete mode 100644 src/i18n/content/jp/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx delete mode 100644 src/i18n/content/jp/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx delete mode 100644 src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx delete mode 100644 src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx delete mode 100644 src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx delete mode 100644 src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx delete mode 100644 src/i18n/content/kr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx delete mode 100644 src/i18n/content/kr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx delete mode 100644 src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx delete mode 100644 src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-browser-runtime-release-notes/node-browser-runtime-3.0.50.mdx delete mode 100644 src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx delete mode 100644 src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx delete mode 100644 src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx delete mode 100644 src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx delete mode 100644 src/i18n/content/pt/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx delete mode 100644 src/i18n/content/pt/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx delete mode 100644 src/i18n/content/pt/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx delete mode 100644 src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx delete mode 100644 src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx delete mode 100644 src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx delete mode 100644 src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx diff --git a/src/i18n/content/es/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx b/src/i18n/content/es/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx deleted file mode 100644 index a6d7fbf6c9b..00000000000 --- a/src/i18n/content/es/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -subject: Lambda-Extension -releaseDate: '2025-08-29' -version: 2.3.24 -translationType: machine ---- - -## Fijado - -* Se actualizó la versión de la biblioteca estándar de Go a `1.23.12` para resolver `CVE-2025-47907` -* Modo APM: Se resolvió el problema de la clave de licencia con SM/SSM en modo APM y se corrigió el prefijo de log. - -## Nueva característica - -* Se agregó el nivel de logs Prefix `DEBUG` y `INFO` al prefijo existente. `[NR_EXT]` -* Modo APM : Se agregó una etiqueta al modo APM. -* Modo APM: Se agregó el ARN de Lambda al host para la conexión APM. -* Modo APM: Duración de retroceso actualizada para `NEW_RELIC_HOST` -* Modo APM : Refactorizar datos de eventos de error APM -* Modo APM: Se agregó compatibilidad con Ruby. \ No newline at end of file diff --git a/src/i18n/content/es/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx b/src/i18n/content/es/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx deleted file mode 100644 index c4cd54c2da7..00000000000 --- a/src/i18n/content/es/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -subject: Browser agent -releaseDate: '2025-10-24' -version: 1.302.0 -downloadLink: 'https://www.npmjs.com/package/@newrelic/browser-agent' -features: - - Prepare agent to utilize v2 harvests for MFE registrations -bugs: - - User frustrations logic should be gated - - Improve accuracy in standalone AjaxRequest event start times -security: [] -translationType: machine ---- - -## v1.302.0 - -### Característica - -#### Preparar al agente para emplear las cosechas v2 para los registros MFE - -Actualizar el agente para que gestione las cosechas para el objetivo registrado empleando los esquemas v2 extremo recientemente definidos. Esto servirá como mecanismo para gestionar la síntesis de entidades y relaciones del lado del cliente, así como para ingerir datos específicos de MFE. Esto será compatible con los eventos Log, PageAction y JavaScriptError, pero actualmente está restringido por indicadores de características internas hasta que se anuncie una vista previa pública. - -### Corrección de errores - -#### La lógica de las frustraciones del usuario debería estar controlada. - -Trasladar la lógica de frustraciones del usuario al ámbito del navegador únicamente con la puerta FF en la instrumentación de eventos genéricos. Esto debería evitar ejecutar lógica de envoltura superflua y eventos relacionados con la frustración del usuario. - -#### Mejora la precisión en los tiempos de inicio de eventos AjaxRequest independientes. - -Corrige un problema en el agente donde los tiempos de inicio de ciertos eventos de carga AjaxRequest independientes se informaban en relación con el origen de la página en lugar de en relación con el primer evento de la carga, lo que provocaba discrepancias al visualizar en NR1. - -## Declaración de apoyo - -New Relic recomienda que actualices el agente periódicamente para garantizar que obtengas las últimas características y beneficios de rendimiento. Las versiones anteriores ya no recibirán soporte cuando lleguen [al final de su vida útil](https://docs.newrelic.com/docs/browser/browser-monitoring/getting-started/browser-agent-eol-policy/). Las fechas de lanzamiento reflejan la fecha de publicación original de la versión del agente. - -Las nuevas versiones del agente del browser se lanzan a los clientes en pequeñas etapas a lo largo de un periodo de tiempo. Debido a esto, la fecha en que el lanzamiento esté disponible en su cuenta puede no coincidir con la fecha de publicación original. Consulte este [dashboard de estado](https://newrelic.github.io/newrelic-browser-agent-release/) para obtener más información. - -De acuerdo con nuestra [política de soporte de navegadores](https://docs.newrelic.com/docs/browser/new-relic-browser/getting-started/compatibility-requirements-browser-monitoring/#browser-types), la versión 1.302.0 del agente del browser se construyó y probó con los siguientes navegadores y rangos de versiones: Chrome 131-141, Edge 131-141, Safari 17-26 y Firefox 134-144. Para dispositivos móviles, la versión 1.302.0 se compiló y probó para Android OS 16 e iOS Safari 17-26. \ No newline at end of file diff --git a/src/i18n/content/es/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx b/src/i18n/content/es/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx deleted file mode 100644 index b755288e1f5..00000000000 --- a/src/i18n/content/es/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -subject: Node API runtime -releaseDate: '2025-10-30' -version: rc1.2 -translationType: machine ---- - -### Parches de seguridad - -* Se corrigieron vulnerabilidades (CVE-2025-56200) para el validador. \ No newline at end of file diff --git a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx b/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx deleted file mode 100644 index 89628a3908b..00000000000 --- a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx +++ /dev/null @@ -1,652 +0,0 @@ ---- -title: acciones de comunicación -tags: - - workflow automation - - workflow - - workflow automation actions - - communication actions - - slack actions - - ms teams actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Todavía estamos trabajando en esta característica, ¡pero nos encantaría que la probaras! - - Esta característica se proporciona actualmente como parte de un programa de vista previa de conformidad con nuestras [políticas de prelanzamiento](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Esta página proporciona una referencia completa de las acciones de comunicación disponibles en el catálogo de acciones de automatización del flujo de trabajo. Estas acciones te permiten integrar la plataforma de comunicación en tus definiciones de flujo de trabajo, incluyendo el envío de mensajes a canales de Slack, la recuperación de reacciones y más. - -## Requisitos previos - -Antes de emplear acciones de comunicación en la automatización del flujo de trabajo, cerciorar de tener: - -* Un espacio de trabajo de Slack con las licencias adecuadas. -* Un token de bot de Slack configurado como secreto en la automatización del flujo de trabajo. -* Acceso a los canales de Slack donde deseas enviar mensajes. - -Consulta [la sección "Agregar configuración de Slack"](/docs/autoflow/overview#add-the-slack-integration) para obtener información sobre cómo configurar la integración de Slack. - -## Acciones de Slack - - - - Envía un mensaje a un canal de Slack, con un archivo adjunto opcional. - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Ejemplo -
- **token** - - Requerido - - secreto - - `${{ :secrets:slackToken }}` -
- **canal** - - Requerido - - cadena - - `my-slack-channel` -
- **texto** - - Requerido - - cadena - - `Hello World!` -
- **hilosTs** - - Opcional - - cadena - - `.` -
- **adjunto** - - Opcional - - mapa - -
- **archivo adjunto** - - Requerido - - cadena - - `file.txt` -
- **contenido del archivo adjunto** - - Requerido - - cadena - - `Hello\nWorld!` -
- - - * **token**: El token del bot de Slack que se va a emplear. Esto debe pasar como una sintaxis secreta. Consulte [la sección "Agregar configuración de Slack"](/docs/autoflow/overview#add-the-slack-integration) para obtener instrucciones sobre cómo configurar un token. - * **channel**: El nombre del canal, o un ID de canal, al que se enviará el mensaje. Consulta [la API de Slack](https://api.slack.com/methods/chat.postMessage#arg_channel/) para obtener más información. - * **text**: El mensaje que se publicará en Slack en el `channel` especificado. - * **threadTs**: marca de tiempo perteneciente al mensaje principal, empleada para crear una respuesta de mensaje en un hilo. - * **attachment**: Permite anexar un archivo con un mensaje al `channel` especificado. - * **attachment.filename**: Especifique el nombre del archivo cargado en Slack. - * **attachment.content**: El contenido del archivo a subir en formato UTF-8. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Ejemplo -
- **hilosTs** - - cadena - - `.` -
- **ID de canal** - - cadena - - `` -
- - - * **threadTs**: marca de tiempo del mensaje. Puede emplear en futuras llamadas a postMessage para publicar una respuesta en un hilo. - * **channelID**: Identificador del canal donde se publica el mensaje. - -
- - - **Ejemplo 1: Publicar un mensaje en un canal de Slack** - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: SendMessage - - steps: - - name: send_slack_message - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: ${{ .workflowInputs.channel }} - text: ${{ .workflowInputs.text }} - ``` - - **Entradas esperadas:** - - ```json - { - "inputs": [ - { - "key" : "channel", - "value" : "my-channel" - }, - { - "key" : "text", - "value" : "This is my message *with bold text* and `code backticks`" - } - ] - } - ``` - - **Resultado esperado:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
- - **Ejemplo 2: Anexar un archivo** - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: SendFileMessage - - steps: - - name: postCsv - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: my-channel - text: "Please find the attached file:" - attachment: - filename: 'file.txt' - content: "Hello\nWorld!" - ``` - - **Resultado esperado:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
-
-
-
-
-
- - - - Obtén una reacción a un mensaje del canal de Slack. - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Ejemplo -
- **token** - - Requerido - - secreto - - `${{ :secrets:slackToken }}` -
- **ID de canal** - - Requerido - - cadena - - `C063JK1RHN1` -
- **se acabó el tiempo** - - Opcional - - En t - - 60 -
- **hilosTs** - - Requerido - - cadena - - `.` -
- **selectores** - - Opcional - - lista - - `[{\"name\": \"reactions\", \"expression\": \".reactions \"}]` -
- - - * **token**: El token del bot de Slack que se va a emplear. Esto debe pasar como una sintaxis secreta. Consulte [la sección "Agregar configuración de Slack"](/docs/autoflow/overview#add-the-slack-integration) para obtener instrucciones sobre cómo configurar un token. - * **channelID**: El ID del canal para obtener las reacciones a los mensajes. - * **timeout**: El tiempo en segundos que se debe esperar para obtener alguna respuesta. El valor predeterminado es 60 segundos, el máximo permitido es 600 segundos (10 minutos). - * **threadTs**: marca de tiempo perteneciente al mensaje, empleada para obtener la reacción a ese mensaje. - * **selectors**: Los selectores para obtener como salida el único parámetro especificado. - -
- - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Ejemplo -
- **reacciones** - - lista - - `` -
- - - * **reactions**: Lista de elementos con todas las reacciones capturadas o una lista vacía si se produjo un tiempo de espera agotado. - -
- - - **Ejemplo 1: Slack obtiene reacciones** - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: GetReactions - - steps: - - name: getReactions - type: action - action: slack.chat.getReactions - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channelID: ${{ .steps.promptUser.outputs.channelID }} - threadTs: ${{ .steps.promptUser.outputs.threadTs }} - timeout: ${{ .workflowInputs.timeout }} - selectors: ${{ .workflowInputs.selectors }} - ``` - - **Entradas esperadas:** - - ```json - { - "inputs": [ - { - "key" : "channelID", - "value" : "C063JK1RHN1" - }, - { - "key" : "threadTs", - "value" : "1718897637.400609" - }, - { - "key" : "selectors", - "value" : "[{\"name\": \"reactions\", \"expression\": \".reactions \"}]" - } - ] - } - ``` - - **Resultado esperado:** - - ```json - [ - { - "name": "grinning", - "users": [ - "W222222" - ], - "count": 1 - }, - { - "name": "question", - "users": [ - "W333333" - ], - "count": 1 - } - ] - ``` - - O si se agota el tiempo de espera: - - ```json - [] - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx b/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx deleted file mode 100644 index 0590bd77d78..00000000000 --- a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx +++ /dev/null @@ -1,1043 +0,0 @@ ---- -title: Acciones HTTP -tags: - - workflow automation - - workflow - - workflow automation actions - - HTTP actions -metaDescription: A list of available HTTP actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Todavía estamos trabajando en esta característica, ¡pero nos encantaría que la probaras! - - Esta característica se proporciona actualmente como parte de un programa de vista previa de conformidad con nuestras [políticas de prelanzamiento](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Esta página proporciona una referencia completa de las acciones HTTP disponibles en el catálogo de acciones de automatización de flujo de trabajo. Estas acciones te permiten realizar requests HTTP (GET, POST, PUT, DELETE) a API y servicios externos como parte de tus definiciones de flujo de trabajo. - -## Requisitos previos - -Antes de emplear acciones HTTP en la automatización de flujos de trabajo, cerciorar de tener: - -* Objetivo extremos de URL de API. -* Cualquier credencial de autenticación requerida (clave de API, token, etc.). -* Comprensión de los formatos de solicitud/respuesta de la API. - - - Las acciones HTTP admiten sintaxis secreta para cualquier valor de encabezado, lo que le permite pasar de forma segura datos confidenciales como la clave de API. Consulte [la sección de gestión de secretos](/docs/infrastructure/host-integrations/installation/secrets-management/) para obtener más información. - - -## Acciones HTTP - - - - Realizar una llamada HTTP GET para recuperar datos de un extremo de API. - - - Esto admite sintaxis secreta para cualquier valor de encabezado. - - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Descripción -
- **url** - - Requerido - - Cadena - - La URL de destino para la solicitud. El esquema debe estar incluido: - - `https://example.com` -
- **parámetros de URL** - - Opcional - - Mapa - - El parámetro consulta que se agregará a la URL. Toma un objeto JSON en formato de cadena. -
- **encabezados** - - Opcional - - Mapa - - Las cabeceras que se deben agregar a la solicitud. Toma un objeto JSON en formato de cadena. -
- **selectores** - - Opcional - - Lista - - Los selectores para obtener únicamente el parámetro especificado como resultado. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Descripción -
- **cuerpo de respuesta** - - Cadena - - El cuerpo de la respuesta. -
- **código de estado** - - Entero - - El código de estado HTTP de la respuesta. -
-
- - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: httpGetTest - description: 'Performs an HTTP GET request to retrieve data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - steps: - - name: query - type: action - action: http.get - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - next: end - ``` - - **Ejemplos de entradas:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}" - } - ``` - - **Ejemplos de resultados:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Realiza una llamada HTTP POST para enviar datos a un extremo de API. - - - Esto admite sintaxis secreta para cualquier valor de encabezado. - - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Descripción -
- **url** - - Requerido - - Cadena - - La URL de destino para la solicitud. El esquema debe estar incluido: - - `https://example.com` -
- **parámetros de URL** - - Opcional - - Mapa - - El parámetro consulta que se agregará a la URL. Toma un objeto JSON en formato de cadena. -
- **encabezados** - - Opcional - - Mapa - - Las cabeceras que se deben agregar a la solicitud. Toma un objeto JSON en formato de cadena. -
- **cuerpo** - - Opcional - - Cadena - - El cuerpo de la solicitud. -
- **selectores** - - Opcional - - Lista - - Los selectores para obtener únicamente el parámetro especificado como resultado. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Descripción -
- **cuerpo de respuesta** - - Cadena - - El cuerpo de la respuesta. -
- **código de estado** - - Entero - - El código de estado HTTP de la respuesta. -
-
- - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: httpPostTest - description: 'Performs an HTTP POST request to send data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - steps: - - name: query - type: action - action: http.post - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - next: end - ``` - - **Ejemplos de entradas:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}" - } - ``` - - **Ejemplos de resultados:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Realiza una solicitud HTTP PUT para actualizar datos en un extremo de API. - - - Si necesita pasar datos confidenciales a una entrada, por ejemplo un encabezado `Api-Key`, puede usar valores almacenados a través de la mutación [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) de NerdGraph. - - Ejemplo: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Descripción -
- **url** - - Requerido - - Cadena - - La URL de destino para la solicitud. La URL debe incluir el esquema (por ejemplo, https:// o http://). Ejemplo: - - `https://example.com` -
- **parámetros de URL** - - Opcional - - Mapa - - El parámetro consulta que se agregará a la URL. Toma un objeto JSON en formato de cadena. -
- **encabezados** - - Opcional - - Mapa - - Las cabeceras que se deben agregar a la solicitud. Toma un objeto JSON en formato de cadena. -
- **cuerpo** - - Opcional - - Cadena - - El cuerpo de la solicitud. -
- **selectores** - - Opcional - - Lista - - Los selectores para obtener únicamente el parámetro especificado como resultado. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Descripción -
- **cuerpo de respuesta** - - Cadena - - El cuerpo de la respuesta. -
- **código de estado** - - Entero - - El código de estado HTTP de la respuesta. -
-
- - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: httpPutTest - description: 'Performs an HTTP PUT request to update data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.put - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Ejemplos de entradas:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Ejemplos de resultados:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Realiza una solicitud HTTP DELETE para eliminar datos en un extremo de API. - - - Si necesita pasar datos confidenciales a una entrada, por ejemplo un encabezado `Api-Key`, puede usar valores almacenados a través de la mutación [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) de NerdGraph. - - Ejemplo: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Descripción -
- **url** - - Requerido - - Cadena - - La URL de destino para la solicitud. La URL debe incluir el esquema (por ejemplo, https:// o http://). Ejemplo: - - `https://example.com` -
- **parámetros de URL** - - Opcional - - Mapa - - El parámetro consulta que se agregará a la URL. Toma un objeto JSON en formato de cadena. -
- **encabezados** - - Opcional - - Mapa - - Las cabeceras que se deben agregar a la solicitud. Toma un objeto JSON en formato de cadena. -
- **selectores** - - Opcional - - Lista - - Los selectores para obtener únicamente el parámetro especificado como resultado. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Descripción -
- **cuerpo de respuesta** - - Cadena - - El cuerpo de la respuesta. -
- **código de estado** - - Entero - - El código de estado HTTP de la respuesta. -
-
- - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: httpDeleteTest - description: 'Performs an HTTP DELETE request to remove data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.delete - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Ejemplos de entradas:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Ejemplos de resultados:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx b/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx deleted file mode 100644 index 6b6bfa4c450..00000000000 --- a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx +++ /dev/null @@ -1,1212 +0,0 @@ ---- -title: Acciones de New Relic -tags: - - workflow automation - - workflow - - workflow automation actions - - New relic actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Todavía estamos trabajando en esta característica, ¡pero nos encantaría que la probaras! - - Esta característica se proporciona actualmente como parte de un programa de vista previa de conformidad con nuestras [políticas de prelanzamiento](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Esta página proporciona una referencia completa de las acciones de New Relic disponibles en el catálogo de acciones de automatización de flujo de trabajo. Estas acciones te permiten integrar las capacidades de la plataforma New Relic en tus definiciones de flujo de trabajo, incluyendo el envío de eventos personalizados y logs, la ejecución de consultas NerdGraph, la ejecución de consultas NRQL y el envío de notificaciones. - -## Requisitos previos - -Antes de emplear las acciones New Relic en la automatización del flujo de trabajo, cerciorar de tener lo siguiente: - -* Una cuenta de New Relic con las licencias adecuadas. -* Una clave de licencia de New Relic (si se envían datos a una cuenta diferente). -* Las licencias necesarias para los servicios específicos de New Relic que planea emplear. - -Consulte [la clave de licencia](/docs/apis/intro-apis/new-relic-api-keys/#license-key) para obtener información sobre cómo crear y gestionar su clave de licencia de cuenta de New Relic. - -## Acciones disponibles de New Relic - -Referencia rápida de todas las acciones de New Relic por categoría: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Categoría - - Acción - - Objetivo -
- **Ingesta de datos** - - [Enviar evento personalizado](#newrelicingestsendevents) - - Enviar evento personalizado a New Relic. -
- **Ingesta de datos** - - [Enviar logs](#newrelicingestsendlogs) - - Enviar datos de log a New Relic. -
- **NerdGraph** - - [Ejecutar consulta o mutación GraphQL](#newrelicnerdgraphexecute) - - Ejecutar comandos GraphQL contra la API de NerdGraph. -
- **Consultar** - - [Ejecutar consulta NRDB](#newrelicnrdbquery) - - Ejecutar consulta NRQL entre cuentas. -
- **Notificación** - - [Enviar notificación](#newrelicnotificationsend) - - Enviar notificaciones a destinos New Relic. -
- -## acciones de ingesta de datos - - - - Envía un evento personalizado a New Relic - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Ejemplo -
- **Atributo** - - Opcional - - mapa - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **evento** - - Requerido - - lista - - `"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]` -
- **clave de licencia** - - Opcional - - cadena - - `"{{ .secrets.secretName }}"` -
- **selectores** - - Opcional - - lista - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: Atributo común que forma parte de todos los eventos cuando se proporciona. Se realiza la fusión para cada elemento del evento cuando sea necesario; el elemento del evento anula la definición común. - * **events**: La lista de datos del evento. Tenga en cuenta que el evento requiere el uso de un campo `eventType` que representa el tipo de evento personalizado y el máximo de eventos permitidos por solicitud es 100. - * **licenseKey**: La clave de licencia de New Relic Account que especifica la cuenta objetivo donde se envían los eventos. Si no se proporciona este valor, se asume una clave de licencia predeterminada basada en la cuenta que ejecuta el flujo de trabajo. - * **selectors**: Los selectores para obtener únicamente el parámetro especificado como salida. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Ejemplo -
- **éxito** - - Booleano - - `true` -
- **mensaje de error** - - cadena - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: heartbeat_newrelicIngestSendEvents - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendEvents - version: 1 - inputs: - attributes: - colour: red - id: 1234 - events: - - eventType: HeartBeat - test: "OK" - attributes: - foo: bar - - eventType: HeartBeat1234 - test: "OK1234" - attributes: - foo: bar - - eventType: HeartBeat12345 - test: "OK12345" - attributes: - foo: bar - colour: yellow - - eventType: HeartBeat12345678 - test: "OK12345678" - selectors: - - name: success - expression: ".success" - ``` - - **Resultado esperado:** - - ```yaml - { - "success": true - } - ``` - - **Recuperar evento:** - - Tras ejecutar correctamente un flujo de trabajo, puede recuperar el evento asociado ejecutando una consulta en la cuenta que ejecutó el flujo de trabajo: - - ```sql - SELECT * FROM HeartBeat - ``` -
-
-
-
-
-
- - - - Enviar log a New Relic - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidad - - Tipo - - Ejemplo -
- **Atributo** - - Opcional - - mapa - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **logs** - - Requerido - - lista - - `"[{\"message\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"message\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"` -
- **clave de licencia** - - Opcional - - cadena - - `"{{ .secrets.secretName }}"` -
- **selectores** - - Opcional - - lista - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: Atributo común incluido en todos los logs cuando se proporciona. Si un elemento de log especifica el mismo atributo, anula la definición común. - * **logs**: La lista de datos de log. Tenga en cuenta que el número máximo de logs permitidos por solicitud es 100. - * **licenseKey**: La clave de licencia de New Relic Account que especifica la cuenta objetivo a la que se envían los logs. Si no se proporciona, se asume una clave de licencia predeterminada basada en la cuenta que ejecuta el flujo de trabajo. Consulte [la clave de licencia](/docs/apis/intro-apis/new-relic-api-keys/#license-key) para obtener más información. - * **selectors**: Los selectores para obtener únicamente el parámetro especificado como salida. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de salida - - Tipo - - Ejemplo -
- **éxito** - - Booleano - - `true` -
- **mensaje de error** - - cadena - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- Ejemplo de flujo de trabajo -
- ```yaml - name: heartbeat_newrelicIngestSendLogs - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - attributes: - colour: red - id: 1234 - logs: - - message: 'Heartbeat sendLogs Action Test Message' - attributes: - foo: bar - - message: 'HeartBeat1234' - attributes: - foo: bar - - message: 'HeartBeat12345' - attributes: - foo: bar - colour: yellow - - message: 'HeartBeat12345678' - selectors: - - name: success - expression: ".success" - ``` - - **Resultado esperado:** - - ```yaml - { - "success": true - } - ``` - - **Recuperar logs:** - - Tras ejecutar correctamente un flujo de trabajo, puede recuperar el log asociado ejecutando una consulta en la cuenta que ejecutó el flujo de trabajo: - - ```sql - SELECT * FROM Log - ``` -
-
-
-
-
-
- -## Acciones de NerdGraph - - - - Ejecuta un comando Graphql contra la API NerdGraph de New Relic. El comando puede ser una consulta o una mutación. - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Aporte - - Opcionalidad - - Tipo - - Descripción - - Ejemplo -
- **Graphql** - - Requerido - - cadena - - Sintaxis GraphQL. Deberías usar GraphiQL para construir y probar tu comando. - -
- **variables** - - Requerido - - map[string]any - - Variables de pares principales de valor para usar con la declaración GraphQL. - -
- **selectores** - - Opcional - - lista - - Los selectores para obtener como resultado el único parámetro especificado. - - ```yaml - { - "data": { - "actor": { - "user": { - "name": "" - } - } - } - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Producción - - Tipo - - Ejemplo -
- **datos** - - map[string]any: Contenido de la propiedad - - `data` - - de una respuesta de NerdGraph. - - ```yaml - steps: - - name: currentUserId - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - query userId { - currentUser { - id - } - } - - name: sayHello - type: action - action: example.messaging.sayHello - version: 1 - inputs: - name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Ejemplo - - Producción - - Recuperar evento -
- ```json - name: testLog - - steps: - - name: logStep - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - logs: - - message: 'Hello World' - ``` - - ```yaml - { - "success": true - } - ``` - - Puede recuperar el evento asociado ejecutando una consulta en la cuenta que ejecutó el flujo de trabajo. - - ```yaml - SELECT message FROM Log WHERE allColumnSearch('Hello World', insensitive: true) SINCE 30 minutes ago - ``` -
-
-
-
-
-
- -## Acciones de consulta - - - - Ejecuta una consulta NRQL entre cuentas a través de la API de NerdGraph. - - - - - Entradas - - - - Salidas - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Aporte - - Opcionalidad - - Tipo - - Descripción - - Ejemplo -
- **consulta** - - Requerido - - cadena - - La instrucción de consulta NRQL. - -
- **ID de cuenta** - - Opcional - - lista de int - - El campo - - **New Relic Account ID** - - es una lista de ID de objetivo que le permite especificar las cuentas objetivo contra las que se ejecuta la consulta. Si no se proporciona este valor como entrada, la consulta se ejecutará automáticamente en la cuenta asociada con la cuenta de ejecución del flujo de trabajo. - -
- **selectores** - - Opcional - - lista - - Los selectores para obtener como resultado el único parámetro especificado. - - ```json - steps: - - name: queryForLog - type: action - action: newrelic.nrdb.query - version: 1 - inputs: - accountIds: [12345] - query: FROM Log SELECT * WHERE message LIKE 'DEMO%' - selectors: - - name: resultsAsString - expression: '.results | tostring' - ``` -
-
- - - - - - - - - - - - - - - - - - - - -
- Producción - - Tipo - - Ejemplo -
- **results** - - : Una matriz de objetos que contiene los resultados de la consulta. - - - - ```yaml - { - results=[ - { message=[INFO] - Workflow: test has ended, messageId=39af98 }, - { message=[INFO] - Workflow: test - Step query has started, messageId=649c612 }, - ... - ] - } - ``` -
-
-
-
-
-
- -## acciones de notificación - - - - Envía un mensaje a un canal, integrado con destinos como por ejemplo Slack. - - - - - Entradas - - - - Salidas - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Aporte - - Opcionalidad - - Tipo - - Descripción - - Ejemplo -
- **tipo** - - Requerido - - cadena - - Tipo de destino de New Relic - - `slack` -
- **ID de destino** - - Requerido - - Cadena - - DestinationId asociado con el destino de New Relic. - - `123e4567-e89b-12d3-a456-426614174000` -
- **parámetro** - - Requerido - - mapa - - Campos obligatorios para enviar notificaciones al tipo de destino seleccionado. - - `{\"channel\": \"${{ YOUR_CHANNEL }}\", \"text\": \"Enter your text here\"}` -
- **selectores** - - Opcional - - lista - - Los selectores para obtener como resultado el único parámetro especificado. - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Producción - - Tipo - - Ejemplo -
- éxito - - booleano - - `true/false` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx b/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx deleted file mode 100644 index b8378fa33d5..00000000000 --- a/src/i18n/content/es/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx +++ /dev/null @@ -1,634 +0,0 @@ ---- -title: acciones de utilidad -tags: - - workflow automation - - workflow - - workflow automation actions - - utility actions -metaDescription: A list of available utility actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - -Esta página proporciona una referencia para las acciones de utilidad disponibles en el catálogo de acciones de automatización de flujo de trabajo. Estas acciones le permiten realizar operaciones comunes de transformación de datos y utilidades en las definiciones de su flujo de trabajo. - -## acciones de utilidad - - - - Esta acción se emplea para transformar timestamp Unix a fecha/hora. Posibles referencias: - - * [https://en.wikipedia.org/wiki/list\_of\_tz\_database\_time\_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - * [https://docs.oracle.com/javase/8/docs/api/java/time/zoneid.html#SHORT\_IDS](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS) - - Consulte [FromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) para obtener más información. - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Aporte - - Opcionalidad - - Tipo - - Descripción -
- **timestamp** - - Requerido - - En t - - Un número entero que representa timestamp de la época. Tenga en cuenta que las épocas UNIX son el número de segundos transcurridos desde el 1 de enero de 1970, medianoche UTC (00:00). -
- **marca de tiempoUnidad** - - Opcional - - cadena - - Una cadena que representa la unidad de timestamp proporcionada. Valores aceptables: SEGUNDOS, MILISEGUNDOS (PREDETERMINADO) -
- **ID de zona horaria** - - Opcional - - cadena - - Cadena de texto que representa la zona horaria para la fecha y hora deseadas; por defecto: UTC -
- **patrón** - - Opcional - - cadena - - Cadena que representa el patrón para la fecha y hora deseadas; por defecto: ISO-8601 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo - - Opcionalidad - - Tipo de datos - - Descripción -
- **fecha** - - Requerido - - cadena - - Una representación en cadena de texto de una fecha. -
- **tiempo** - - Requerido - - cadena - - Una representación en cadena del tiempo. -
- **fecha y hora** - - Requerido - - cadena - - Una representación en cadena de texto de una fecha y hora. -
- **zona horaria** - - Requerido - - mapa - - Representación cartográfica del ID de zona horaria y su abreviatura. -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Ejemplo - - Entrada del flujo de trabajo - - Salidas -
- ```yaml - name: from_epoch - - workflowInputs: - timestamp: - type: Int - timestampUnit: - type: String - timezoneId: - type: String - pattern: - type: String - - steps: - - name: epochTime - type: action - action: utils.datetime.fromEpoch - version: 1 - inputs: - timestamp: ${{ .workflowInputs.timestamp }} - timezoneId: ${{ .workflowInputs.timezoneId }} - pattern: ${{ .workflowInputs.pattern }} - timestampUnit: ${{ .workflowInputs.timestampUnit }} - ``` - - ```json - mutation { - workflowAutomationStartWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { name: "from_epoch" } - workflowInputs: [ - {key: "timestamp", value: "1738236424003"} - {key: "timestampUnit", value: "MILLISECONDS"} - {key: "pattern", value: "yyyy-mm-dd HH:SS"} - {key: "timezoneId", value: "Asia/Kolkata"} - ] - ) { - runId - } - } - ``` - - ```json - { - "date": "2025-01-30", - "time": "16:57:04.003" - "datetime": "2025-01-30 16:00", - "timezone": { - "abbreviation": "IST", - "id": "Asia/Kolkata" - } - } - ``` -
-
-
-
-
-
- - - - Esta acción se emplea para transformar varios tipos de entrada (JSON, mapa) a formato CSV. - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Aporte - - Opcionalidad - - Tipo - - Descripción -
- **datos** - - Requerido - - cualquier - - Una cadena que representa datos para transformar a CSV, normalmente una cadena JSON o un mapa. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo - - Opcionalidad - - Tipo de datos - - Descripción -
- **csv** - - Requerido - - cadena - - Una representación CSV de los datos recibidos. -
-
- - - - - - - - - - - - - - - - - - - - - -
- Ejemplo - - Entrada del flujo de trabajo - - Salidas -
- ```json - name: nrqltocsv - - steps: - - name: queryForLog - type: action - action: newrelic.nrql.query - version: 1 - inputs: - accountIds: ['${{ .workflowInputs.accountId }}'] - query: ${{ .workflowInputs.nrql }} - - - name: csv1 - type: action - action: utils.transform.toCSV - version: 1 - inputs: - data: ${{ .steps.queryForLog.outputs.results | tostring }} - ``` - - ```json - mutation { - startWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { - name: "nrqltocsv", - } - workflowInputs: [ - {key: "accountId" value: "12345678"} - {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} - ] - ) - { runId } - } - ``` - -
-
-
-
-
-
- - - - Generar un UUID V4 compatible con RFC. - - - - - Entradas - - - - Salidas - - - - Ejemplo - - - - - - - - - - - - - - - - - - - - - - -
- Aporte - - Opcionalidad - - Tipo de datos - - Descripción -
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - -
- Campo - - Tipo de datos - - Descripción -
- **uuid** - - cadena - -
-
- - - - - - - - - - - - - - - - - - - - -
- Ejemplo - - Entrada del flujo de trabajo - - Salidas -
- - - nombre: generarUUID
pasos: - - * nombre: generarUUID tipo: acción acción: utils.uuid.generate versión: 1 -
- ```json - { - "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/fr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx b/src/i18n/content/fr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx deleted file mode 100644 index 221289aaa55..00000000000 --- a/src/i18n/content/fr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -subject: Lambda-Extension -releaseDate: '2025-08-29' -version: 2.3.24 -translationType: machine ---- - -## Fixé - -* Mise à jour de la version de la bibliothèque standard Go à `1.23.12` pour résoudre le problème `CVE-2025-47907` -* Mode APM : Résolution du problème de clé de licence avec SM/SSM en mode APM et résolution du préfixe log - -## Nouvelle fonctionnalité - -* Ajout des préfixes de niveau de log `DEBUG` et `INFO` au préfixe existant `[NR_EXT]` -* Mode APM : Ajout d'une étiquette au mode APM -* Mode APM : Ajout de l’ARN Lambda à l’hôte pour la connexion APM -* Mode APM : durée de temporisation mise à jour pour `NEW_RELIC_HOST` -* Mode APM : refactorisation des données d'événement d'erreur APM -* Mode APM : Ajout de la prise en charge de Ruby \ No newline at end of file diff --git a/src/i18n/content/fr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx b/src/i18n/content/fr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx deleted file mode 100644 index 4d82661447f..00000000000 --- a/src/i18n/content/fr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -subject: Browser agent -releaseDate: '2025-10-24' -version: 1.302.0 -downloadLink: 'https://www.npmjs.com/package/@newrelic/browser-agent' -features: - - Prepare agent to utilize v2 harvests for MFE registrations -bugs: - - User frustrations logic should be gated - - Improve accuracy in standalone AjaxRequest event start times -security: [] -translationType: machine ---- - -## v1.302.0 - -### Caractéristiques - -#### Préparer l'agent à utiliser les récoltes v2 pour les enregistrements MFE - -Mettez à jour l'agent pour gérer les récoltes pour la cible enregistrée afin d'utiliser les schémas de terminaison de point v2 nouvellement définis. Ce mécanisme permettra de gérer la synthèse des entités et des relations côté client, ainsi que d'ingérer les données spécifiques à MFE. Cette fonctionnalité sera prise en charge pour les événements de Log, PageAction et JavaScriptError, mais est actuellement soumise à des restrictions internes jusqu'à l'annonce d'une préversion publique. - -### Débogage - -#### La logique de gestion des frustrations des utilisateurs devrait être encadrée. - -Déplacez la logique de gestion des frustrations des utilisateurs uniquement au niveau du navigateur avec la porte FF dans l'instrumentation d'événements génériques. Cela devrait éviter l'exécution de logiques d'encapsulation superflues et d'événements susceptibles de générer des frustrations chez les utilisateurs. - -#### Améliorer la précision des heures de début des événements AjaxRequest autonomes - -Corrige un problème dans l'agent où les heures de début de certaines charges d'événements AjaxRequest autonomes étaient rapportées par rapport à l'origine de la page au lieu d'être rapportées par rapport au premier événement de la charge, ce qui entraînait des incohérences lors de la visualisation dans NR1. - -## Déclaration de soutien - -New Relic vous recommande de mettre à niveau l'agent régulièrement pour vous assurer de bénéficier des dernières fonctionnalités et avantages en termes de performances. Les sorties plus anciennes ne seront plus prises en charge lorsqu'elles atteindront [la fin de leur vie](https://docs.newrelic.com/docs/browser/browser-monitoring/getting-started/browser-agent-eol-policy/). Les dates de sortie reflètent la date de publication originale de la version de l'agent. - -Les nouveaux agents de navigation sont déployés auprès des clients par petites étapes sur une période donnée. De ce fait, la date à laquelle la sortie devient accessible sur votre compte peut ne pas correspondre à la date de publication d'origine. Veuillez consulter ce [dashboard d'état](https://newrelic.github.io/newrelic-browser-agent-release/) pour plus d'informations. - -Conformément à notre [politique de prise en charge des navigateurs](https://docs.newrelic.com/docs/browser/new-relic-browser/getting-started/compatibility-requirements-browser-monitoring/#browser-types), la version 1.302.0 de l'agent Browser a été conçue et testée avec les navigateurs et plages de versions suivants : Chrome 131-141, Edge 131-141, Safari 17-26 et Firefox 134-144. Pour les appareils mobiles, la version 1.302.0 a été conçue et testée pour Android OS 16 et iOS Safari 17-26. \ No newline at end of file diff --git a/src/i18n/content/fr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx b/src/i18n/content/fr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx deleted file mode 100644 index a7bdb6672a6..00000000000 --- a/src/i18n/content/fr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -subject: Node API runtime -releaseDate: '2025-10-30' -version: rc1.2 -translationType: machine ---- - -### Correctifs de sécurité - -* Vulnérabilités corrigées (CVE-2025-56200) pour le validateur \ No newline at end of file diff --git a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx b/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx deleted file mode 100644 index a8c1ca7e136..00000000000 --- a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx +++ /dev/null @@ -1,652 +0,0 @@ ---- -title: Actions de communication -tags: - - workflow automation - - workflow - - workflow automation actions - - communication actions - - slack actions - - ms teams actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Nous travaillons toujours sur cette fonctionnalité, mais nous aimerions que vous l'essayiez ! - - Cette fonctionnalité est actuellement fournie dans le cadre d'un programme d'aperçu conformément à nos [politiques de pré-sortie](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Cette page fournit une référence complète des actions de communication disponibles dans le catalogue des actions d'automatisation workflow. Ces actions vous permettent d'intégrer une plateforme de communication à vos définitions workflow, notamment en envoyant des messages aux canaux Slack, en récupérant les réactions, et bien plus encore. - -## Prérequis - -Avant d'utiliser des actions de communication dans l'automatisation workflow, assurez-vous de disposer de : - -* Un espace de travail Slack avec les autorisations appropriées. -* Un bot Slack configuré comme secret dans l'automatisation workflow. -* Accès aux canaux Slack dans lesquels vous souhaitez envoyer des messages. - -Consultez la section [« Ajouter une configuration Slack »](/docs/autoflow/overview#add-the-slack-integration) pour plus d'informations sur la configuration de l'intégration Slack. - -## Actions Slack - - - - Envoie un message vers un canal Slack, avec une pièce jointe facultative. - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Exemple -
- **jeton** - - Requis - - secrète - - `${{ :secrets:slackToken }}` -
- **canal** - - Requis - - chaîne - - `my-slack-channel` -
- **texte** - - Requis - - chaîne - - `Hello World!` -
- **filTs** - - Facultatif - - chaîne - - `.` -
- **pièce jointe** - - Facultatif - - carte - -
- **pièce jointe.nom_de_fichier** - - Requis - - chaîne - - `file.txt` -
- **pièce jointe.contenu** - - Requis - - chaîne - - `Hello\nWorld!` -
- - - * **token**: Le bot Slack jeton à utiliser. Cela devrait être transmis comme une syntaxe secrète. Consultez la section [« Ajouter une configuration Slack »](/docs/autoflow/overview#add-the-slack-integration) pour obtenir des instructions sur la configuration d'un jeton. - * **channel**: Le nom du canal, ou un identifiant de canal, sur lequel envoyer le message. Consultez [l'API Slack](https://api.slack.com/methods/chat.postMessage#arg_channel/) pour plus d'informations. - * **text**: Le message à publier sur Slack dans le `channel` spécifié. - * **threadTs**: horodatage appartenant au message parent, utilisé pour créer une réponse à un message dans un fil de discussion. - * **attachment**: Autoriser la pièce jointe d'un fichier avec un message sur le `channel` spécifié. - * **attachment.filename**: Spécifiez le nom du fichier téléchargé dans Slack. - * **attachment.content**: Le contenu du fichier à télécharger au format UTF-8. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Exemple -
- **filTs** - - chaîne - - `.` -
- **ID du canal** - - chaîne - - `` -
- - - * **threadTs**: horodatage du message. Peut être utilisé dans de futurs appels postMessage pour publier une réponse dans un fil de discussion. - * **channelID**: Identifiant du canal où le message est publié. - -
- - - **Exemple 1 : Publier un message sur un canal Slack** - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: SendMessage - - steps: - - name: send_slack_message - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: ${{ .workflowInputs.channel }} - text: ${{ .workflowInputs.text }} - ``` - - **Entrées attendues :** - - ```json - { - "inputs": [ - { - "key" : "channel", - "value" : "my-channel" - }, - { - "key" : "text", - "value" : "This is my message *with bold text* and `code backticks`" - } - ] - } - ``` - - **Résultat attendu :** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
- - **Exemple 2 : Joindre un fichier** - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: SendFileMessage - - steps: - - name: postCsv - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: my-channel - text: "Please find the attached file:" - attachment: - filename: 'file.txt' - content: "Hello\nWorld!" - ``` - - **Résultat attendu :** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
-
-
-
-
-
- - - - Obtenir une réaction à un message provenant d'un canal Slack. - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Exemple -
- **jeton** - - Requis - - secrète - - `${{ :secrets:slackToken }}` -
- **ID du canal** - - Requis - - chaîne - - `C063JK1RHN1` -
- **temps mort** - - Facultatif - - int - - 60 -
- **filTs** - - Requis - - chaîne - - `.` -
- **sélecteurs** - - Facultatif - - liste - - `[{\"name\": \"reactions\", \"expression\": \".reactions \"}]` -
- - - * **token**: Le bot Slack jeton à utiliser. Cela devrait être transmis comme une syntaxe secrète. Consultez la section [« Ajouter une configuration Slack »](/docs/autoflow/overview#add-the-slack-integration) pour obtenir des instructions sur la configuration d'un jeton. - * **channelID**: L'identifiant du canal permettant d'obtenir les réactions aux messages. - * **timeout**: Durée en secondes pendant laquelle il faut attendre une réaction. La valeur par défaut est de 60 secondes, la valeur maximale autorisée est de 600 secondes (10 minutes). - * **threadTs**: horodatage associé au message, utilisé pour obtenir la réaction à ce message. - * **selectors**: Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. - -
- - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Exemple -
- **réactions** - - liste - - `` -
- - - * **reactions**: Liste des éléments contenant toutes les réactions capturées ou une liste vide en cas de dépassement de délai. - -
- - - **Exemple 1 : Slack obtient des réactions** - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: GetReactions - - steps: - - name: getReactions - type: action - action: slack.chat.getReactions - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channelID: ${{ .steps.promptUser.outputs.channelID }} - threadTs: ${{ .steps.promptUser.outputs.threadTs }} - timeout: ${{ .workflowInputs.timeout }} - selectors: ${{ .workflowInputs.selectors }} - ``` - - **Entrées attendues :** - - ```json - { - "inputs": [ - { - "key" : "channelID", - "value" : "C063JK1RHN1" - }, - { - "key" : "threadTs", - "value" : "1718897637.400609" - }, - { - "key" : "selectors", - "value" : "[{\"name\": \"reactions\", \"expression\": \".reactions \"}]" - } - ] - } - ``` - - **Résultat attendu :** - - ```json - [ - { - "name": "grinning", - "users": [ - "W222222" - ], - "count": 1 - }, - { - "name": "question", - "users": [ - "W333333" - ], - "count": 1 - } - ] - ``` - - Ou si le délai est dépassé : - - ```json - [] - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx b/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx deleted file mode 100644 index 5539127c7c3..00000000000 --- a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx +++ /dev/null @@ -1,1043 +0,0 @@ ---- -title: actions HTTP -tags: - - workflow automation - - workflow - - workflow automation actions - - HTTP actions -metaDescription: A list of available HTTP actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Nous travaillons toujours sur cette fonctionnalité, mais nous aimerions que vous l'essayiez ! - - Cette fonctionnalité est actuellement fournie dans le cadre d'un programme d'aperçu conformément à nos [politiques de pré-sortie](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Cette page fournit une référence complète des actions HTTP disponibles dans le catalogue des actions d'automatisation workflow. Ces actions vous permettent d'effectuer requests HTTP (GET, POST, PUT, DELETE) vers des API et des services externes dans le cadre de vos définitions workflow. - -## Prérequis - -Avant d'utiliser les actions HTTP dans l'automatisation workflow, assurez-vous de disposer de : - -* cible points de terminaison d'API URLs. -* Toutes les informations d'identification d'authentification requises (clé API, jeton, etc.). -* Compréhension des formats de requête/réponse de l'API. - - - Les actions HTTP prennent en charge la syntaxe secrète pour toute valeur d'en-tête, vous permettant de transmettre en toute sécurité des données sensibles telles que l'API clé. Consultez [la section Gestion des secrets](/docs/infrastructure/host-integrations/installation/secrets-management/) pour plus d'informations. - - -## actions HTTP - - - - Effectuez un appel HTTP GET pour récupérer des données à partir d'un point de terminaison d'API. - - - Cela prend en charge la syntaxe secrète pour toute valeur d'en-tête. - - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Description -
- **url** - - Requis - - Chaîne - - L'URL cible de la requête. Le dispositif doit être inclus : - - `https://example.com` -
- **urlParams** - - Facultatif - - Carte - - Les paramètres de requête à ajouter à l'URL. Prend un objet JSON converti en chaîne de caractères. -
- **en-têtes** - - Facultatif - - Carte - - Les en-têtes à ajouter à la requête. Prend un objet JSON converti en chaîne de caractères. -
- **sélecteurs** - - Facultatif - - List - - Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Description -
- **corps de réponse** - - Chaîne - - Le corps de la réponse. -
- **code d'état** - - Entier - - Le code d'état HTTP de la réponse. -
-
- - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: httpGetTest - description: 'Performs an HTTP GET request to retrieve data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - steps: - - name: query - type: action - action: http.get - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - next: end - ``` - - **Exemples d'entrées :** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}" - } - ``` - - **Exemples de résultats :** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Effectue un appel HTTP POST pour envoyer des données à un point de terminaison d'API. - - - Cela prend en charge la syntaxe secrète pour toute valeur d'en-tête. - - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Description -
- **url** - - Requis - - Chaîne - - L'URL cible de la requête. Le dispositif doit être inclus : - - `https://example.com` -
- **urlParams** - - Facultatif - - Carte - - Les paramètres de requête à ajouter à l'URL. Prend un objet JSON converti en chaîne de caractères. -
- **en-têtes** - - Facultatif - - Carte - - Les en-têtes à ajouter à la requête. Prend un objet JSON converti en chaîne de caractères. -
- **corps** - - Facultatif - - Chaîne - - Le corps de la requête. -
- **sélecteurs** - - Facultatif - - List - - Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Description -
- **corps de réponse** - - Chaîne - - Le corps de la réponse. -
- **code d'état** - - Entier - - Le code d'état HTTP de la réponse. -
-
- - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: httpPostTest - description: 'Performs an HTTP POST request to send data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - steps: - - name: query - type: action - action: http.post - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - next: end - ``` - - **Exemples d'entrées :** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}" - } - ``` - - **Exemples de résultats :** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Effectue une requête HTTP PUT pour mettre à jour les données à un point de terminaison d'API. - - - Si vous devez transmettre des données sensibles à une entrée, par exemple un en-tête `Api-Key`, vous pouvez utiliser les valeurs stockées via la mutation NerdGraph [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql). - - Exemple: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Description -
- **url** - - Requis - - Chaîne - - L'URL cible de la requête. L'URL doit inclure le schéma (par exemple, https:// ou http://). Exemple: - - `https://example.com` -
- **urlParams** - - Facultatif - - Carte - - Les paramètres de requête à ajouter à l'URL. Prend un objet JSON converti en chaîne de caractères. -
- **en-têtes** - - Facultatif - - Carte - - Les en-têtes à ajouter à la requête. Prend un objet JSON converti en chaîne de caractères. -
- **corps** - - Facultatif - - Chaîne - - Le corps de la requête. -
- **sélecteurs** - - Facultatif - - List - - Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Description -
- **corps de réponse** - - Chaîne - - Le corps de la réponse. -
- **code d'état** - - Entier - - Le code d'état HTTP de la réponse. -
-
- - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: httpPutTest - description: 'Performs an HTTP PUT request to update data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.put - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Exemples d'entrées :** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Exemples de résultats :** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Effectue une requête HTTP DELETE pour supprimer des données à un point de terminaison d'API. - - - Si vous devez transmettre des données sensibles à une entrée, par exemple un en-tête `Api-Key`, vous pouvez utiliser les valeurs stockées via la mutation NerdGraph [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql). - - Exemple: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Description -
- **url** - - Requis - - Chaîne - - L'URL cible de la requête. L'URL doit inclure le schéma (par exemple, https:// ou http://). Exemple: - - `https://example.com` -
- **urlParams** - - Facultatif - - Carte - - Les paramètres de requête à ajouter à l'URL. Prend un objet JSON converti en chaîne de caractères. -
- **en-têtes** - - Facultatif - - Carte - - Les en-têtes à ajouter à la requête. Prend un objet JSON converti en chaîne de caractères. -
- **sélecteurs** - - Facultatif - - List - - Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Description -
- **corps de réponse** - - Chaîne - - Le corps de la réponse. -
- **code d'état** - - Entier - - Le code d'état HTTP de la réponse. -
-
- - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: httpDeleteTest - description: 'Performs an HTTP DELETE request to remove data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.delete - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Exemples d'entrées :** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Exemples de résultats :** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx b/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx deleted file mode 100644 index c1b772faf29..00000000000 --- a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx +++ /dev/null @@ -1,1212 +0,0 @@ ---- -title: Actions de New Relic -tags: - - workflow automation - - workflow - - workflow automation actions - - New relic actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Nous travaillons toujours sur cette fonctionnalité, mais nous aimerions que vous l'essayiez ! - - Cette fonctionnalité est actuellement fournie dans le cadre d'un programme d'aperçu conformément à nos [politiques de pré-sortie](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Cette page fournit une référence complète des actions New Relic disponibles dans le catalogue des actions d'automatisation workflow. Ces actions vous permettent d'intégrer les fonctionnalités de la plateforme New Relic dans vos définitions workflow, notamment l'envoi d'événements personnalisés et de logs, l'exécution de requêtes NerdGraph, l'exécution de requêtes NRQL et l'envoi de notifications. - -## Prérequis - -Avant d'utiliser les actions New Relic dans l'automatisation workflow, assurez-vous de disposer de : - -* Un compte New Relic disposant des autorisations appropriées. -* Une clé de licence New Relic (si vous envoyez des données vers un compte différent). -* Les autorisations nécessaires pour les services New Relic spécifiques que vous prévoyez d'utiliser. - -Consultez [la clé de licence](/docs/apis/intro-apis/new-relic-api-keys/#license-key) pour obtenir des informations sur la façon de créer et de gérer votre compte New Relic. - -## Actions New Relic disponibles - -Guide rapide de toutes les actions de New Relic par catégorie : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Catégorie - - Action - - But -
- **Ingestion de données** - - [Envoyer un événement personnalisé](#newrelicingestsendevents) - - Envoyer un événement personnalisé à New Relic. -
- **Ingestion de données** - - [Envoyer les logs](#newrelicingestsendlogs) - - Envoyer les données log à New Relic. -
- **NerdGraph** - - [Exécuter une requête ou une mutation GraphQL](#newrelicnerdgraphexecute) - - Exécuter des commandes GraphQL sur l'API NerdGraph. -
- **Qequête** - - [Exécuter une requête NRDB](#newrelicnrdbquery) - - Exécuter la requête NRQL inter-comptes. -
- **Notifications** - - [Envoyer une notification](#newrelicnotificationsend) - - Envoyer une notification aux destinations New Relic. -
- -## actions d'ingestion de données - - - - Envoie un événement personnalisé à New Relic - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Exemple -
- **attributes** - - Facultatif - - carte - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **événement** - - Requis - - liste - - `"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]` -
- **clé de licence** - - Facultatif - - chaîne - - `"{{ .secrets.secretName }}"` -
- **sélecteurs** - - Facultatif - - liste - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: Attribut commun qui fait partie de tous les événements lorsqu'il est fourni. Fusion pour chaque élément d'événement lorsque cela est nécessaire, l'élément d'événement remplace la définition commune. - * **events**: La liste des données d'événement. Notez que l'événement nécessite l'utilisation d'un champ `eventType` qui représente le type d'événement personnalisé et que le nombre maximal d'événements autorisés par requête est de 100. - * **licenseKey**: La clé de licence du compte New Relic qui spécifie le compte cible où les événements sont envoyés. Si cette valeur n’est pas fournie, une clé de licence par défaut est supposée en fonction du compte exécutant le workflow. - * **selectors**: Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Exemple -
- **succès** - - Booléen - - `true` -
- **message d'erreur** - - chaîne - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: heartbeat_newrelicIngestSendEvents - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendEvents - version: 1 - inputs: - attributes: - colour: red - id: 1234 - events: - - eventType: HeartBeat - test: "OK" - attributes: - foo: bar - - eventType: HeartBeat1234 - test: "OK1234" - attributes: - foo: bar - - eventType: HeartBeat12345 - test: "OK12345" - attributes: - foo: bar - colour: yellow - - eventType: HeartBeat12345678 - test: "OK12345678" - selectors: - - name: success - expression: ".success" - ``` - - **Résultat attendu :** - - ```yaml - { - "success": true - } - ``` - - **Récupérer l'événement :** - - Une fois un workflow exécuté avec succès, vous pouvez récupérer l'événement associé en exécutant une requête sous le compte qui a exécuté le workflow: - - ```sql - SELECT * FROM HeartBeat - ``` -
-
-
-
-
-
- - - - Envoyer les logs à New Relic - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de saisie - - optionnalité - - Type - - Exemple -
- **attributes** - - Facultatif - - carte - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **logs** - - Requis - - liste - - `"[{\"message\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"message\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"` -
- **clé de licence** - - Facultatif - - chaîne - - `"{{ .secrets.secretName }}"` -
- **sélecteurs** - - Facultatif - - liste - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: Attribut commun inclus dans tous les logs lorsqu'il est fourni. Si un élément log spécifie le même attribut, il remplace la définition commune. - * **logs**: La liste des données log. Notez que le nombre maximal des logs d'entrées autorisé par requête est de 100. - * **licenseKey**: La clé de licence du compte New Relic qui spécifie le compte cible où les logs sont envoyés. Si aucune clé de licence n’est fournie, une clé de licence par défaut est supposée en fonction du compte exécutant le workflow. Consultez [la clé de licence](/docs/apis/intro-apis/new-relic-api-keys/#license-key) pour plus d'informations. - * **selectors**: Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ de sortie - - Type - - Exemple -
- **succès** - - Booléen - - `true` -
- **message d'erreur** - - chaîne - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- Exemple de workflow -
- ```yaml - name: heartbeat_newrelicIngestSendLogs - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - attributes: - colour: red - id: 1234 - logs: - - message: 'Heartbeat sendLogs Action Test Message' - attributes: - foo: bar - - message: 'HeartBeat1234' - attributes: - foo: bar - - message: 'HeartBeat12345' - attributes: - foo: bar - colour: yellow - - message: 'HeartBeat12345678' - selectors: - - name: success - expression: ".success" - ``` - - **Résultat attendu :** - - ```yaml - { - "success": true - } - ``` - - **Récupérer les logs :** - - Une fois un workflow exécuté avec succès, vous pouvez récupérer le log associé en exécutant une requête sous le compte qui a exécuté le workflow: - - ```sql - SELECT * FROM Log - ``` -
-
-
-
-
-
- -## Actions NerdGraph - - - - Exécute une commande Graphql sur l'API New Relic NerdGraph. La commande peut être soit une requête, soit une mutation. - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Saisir - - optionnalité - - Type - - Description - - Exemple -
- **graphql** - - Requis - - chaîne - - Une syntaxe GraphQL. Vous devriez utiliser GraphiQL pour construire et tester votre commande - -
- **variables** - - Requis - - map[string]any - - Toutes les variables de type paire valeur-clé à utiliser avec l'instruction GraphQL. - -
- **sélecteurs** - - Facultatif - - liste - - Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. - - ```yaml - { - "data": { - "actor": { - "user": { - "name": "" - } - } - } - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Sortir - - Type - - Exemple -
- **données** - - map[string]any : Contenu de la propriété - - `data` - - d'une réponse NerdGraph. - - ```yaml - steps: - - name: currentUserId - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - query userId { - currentUser { - id - } - } - - name: sayHello - type: action - action: example.messaging.sayHello - version: 1 - inputs: - name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Exemple - - Sortir - - Récupérer l'événement -
- ```json - name: testLog - - steps: - - name: logStep - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - logs: - - message: 'Hello World' - ``` - - ```yaml - { - "success": true - } - ``` - - Vous pouvez récupérer l'événement associé en exécutant une requête sous le compte qui a exécuté le workflow. - - ```yaml - SELECT message FROM Log WHERE allColumnSearch('Hello World', insensitive: true) SINCE 30 minutes ago - ``` -
-
-
-
-
-
- -## Actions de requête - - - - Exécute une requête NRQL inter-comptes via l'API NerdGraph. - - - - - Entrées - - - - Sorties - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Saisir - - optionnalité - - Type - - Description - - Exemple -
- **requête** - - Requis - - chaîne - - L'instruction de requête NRQL. - -
- **identifiants de compte** - - Facultatif - - liste d'entiers - - Le champ - - **New Relic Account ID** - - est une liste d’identifiants cibles qui vous permet de spécifier les comptes cibles sur lesquels la requête est exécutée. Si cette valeur n'est pas fournie en entrée, la requête sera automatiquement exécutée sur le compte associé au compte d'exécution du workflow. - -
- **sélecteurs** - - Facultatif - - liste - - Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. - - ```json - steps: - - name: queryForLog - type: action - action: newrelic.nrdb.query - version: 1 - inputs: - accountIds: [12345] - query: FROM Log SELECT * WHERE message LIKE 'DEMO%' - selectors: - - name: resultsAsString - expression: '.results | tostring' - ``` -
-
- - - - - - - - - - - - - - - - - - - - -
- Sortir - - Type - - Exemple -
- **results** - - : Un éventail d'objets contenant les résultats de la requête. - - - - ```yaml - { - results=[ - { message=[INFO] - Workflow: test has ended, messageId=39af98 }, - { message=[INFO] - Workflow: test - Step query has started, messageId=649c612 }, - ... - ] - } - ``` -
-
-
-
-
-
- -## Actions de notification - - - - Envoie un message à un canal, intégré à des destinations comme Slack par exemple. - - - - - Entrées - - - - Sorties - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Saisir - - optionnalité - - Type - - Description - - Exemple -
- **type** - - Requis - - chaîne - - Type de destination New Relic - - `slack` -
- **destinationId** - - Requis - - Chaîne - - DestinationId associé à la destination New Relic. - - `123e4567-e89b-12d3-a456-426614174000` -
- **paramètres** - - Requis - - carte - - Champs requis pour envoyer une notification au type de destination choisi. - - `{\"channel\": \"${{ YOUR_CHANNEL }}\", \"text\": \"Enter your text here\"}` -
- **sélecteurs** - - Facultatif - - liste - - Les sélecteurs permettant d'obtenir uniquement les paramètres spécifiés en sortie. - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Sortir - - Type - - Exemple -
- succès - - booléen - - `true/false` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx b/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx deleted file mode 100644 index 0bc41561c11..00000000000 --- a/src/i18n/content/fr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx +++ /dev/null @@ -1,634 +0,0 @@ ---- -title: Actions utilitaires -tags: - - workflow automation - - workflow - - workflow automation actions - - utility actions -metaDescription: A list of available utility actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - -Cette page fournit une référence pour les actions utilitaires disponibles dans le catalogue des actions d'automatisation workflow. Ces actions vous permettent d'effectuer des opérations courantes de transformation et d'utilisation des données dans vos définitions workflow. - -## Actions utilitaires - - - - Cette action permet de convertir un horodatage Unix en date/heure. Références possibles : - - * [https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - * [https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT\_IDS](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS) - - Consultez [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) pour plus d'informations. - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Saisir - - optionnalité - - Type - - Description -
- **horodatage** - - Requis - - int - - Un entier représentant l'horodatage de l'époque. Notez que les époques UNIX correspondent au nombre de secondes écoulées depuis le 1er janvier 1970 à minuit UTC (00:00). -
- **horodatageUnité** - - Facultatif - - chaîne - - Une chaîne de caractères représentant l'unité de l'horodatage fourni. Valeurs acceptables : SECONDES, MILLISECONDES (PAR DÉFAUT) -
- **fuseau horaireId** - - Facultatif - - chaîne - - Chaîne de caractères représentant le fuseau horaire de la date et de l'heure souhaitées (par défaut : UTC). -
- **modèle** - - Facultatif - - chaîne - - Chaîne de caractères représentant le format de date et d'heure souhaité, par défaut : ISO-8601 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ - - optionnalité - - Type de données - - Description -
- **date** - - Requis - - chaîne - - Représentation sous forme de chaîne de caractères de la date. -
- **temps** - - Requis - - chaîne - - Une représentation sous forme de chaîne de caractères du temps. -
- **date et heure** - - Requis - - chaîne - - Représentation sous forme de chaîne de caractères d'une date et heure. -
- **fuseau horaire** - - Requis - - carte - - Représentation cartographique de l'identifiant et de l'abréviation du fuseau horaire. -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Exemple - - Workflow Entrée - - Sorties -
- ```yaml - name: from_epoch - - workflowInputs: - timestamp: - type: Int - timestampUnit: - type: String - timezoneId: - type: String - pattern: - type: String - - steps: - - name: epochTime - type: action - action: utils.datetime.fromEpoch - version: 1 - inputs: - timestamp: ${{ .workflowInputs.timestamp }} - timezoneId: ${{ .workflowInputs.timezoneId }} - pattern: ${{ .workflowInputs.pattern }} - timestampUnit: ${{ .workflowInputs.timestampUnit }} - ``` - - ```json - mutation { - workflowAutomationStartWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { name: "from_epoch" } - workflowInputs: [ - {key: "timestamp", value: "1738236424003"} - {key: "timestampUnit", value: "MILLISECONDS"} - {key: "pattern", value: "yyyy-mm-dd HH:SS"} - {key: "timezoneId", value: "Asia/Kolkata"} - ] - ) { - runId - } - } - ``` - - ```json - { - "date": "2025-01-30", - "time": "16:57:04.003" - "datetime": "2025-01-30 16:00", - "timezone": { - "abbreviation": "IST", - "id": "Asia/Kolkata" - } - } - ``` -
-
-
-
-
-
- - - - Cette action permet de transformer différents types d'entrées (JSON, map) au format CSV. - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Saisir - - optionnalité - - Type - - Description -
- **données** - - Requis - - n'importe lequel - - Une chaîne de caractères représentant des données à transformer en CSV, généralement une chaîne JSON ou une carte. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- Champ - - optionnalité - - Type de données - - Description -
- **csv** - - Requis - - chaîne - - Une représentation CSV des données reçues. -
-
- - - - - - - - - - - - - - - - - - - - - -
- Exemple - - Workflow Entrée - - Sorties -
- ```json - name: nrqltocsv - - steps: - - name: queryForLog - type: action - action: newrelic.nrql.query - version: 1 - inputs: - accountIds: ['${{ .workflowInputs.accountId }}'] - query: ${{ .workflowInputs.nrql }} - - - name: csv1 - type: action - action: utils.transform.toCSV - version: 1 - inputs: - data: ${{ .steps.queryForLog.outputs.results | tostring }} - ``` - - ```json - mutation { - startWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { - name: "nrqltocsv", - } - workflowInputs: [ - {key: "accountId" value: "12345678"} - {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} - ] - ) - { runId } - } - ``` - -
-
-
-
-
-
- - - - Générer un UUID V4 conforme à la RFC. - - - - - Entrées - - - - Sorties - - - - Exemple - - - - - - - - - - - - - - - - - - - - - - -
- Saisir - - optionnalité - - Type de données - - Description -
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - -
- Champ - - Type de données - - Description -
- **uuid** - - chaîne - -
-
- - - - - - - - - - - - - - - - - - - - -
- Exemple - - Workflow Entrée - - Sorties -
- - - nom : générerUUID
mesures: - - * nom : generateUUID type : action action : utils.uuid.generate version : 1 -
- ```json - { - "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/jp/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx b/src/i18n/content/jp/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx deleted file mode 100644 index 1d61affdc37..00000000000 --- a/src/i18n/content/jp/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -subject: Lambda-Extension -releaseDate: '2025-08-29' -version: 2.3.24 -translationType: machine ---- - -## 修理済み - -* 解決のため、Go std lib バージョンを`1.23.12`に更新しました `CVE-2025-47907` -* APMモード: APMモードの SM/SSM に関するライセンスキーの問題を解決し、ログ プレフィックスを解決しました - -## 新機能 - -* 既存のプレフィックスにログレベルプレフィックス`DEBUG`と`INFO`を追加しました `[NR_EXT]` -* APM モード: APM モードにタグを追加しました -* APM モード: APM 接続用のホストに Lambda ARN を追加しました -* APMモード: バックオフ期間を更新 `NEW_RELIC_HOST` -* APM モード: APM エラー イベント データをリファクタリングする -* APM モード: Ruby サポートを追加 \ No newline at end of file diff --git a/src/i18n/content/jp/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx b/src/i18n/content/jp/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx deleted file mode 100644 index 6a01c5c0f9c..00000000000 --- a/src/i18n/content/jp/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -subject: Browser agent -releaseDate: '2025-10-24' -version: 1.302.0 -downloadLink: 'https://www.npmjs.com/package/@newrelic/browser-agent' -features: - - Prepare agent to utilize v2 harvests for MFE registrations -bugs: - - User frustrations logic should be gated - - Improve accuracy in standalone AjaxRequest event start times -security: [] -translationType: machine ---- - -## バージョン1.302.0 - -### 特徴 - -#### MFE 登録に v2 ハーベストを活用できるようにエージェントを準備する - -新しく定義された v2 エンドポイント スキーマを使用するために、登録されたターゲットの収集を処理するエージェントを更新します。これは、クライアント側のエンティティとリレーションシップの合成を処理し、MFE 固有のデータを取り込むメカニズムとして機能します。これはログ、PageAction、JavaScriptError イベントでサポートされる予定ですが、現在、パブリック プレビューが発表されるまで内部機能フラグの背後で制限されています。 - -### バグ修正 - -#### ユーザーの不満のロジックはゲートされるべきである - -一般イベント計装の FF ゲートのみを使用して、ユーザーのフラストレーション ロジックをブラウザ スコープに移動します。 これにより、ユーザーの不満に関連する余分なラッピング ロジックやイベントの実行が回避されます。 - -#### スタンドアロンの AjaxRequest イベント開始時間の精度を向上 - -特定のスタンドアロン AjaxRequest イベント ペイロードの開始時間が、ペイロードの最初のイベントを基準とするのではなく、ページの原点を基準にして報告され、NR1 で視覚化するときに不一致が発生するというエージェントの問題を調整します。 - -## サポートステートメント - -New Relic では、最新の機能とパフォーマンス上のメリットを確実に得られるよう、エージェントを定期的にアップグレードすることをお勧めします。古いリリースは[サポート終了](https://docs.newrelic.com/docs/browser/browser-monitoring/getting-started/browser-agent-eol-policy/)になるとサポートされなくなります。リリース日は、エージェント バージョンの元の公開日を反映します。 - -新しいブラウザエージェントのリリースは、一定期間にわたって小さな段階で顧客に展開されます。 このため、リリースがアカウントでアクセス可能になる日付は、元の公開日と一致しない可能性があります。詳細については、この[ステータス ダッシュボード](https://newrelic.github.io/newrelic-browser-agent-release/)をご覧ください。 - -弊社の[ブラウザ サポート ポリシー](https://docs.newrelic.com/docs/browser/new-relic-browser/getting-started/compatibility-requirements-browser-monitoring/#browser-types)に従い、 Browserの v1.302.0 は、 Chrome 131 ~ 141、Edge 131 ~ 141、Safari 17 ~ 26、Firefox 134 ~ 144 のブラウザとバージョン範囲を対象に構築され、テストされています。 モバイル デバイスの場合、v1.302.0 は Android OS 16 および iOS Safari 17-26 用に構築およびテストされました。 \ No newline at end of file diff --git a/src/i18n/content/jp/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx b/src/i18n/content/jp/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx deleted file mode 100644 index 335378be05e..00000000000 --- a/src/i18n/content/jp/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -subject: Node API runtime -releaseDate: '2025-10-09' -version: rc1.1 -translationType: machine ---- - -### セキュリティパッチ - -* nodemailer の脆弱性 (GHSA-mm7p-fcc7-pg87) を修正しました \ No newline at end of file diff --git a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx b/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx deleted file mode 100644 index e8ceca1c51c..00000000000 --- a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx +++ /dev/null @@ -1,652 +0,0 @@ ---- -title: コミュニケーションアクション -tags: - - workflow automation - - workflow - - workflow automation actions - - communication actions - - slack actions - - ms teams actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - この機能はまだ開発中ですが、ぜひお試しください。 - - この機能は現在、弊社の[プレリリース ポリシー](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy)に従ってプレビュー プログラムの一部として提供されています。 - - -このページでは、ワークフロー自動化アクション カタログで使用できる通信アクションの包括的なリファレンスを提供します。これらのアクションを使用すると、Slack チャネルへのメッセージの送信、反応の取得など、コミュニケーション プラットフォームをワークフロー定義に統合できます。 - -## 前提条件 - -ワークフロー自動化でコミュニケーションアクションを使用する前に、次の点を確認してください。 - -* 適切な権限を持つ Slack ワークスペース。 -* ワークフロー自動化でシークレットとして設定された Slack ボット トークン。 -* メッセージを送信する Slack チャネルへのアクセス。 - -Slack 統合の設定方法については、 [「Slack 設定の追加」を](/docs/autoflow/overview#add-the-slack-integration)参照してください。 - -## Slackアクション - - - - オプションのファイル添付を使用して、メッセージを Slack チャネルに送信します。 - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 例 -
- **トークン** - - 必須 - - シークレット - - `${{ :secrets:slackToken }}` -
- **チャネル** - - 必須 - - ストリング - - `my-slack-channel` -
- **テキスト** - - 必須 - - ストリング - - `Hello World!` -
- **スレッドT** - - オプション - - ストリング - - `.` -
- **添付ファイル** - - オプション - - マップ - -
- **添付ファイル.ファイル名** - - 必須 - - ストリング - - `file.txt` -
- **添付ファイルの内容** - - 必須 - - ストリング - - `Hello\nWorld!` -
- - - * **token**: Slack ボットを使用します。 これは秘密の構文として渡す必要があります。トークンの設定手順については、 [「Slack 構成の追加」](/docs/autoflow/overview#add-the-slack-integration)を参照してください。 - * **channel** : メッセージを送信するチャネルの名前、またはチャネル ID。詳細については、 [Slack API を](https://api.slack.com/methods/chat.postMessage#arg_channel/)参照してください。 - * **text** : 指定された`channel`で Slack に投稿されるメッセージ。 - * **threadTs** : 親メッセージに属するタイムスタンプ。スレッド内でメッセージの返信を作成するために使用されます。 - * **attachment** : 指定された`channel`にメッセージ付きのファイルを添付できるようにします。 - * **attachment.filename** : Slack にアップロードするファイルのファイル名を指定します。 - * **attachment.content**:UTF8 としてアップロードするファイルの内容。 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 例 -
- **スレッドT** - - ストリング - - `.` -
- **チャンネルID** - - ストリング - - `` -
- - - * **threadTs** : メッセージのタイムスタンプ。今後の postMessage 呼び出しでスレッドに返信を投稿するために使用される場合があります。 - * **channelID** : メッセージが投稿されるチャネルの ID。 - -
- - - **例1: Slackチャンネルにメッセージを投稿する** - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: SendMessage - - steps: - - name: send_slack_message - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: ${{ .workflowInputs.channel }} - text: ${{ .workflowInputs.text }} - ``` - - **予想される入力:** - - ```json - { - "inputs": [ - { - "key" : "channel", - "value" : "my-channel" - }, - { - "key" : "text", - "value" : "This is my message *with bold text* and `code backticks`" - } - ] - } - ``` - - **期待される出力:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
- - **例2: ファイルを添付する** - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: SendFileMessage - - steps: - - name: postCsv - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: my-channel - text: "Please find the attached file:" - attachment: - filename: 'file.txt' - content: "Hello\nWorld!" - ``` - - **期待される出力:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
-
-
-
-
-
- - - - Slack チャネルからメッセージに対する反応を取得します。 - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 例 -
- **トークン** - - 必須 - - シークレット - - `${{ :secrets:slackToken }}` -
- **チャンネルID** - - 必須 - - ストリング - - `C063JK1RHN1` -
- **タイムアウト** - - オプション - - int - - 60 -
- **スレッドT** - - 必須 - - ストリング - - `.` -
- **セレクター** - - オプション - - リスト - - `[{\"name\": \"reactions\", \"expression\": \".reactions \"}]` -
- - - * **token**: Slack ボットを使用します。 これは秘密の構文として渡す必要があります。トークンの設定手順については、 [「Slack 構成の追加」](/docs/autoflow/overview#add-the-slack-integration)を参照してください。 - * **channelID** : メッセージの反応を取得するためのチャネルID。 - * **timeout** : 反応を待つ時間(秒数)。デフォルトは 60 秒、最大許容時間は 600 秒 (10 分) です。 - * **threadTs** : メッセージに属するタイムスタンプ。そのメッセージの反応を取得するために使用されます。 - * **selectors** : 指定された唯一のものを出力として取得するセレクター。 - -
- - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 例 -
- **反応** - - リスト - - `` -
- - - * **reactions**: キャプチャされたすべての反応を含む要素のリスト、またはタイムアウトが発生した場合は空のリスト。 - -
- - - **例1: Slackで反応を得る** - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: GetReactions - - steps: - - name: getReactions - type: action - action: slack.chat.getReactions - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channelID: ${{ .steps.promptUser.outputs.channelID }} - threadTs: ${{ .steps.promptUser.outputs.threadTs }} - timeout: ${{ .workflowInputs.timeout }} - selectors: ${{ .workflowInputs.selectors }} - ``` - - **予想される入力:** - - ```json - { - "inputs": [ - { - "key" : "channelID", - "value" : "C063JK1RHN1" - }, - { - "key" : "threadTs", - "value" : "1718897637.400609" - }, - { - "key" : "selectors", - "value" : "[{\"name\": \"reactions\", \"expression\": \".reactions \"}]" - } - ] - } - ``` - - **期待される出力:** - - ```json - [ - { - "name": "grinning", - "users": [ - "W222222" - ], - "count": 1 - }, - { - "name": "question", - "users": [ - "W333333" - ], - "count": 1 - } - ] - ``` - - またはタイムアウトになった場合: - - ```json - [] - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx b/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx deleted file mode 100644 index 3552b490201..00000000000 --- a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx +++ /dev/null @@ -1,1043 +0,0 @@ ---- -title: HTTPアクション -tags: - - workflow automation - - workflow - - workflow automation actions - - HTTP actions -metaDescription: A list of available HTTP actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - この機能はまだ開発中ですが、ぜひお試しください。 - - この機能は現在、弊社の[プレリリース ポリシー](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy)に従ってプレビュー プログラムの一部として提供されています。 - - -このページでは、ワークフロー自動化アクション カタログで使用できる HTTP アクションの包括的なリファレンスを提供します。これらのアクションを使用すると、ワークフロー定義の一部として外部 API およびサービスに HTTP requests ( GET 、POST、PUT、DELETE) を送信できるようになります。 - -## 前提条件 - -ワークフロー自動化で HTTP アクションを使用する前に、次の点を確認してください。 - -* 目標APIエンドポイントのURL。 -* 必要な認証資格情報 ( APIキー、VPN など)。 -* API リクエスト/レスポンス形式の理解。 - - - HTTP アクションは、任意のヘッダー値の秘密の構文をサポートしているため、 APIキーなどの機密データを安全に渡すことができます。 詳細については、[シークレット管理を](/docs/infrastructure/host-integrations/installation/secrets-management/)参照してください。 - - -## HTTPアクション - - - - HTTP GET呼び出しを実行して、 APIエンドポイントからデータを取得します。 - - - これは、任意のヘッダー値の秘密の構文をサポートします。 - - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 説明 -
- **url** - - 必須 - - 弦 - - リクエストのターゲット URL。スキームには次の内容が含まれている必要があります。 - - `https://example.com` -
- **urlパラメータ** - - オプション - - 地図 - - URL に追加するのは間違いありません。 文字列化された JSON オブジェクトを受け取ります。 -
- **ヘッダ** - - オプション - - 地図 - - リクエストに追加するヘッダー。文字列化された JSON オブジェクトを受け取ります。 -
- **セレクター** - - オプション - - リスト - - 指定されたもののみを出力として取得するセレクター。 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 説明 -
- **レスポンスボディ** - - 弦 - - 応答の本文。 -
- **ステータスコード** - - 整数 - - 応答の HTTP ステータス コード。 -
-
- - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: httpGetTest - description: 'Performs an HTTP GET request to retrieve data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - steps: - - name: query - type: action - action: http.get - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - next: end - ``` - - **入力例:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}" - } - ``` - - **出力例:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - HTTP POST 呼び出しを実行して、 APIエンドポイントにデータを送信します。 - - - これは、任意のヘッダー値の秘密の構文をサポートします。 - - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 説明 -
- **url** - - 必須 - - 弦 - - リクエストのターゲット URL。スキームには次の内容が含まれている必要があります。 - - `https://example.com` -
- **urlパラメータ** - - オプション - - 地図 - - URL に追加するのは間違いありません。 文字列化された JSON オブジェクトを受け取ります。 -
- **ヘッダ** - - オプション - - 地図 - - リクエストに追加するヘッダー。文字列化された JSON オブジェクトを受け取ります。 -
- **体** - - オプション - - 弦 - - リクエスト本体。 -
- **セレクター** - - オプション - - リスト - - 指定されたもののみを出力として取得するセレクター。 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 説明 -
- **レスポンスボディ** - - 弦 - - 応答の本文。 -
- **ステータスコード** - - 整数 - - 応答の HTTP ステータス コード。 -
-
- - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: httpPostTest - description: 'Performs an HTTP POST request to send data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - steps: - - name: query - type: action - action: http.post - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - next: end - ``` - - **入力例:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}" - } - ``` - - **出力例:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - HTTP PUT リクエストを実行して、 APIエンドポイントのデータを更新します。 - - - 入力に機密データ( `Api-Key`ヘッダーなど)を渡す必要がある場合は、 [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph ミューテーションを介して保存された値を使用できます。 - - 例: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 説明 -
- **url** - - 必須 - - 弦 - - リクエストのターゲット URL。URL にはスキーム (例: https:// または http://) を含める必要があります。例: - - `https://example.com` -
- **urlパラメータ** - - オプション - - 地図 - - URL に追加するのは間違いありません。 文字列化された JSON オブジェクトを受け取ります。 -
- **ヘッダ** - - オプション - - 地図 - - リクエストに追加するヘッダー。文字列化された JSON オブジェクトを受け取ります。 -
- **体** - - オプション - - 弦 - - リクエスト本体。 -
- **セレクター** - - オプション - - リスト - - 指定されたもののみを出力として取得するセレクター。 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 説明 -
- **レスポンスボディ** - - 弦 - - 応答の本文。 -
- **ステータスコード** - - 整数 - - 応答の HTTP ステータス コード。 -
-
- - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: httpPutTest - description: 'Performs an HTTP PUT request to update data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.put - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **入力例:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **出力例:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - HTTP DELETE リクエストを実行して、 APIエンドポイントのデータを削除します。 - - - 入力に機密データ( `Api-Key`ヘッダーなど)を渡す必要がある場合は、 [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph ミューテーションを介して保存された値を使用できます。 - - 例: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 説明 -
- **url** - - 必須 - - 弦 - - リクエストのターゲット URL。URL にはスキーム (例: https:// または http://) を含める必要があります。例: - - `https://example.com` -
- **urlパラメータ** - - オプション - - 地図 - - URL に追加するのは間違いありません。 文字列化された JSON オブジェクトを受け取ります。 -
- **ヘッダ** - - オプション - - 地図 - - リクエストに追加するヘッダー。文字列化された JSON オブジェクトを受け取ります。 -
- **セレクター** - - オプション - - リスト - - 指定されたもののみを出力として取得するセレクター。 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 説明 -
- **レスポンスボディ** - - 弦 - - 応答の本文。 -
- **ステータスコード** - - 整数 - - 応答の HTTP ステータス コード。 -
-
- - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: httpDeleteTest - description: 'Performs an HTTP DELETE request to remove data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.delete - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **入力例:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **出力例:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx b/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx deleted file mode 100644 index 006177259f6..00000000000 --- a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx +++ /dev/null @@ -1,1210 +0,0 @@ ---- -title: New Relicアクション -tags: - - workflow automation - - workflow - - workflow automation actions - - New relic actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - この機能はまだ開発中ですが、ぜひお試しください。 - - この機能は現在、弊社の[プレリリース ポリシー](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy)に従ってプレビュー プログラムの一部として提供されています。 - - -このページでは、ワークフロー自動化アクション カタログで使用できる New Relic アクションの包括的なリファレンスを提供します。これらのアクションにより、カスタムイベントやログの送信、NerdGraph 書き込みの実行、 NRQL書き込みの実行、通知の送信など、 New Relicプラットフォームの機能をワークフロー定義に統合できます。 - -## 前提条件 - -ワークフロー自動化で New Relic アクションを使用する前に、次の点を確認してください。 - -* 適切な権限を持つ New Relic アカウント。 -* New Relicライセンスキー (データを別のアカウントに送信する場合)。 -* 使用を計画している特定の New Relic サービスに必要な権限。 - -New Relicアカウントのライセンスキーの作成および管理方法については、「[ライセンスキー」](/docs/apis/intro-apis/new-relic-api-keys/#license-key)を参照してください。 - -## 利用可能なNew Relicアクション - -カテゴリ別のすべての New Relic アクションのクイックリファレンス: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- カテゴリー - - アクション - - 目的 -
- **データの取り込み** - - [カスタムイベントを送信する](#newrelicingestsendevents) - - カスタムイベントをNew Relicに送信します。 -
- **データの取り込み** - - [ログを送信](#newrelicingestsendlogs) - - ログデータを New Relic に送信します。 -
- **NerdGraph** - - [GraphQL書き込みまたはミューテーションを実行する](#newrelicnerdgraphexecute) - - NerdGraph API に対して GraphQL コマンドを実行します。 -
- **クエリ** - - [NRDB書き込みを実行する](#newrelicnrdbquery) - - クロスアカウント NRQL クエリを実行します。 -
- **通知** - - [通知を送信](#newrelicnotificationsend) - - New Relic の宛先に通知を送信します。 -
- -## データ取り込みアクション - - - - New Relicにカスタムイベントを送信します - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 例 -
- **属性** - - オプション - - マップ - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **イベント** - - 必須 - - リスト - - `"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]` -
- **ライセンスキー** - - オプション - - ストリング - - `"{{ .secrets.secretName }}"` -
- **セレクター** - - オプション - - リスト - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: 提供される場合にすべてのイベントの一部となる共通属性。必要なイベント項目が共通定義をオーバーライドする場合、各イベント項目をマージします。 - * **events**: イベントデータのリスト。 イベントではカスタムイベント タイプを表す`eventType`フィールドを使用する必要があり、リクエストごとに許可されるイベントの最大数は 100 であることに注意してください。 - * **LicenseKey** : イベントが送信されるターゲット アカウントを指定するNew Relicアカウント ライセンスキー。 この値が指定されていない場合、ワークフローを実行しているアカウントに基づいてデフォルトのライセンスキーが想定されます。 - * **selectors** : 指定されたもののみを出力として取得するセレクター。 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 例 -
- **成功** - - ブール値 - - `true` -
- **エラーメッセージ** - - ストリング - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: heartbeat_newrelicIngestSendEvents - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendEvents - version: 1 - inputs: - attributes: - colour: red - id: 1234 - events: - - eventType: HeartBeat - test: "OK" - attributes: - foo: bar - - eventType: HeartBeat1234 - test: "OK1234" - attributes: - foo: bar - - eventType: HeartBeat12345 - test: "OK12345" - attributes: - foo: bar - colour: yellow - - eventType: HeartBeat12345678 - test: "OK12345678" - selectors: - - name: success - expression: ".success" - ``` - - **期待される出力:** - - ```yaml - { - "success": true - } - ``` - - **イベントを取得:** - - ワークフローを正常に実行した後、ワークフローを実行したアカウントでクエリを実行して、関連付けられたイベントを取得できます。 - - ```sql - SELECT * FROM HeartBeat - ``` -
-
-
-
-
-
- - - - New Relicへのログ送信 - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力フィールド - - オプション性 - - タイプ - - 例 -
- **属性** - - オプション - - マップ - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **ログ** - - 必須 - - リスト - - `"[{\"message\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"message\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"` -
- **ライセンスキー** - - オプション - - ストリング - - `"{{ .secrets.secretName }}"` -
- **セレクター** - - オプション - - リスト - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: 提供された場合、すべてのログに含まれる共通属性。ログ項目で同じ属性が指定されている場合は、共通の定義が上書きされます。 - * **logs**: ログデータのリスト。 リクエストごとに許可されるログの最大数は 100 であることに注意してください。 - * **LicenseKey** : ログが送信される対象アカウントを指定するNew Relicアカウント ライセンスキー。 指定しない場合、ワークフローを実行するアカウントに基づいてデフォルトのライセンスキーが想定されます。 詳細については、 [「ライセンスキー」を](/docs/apis/intro-apis/new-relic-api-keys/#license-key)参照してください。 - * **selectors** : 指定されたもののみを出力として取得するセレクター。 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 出力フィールド - - タイプ - - 例 -
- **成功** - - ブール値 - - `true` -
- **エラーメッセージ** - - ストリング - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- ワークフローの例 -
- ```yaml - name: heartbeat_newrelicIngestSendLogs - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - attributes: - colour: red - id: 1234 - logs: - - message: 'Heartbeat sendLogs Action Test Message' - attributes: - foo: bar - - message: 'HeartBeat1234' - attributes: - foo: bar - - message: 'HeartBeat12345' - attributes: - foo: bar - colour: yellow - - message: 'HeartBeat12345678' - selectors: - - name: success - expression: ".success" - ``` - - **期待される出力:** - - ```yaml - { - "success": true - } - ``` - - **ログを取得:** - - ワークフローを正常に実行した後、ワークフローを実行したアカウントでクエリを実行して、関連するログを取得できます。 - - ```sql - SELECT * FROM Log - ``` -
-
-
-
-
-
- -## NerdGraphアクション - - - - newrelic NerdGraph API に対して Graphql コマンドを実行します。コマンドはクエリまたはミューテーションのいずれかになります。 - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力 - - オプション性 - - タイプ - - 説明 - - 例 -
- **グラフQL** - - 必須 - - ストリング - - GraphQL 構文。コマンドの構築とテストにはGraphiQLを使用する必要があります - -
- **変数** - - 必須 - - map[string]any - - GraphQLステートメントで使用する任意のキーの値ペア変数。 - -
- **セレクター** - - オプション - - リスト - - 指定された唯一のものを出力として取得するセレクター。 - - ```yaml - { - "data": { - "actor": { - "user": { - "name": "" - } - } - } - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 出力 - - タイプ - - 例 -
- **データ** - - map[string]any: NerdGraphレスポンスの - - `data` - - プロパティの内容。 - - ```yaml - steps: - - name: currentUserId - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - query userId { - currentUser { - id - } - } - - name: sayHello - type: action - action: example.messaging.sayHello - version: 1 - inputs: - name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 例 - - 出力 - - イベントを取得する -
- ```json - name: testLog - - steps: - - name: logStep - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - logs: - - message: 'Hello World' - ``` - - ```yaml - { - "success": true - } - ``` - - ワークフローを実行したアカウントでクエリを実行すると、関連付けられたイベントを取得できます。 - - ```yaml - SELECT message FROM Log WHERE allColumnSearch('Hello World', insensitive: true) SINCE 30 minutes ago - ``` -
-
-
-
-
-
- -## クエリアクション - - - - NerdGraph API を介してクロスアカウント NRQL クエリを実行します。 - - - - - 入力 - - - - 出力 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力 - - オプション性 - - タイプ - - 説明 - - 例 -
- **クエリ** - - 必須 - - ストリング - - NRQL クエリ ステートメント。 - -
- **アカウント ID** - - オプション - - intのリスト - - **New Relic Account ID** - - \[New Relic アカウント ID]入力は、クエリが実行されるターゲット アカウントを指定できるターゲット ID のリストです。この値が入力として提供されない場合、クエリはワークフローの実行アカウントに関連付けられたアカウントに対して自動的に実行されます。 - -
- **セレクター** - - オプション - - リスト - - 指定された唯一のものを出力として取得するセレクター。 - - ```json - steps: - - name: queryForLog - type: action - action: newrelic.nrdb.query - version: 1 - inputs: - accountIds: [12345] - query: FROM Log SELECT * WHERE message LIKE 'DEMO%' - selectors: - - name: resultsAsString - expression: '.results | tostring' - ``` -
-
- - - - - - - - - - - - - - - - - - - - -
- 出力 - - タイプ - - 例 -
- **results** - - : クエリの結果を含むオブジェクトの配列。 - - - - ```yaml - { - results=[ - { message=[INFO] - Workflow: test has ended, messageId=39af98 }, - { message=[INFO] - Workflow: test - Step query has started, messageId=649c612 }, - ... - ] - } - ``` -
-
-
-
-
-
- -## 通知アクション - - - - Slackなどの宛先と統合されたチャネルにメッセージを送信します - - - - - 入力 - - - - 出力 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力 - - オプション性 - - タイプ - - 説明 - - 例 -
- **タイプ** - - 必須 - - ストリング - - NewRelicの宛先の種類 - - `slack` -
- **宛先ID** - - 必須 - - 弦 - - NewRelic の宛先に関連付けられた DestinationId。 - - `123e4567-e89b-12d3-a456-426614174000` -
- **パラメーター** - - 必須 - - マップ - - 選択した宛先タイプに通知を送信するために必要なフィールド。 - - `{\"channel\": \"${{ YOUR_CHANNEL }}\", \"text\": \"Enter your text here\"}` -
- **セレクター** - - オプション - - リスト - - 指定された唯一のものを出力として取得するセレクター。 - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 出力 - - タイプ - - 例 -
- 成功 - - ブール値 - - `true/false` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx b/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx deleted file mode 100644 index 46c4af9f971..00000000000 --- a/src/i18n/content/jp/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx +++ /dev/null @@ -1,634 +0,0 @@ ---- -title: ユーティリティアクション -tags: - - workflow automation - - workflow - - workflow automation actions - - utility actions -metaDescription: A list of available utility actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - -このページでは、ワークフロー自動化アクション カタログで使用できるユーティリティ アクションのリファレンスを提供します。これらのアクションを使用すると、ワークフロー定義で一般的なデータ変換およびユーティリティ操作を実行できます。 - -## ユーティリティアクション - - - - このアクションは、エポックタイムスタンプを日付/時刻に変換するために使用されます。参照可能なもの: - - * [https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - * [https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT\_IDS](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS) - - 詳細については[fromEpochを](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)参照してください。 - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力 - - オプション性 - - タイプ - - 説明 -
- **タイムスタンプ** - - 必須 - - int - - エポックタイムスタンプを表す整数。UNIXエポックは1970年1月1日午前0時(UTC)からの秒数であることに注意してください。 -
- **タイムスタンプ単位** - - オプション - - ストリング - - 提供されたタイムスタンプの単位を表す文字列。許容値: SECONDS、MILLISECONDS(デフォルト) -
- **タイムゾーンID** - - オプション - - ストリング - - 希望する日付/時刻のタイムゾーンを表す文字列。デフォルト: UTC -
- **パターン** - - オプション - - ストリング - - 希望する日時のパターンを表す文字列。デフォルト: ISO-8601 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- フィールド - - オプション性 - - データ型 - - 説明 -
- **日付** - - 必須 - - ストリング - - 日付の文字列表現。 -
- **時間** - - 必須 - - ストリング - - 時間の文字列表現。 -
- **データタイム** - - 必須 - - ストリング - - 日時を文字列で表現します。 -
- **タイムゾーン** - - 必須 - - マップ - - timezoneId と略語のマップ表現。 -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 例 - - ワークフロー入力 - - 出力 -
- ```yaml - name: from_epoch - - workflowInputs: - timestamp: - type: Int - timestampUnit: - type: String - timezoneId: - type: String - pattern: - type: String - - steps: - - name: epochTime - type: action - action: utils.datetime.fromEpoch - version: 1 - inputs: - timestamp: ${{ .workflowInputs.timestamp }} - timezoneId: ${{ .workflowInputs.timezoneId }} - pattern: ${{ .workflowInputs.pattern }} - timestampUnit: ${{ .workflowInputs.timestampUnit }} - ``` - - ```json - mutation { - workflowAutomationStartWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { name: "from_epoch" } - workflowInputs: [ - {key: "timestamp", value: "1738236424003"} - {key: "timestampUnit", value: "MILLISECONDS"} - {key: "pattern", value: "yyyy-mm-dd HH:SS"} - {key: "timezoneId", value: "Asia/Kolkata"} - ] - ) { - runId - } - } - ``` - - ```json - { - "date": "2025-01-30", - "time": "16:57:04.003" - "datetime": "2025-01-30 16:00", - "timezone": { - "abbreviation": "IST", - "id": "Asia/Kolkata" - } - } - ``` -
-
-
-
-
-
- - - - このアクションは、さまざまなタイプの入力 (JSON、マップ) を CSV 形式に変換するために使用されます。 - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 入力 - - オプション性 - - タイプ - - 説明 -
- **データ** - - 必須 - - どんな - - CSV に変換するデータを表す文字列。通常は JSON 文字列またはマップです。 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- フィールド - - オプション性 - - データ型 - - 説明 -
- **csv** - - 必須 - - ストリング - - 受信したデータの CSV 表現。 -
-
- - - - - - - - - - - - - - - - - - - - - -
- 例 - - ワークフロー入力 - - 出力 -
- ```json - name: nrqltocsv - - steps: - - name: queryForLog - type: action - action: newrelic.nrql.query - version: 1 - inputs: - accountIds: ['${{ .workflowInputs.accountId }}'] - query: ${{ .workflowInputs.nrql }} - - - name: csv1 - type: action - action: utils.transform.toCSV - version: 1 - inputs: - data: ${{ .steps.queryForLog.outputs.results | tostring }} - ``` - - ```json - mutation { - startWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { - name: "nrqltocsv", - } - workflowInputs: [ - {key: "accountId" value: "12345678"} - {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} - ] - ) - { runId } - } - ``` - -
-
-
-
-
-
- - - - RFC 準拠の V4 uuid を生成します。 - - - - - 入力 - - - - 出力 - - - - 例 - - - - - - - - - - - - - - - - - - - - - - -
- 入力 - - オプション性 - - データ型 - - 説明 -
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - -
- フィールド - - データ型 - - 説明 -
- **uuid** - - ストリング - -
-
- - - - - - - - - - - - - - - - - - - - -
- 例 - - ワークフロー入力 - - 出力 -
- - - 名前: generateUUID
手順: - - * 名前: generateUUID タイプ: アクション アクション: utils.uuid.generate バージョン: 1 -
- ```json - { - "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/kr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx b/src/i18n/content/kr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx deleted file mode 100644 index a0da76e89e8..00000000000 --- a/src/i18n/content/kr/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -subject: Lambda-Extension -releaseDate: '2025-08-29' -version: 2.3.24 -translationType: machine ---- - -## 결정된 - -* 문제를 해결하기 위해 Go std lib 버전을 `1.23.12` 으로 업데이트했습니다. `CVE-2025-47907` -* APM 모드: APM 모드에서 SM/SSM과 관련된 라이선스 키 문제가 해결되었으며 로그 접두사가 해결되었습니다. - -## 새로운 기능 - -* 기존 접두사에 로그 레벨 접두사 `DEBUG` 및 `INFO` 을(를) 추가했습니다. `[NR_EXT]` -* APM 모드: APM 모드에 태그가 추가되었습니다. -* APM 모드: APM 연결을 위해 호스트에 Lambda ARN 추가 -* APM 모드: 업데이트된 백오프 기간 `NEW_RELIC_HOST` -* APM 모드: APM 오류 이벤트 데이터 리팩터링 -* APM 모드: 루비 지원 추가 \ No newline at end of file diff --git a/src/i18n/content/kr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx b/src/i18n/content/kr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx deleted file mode 100644 index 89739c5b2db..00000000000 --- a/src/i18n/content/kr/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -subject: Browser agent -releaseDate: '2025-10-24' -version: 1.302.0 -downloadLink: 'https://www.npmjs.com/package/@newrelic/browser-agent' -features: - - Prepare agent to utilize v2 harvests for MFE registrations -bugs: - - User frustrations logic should be gated - - Improve accuracy in standalone AjaxRequest event start times -security: [] -translationType: machine ---- - -## v1.302.0 - -### 특징 - -#### MFE 등록을 위해 v2 수확을 활용하도록 에이전트 준비 - -새로 정의된 v2 엔드포인트 스키마를 사용하도록 등록된 디버그, 목표에 대한 수확을 처리하도록 에이전트를 업데이트합니다. 이는 클라이언트 측 사이트 및 관계 합성을 처리하고 MFE 특정 데이터를 수집하는 메커니즘 역할을 합니다. 이 기능은 로그, 페이지 액션, JavaScriptError 이벤트에 지원되지만, 공개 미리보기가 발표될 때까지는 내부 기능 플래그 뒤에 숨겨져 있습니다. - -### 버그 수정 - -#### 사용자 좌절 논리는 게이트화되어야 합니다. - -일반 이벤트 측정, 로그의 FF 게이트만 사용하여 사용자 좌절 로직을 브라우저 범위로 이동합니다. 이렇게 하면 사용자 불만과 관련된 외부 래핑 논리 및 이벤트가 실행되는 것을 방지할 수 있습니다. - -#### 독립형 AjaxRequest 이벤트 시작 시간의 정확도 향상 - -특정 독립형 AjaxRequest 이벤트 페이로드의 시작 시간이 페이로드의 첫 번째 이벤트가 아닌 페이지 원점을 기준으로 보고되는 에이전트의 문제를 조정하여 NR1에서 시각화할 때 불일치가 발생했습니다. - -## 지지 성명 - -뉴렐릭은 에이전트를 정기적으로 업그레이드하여 최신 기능과 성능 이점을 얻을 것을 권장합니다. 이전 릴리스는 지원 [종료](https://docs.newrelic.com/docs/browser/browser-monitoring/getting-started/browser-agent-eol-policy/) 시점부터 더 이상 지원되지 않습니다. 출시일은 에이전트 버전의 원래 출판일을 반영합니다. - -새로운 브라우저 에이전트 릴리스는 일정 기간 동안 작은 단계로 고객에게 출시됩니다. 이로 인해, 귀하의 계정에서 해당 릴리스에 접근할 수 있는 날짜가 원래 게시 날짜와 일치하지 않을 수 있습니다. 자세한 내용은 이 [상태 대시보드를](https://newrelic.github.io/newrelic-browser-agent-release/) 참조하세요. - -[브라우저 지원 정책](https://docs.newrelic.com/docs/browser/new-relic-browser/getting-started/compatibility-requirements-browser-monitoring/#browser-types) 에 따라, 브라우저 에이전트 v1.302.0은 다음 브라우저 및 버전 범위에 맞춰 빌드되고 테스트되었습니다: Chrome 131-141, Edge 131-141, Safari 17-26, Firefox 134-144. 모바일 장치의 경우 v1.302.0이 Android OS 16 및 iOS Safari 17-26용으로 구축 및 테스트되었습니다. \ No newline at end of file diff --git a/src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx b/src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx deleted file mode 100644 index 6a228fb3728..00000000000 --- a/src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -subject: Node API runtime -releaseDate: '2025-10-09' -version: rc1.1 -translationType: machine ---- - -### 보안 패치 - -* nodemailer에 대한 고정 취약점(GHSA-mm7p-fcc7-pg87) \ No newline at end of file diff --git a/src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-browser-runtime-release-notes/node-browser-runtime-3.0.50.mdx b/src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-browser-runtime-release-notes/node-browser-runtime-3.0.50.mdx deleted file mode 100644 index bab07a289b5..00000000000 --- a/src/i18n/content/kr/docs/release-notes/synthetics-release-notes/node-browser-runtime-release-notes/node-browser-runtime-3.0.50.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -subject: Node browser runtime -releaseDate: '2025-09-22' -version: 3.0.50 -translationType: machine ---- - -### 개량 - -* Chrome 브라우저 버전을 131에서 134로 업그레이드하세요 - -### 수정 사항 - -* Node.js 브라우저 런타임의 보안 취약점을 해결하기 위해 CVE-2025-58754와 기본 Ubuntu 취약점을 수정했습니다. \ No newline at end of file diff --git a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx b/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx deleted file mode 100644 index b9438fd5629..00000000000 --- a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx +++ /dev/null @@ -1,652 +0,0 @@ ---- -title: 커뮤니케이션 작업 -tags: - - workflow automation - - workflow - - workflow automation actions - - communication actions - - slack actions - - ms teams actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - 이 기능은 아직 개발 중이지만 꼭 사용해 보시기 바랍니다! - - 이 기능은 현재 [출시 전 정책](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy) 에 따라 미리보기 프로그램의 일부로 제공됩니다. - - -이 페이지에서는 fl.flo 자동화 작업 카탈로그에서 사용 가능한 통신 작업에 대한 포괄적인 참조를 제공합니다. 이러한 작업을 통해 Slack 채널에 메시지를 보내고, 반응을 검색하는 등 커뮤니케이션 플랫폼을 팰팍우 정의에 통합할 수 있습니다. - -## 전제 조건 - -블리자드 자동화에서 통신 작업을 사용하기 전에 다음 사항이 있는지 확인하세요. - -* 적절한 권한이 있는 Slack 작업 공간. -* 흐름 자동화에서 비밀로 구성된 Slack 봇의 의미입니다. -* 메시지를 보내고 싶은 Slack 채널에 접속합니다. - -Slack 통합을 설정하는 방법에 대한 자세한 내용은 [Slack 구성 추가를](/docs/autoflow/overview#add-the-slack-integration) 참조하세요. - -## 슬랙 동작 - - - - 선택적으로 파일을 첨부하여 Slack 채널로 메시지를 보냅니다. - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 예시 -
- **토큰** - - 필수의 - - 비밀 - - `${{ :secrets:slackToken }}` -
- **채널** - - 필수의 - - 끈 - - `my-slack-channel` -
- **텍스트** - - 필수의 - - 끈 - - `Hello World!` -
- **스레드** - - 선택 과목 - - 끈 - - `.` -
- **부착** - - 선택 과목 - - 지도 - -
- **첨부 파일 이름** - - 필수의 - - 끈 - - `file.txt` -
- **첨부 파일.내용** - - 필수의 - - 끈 - - `Hello\nWorld!` -
- - - * **token**: 사용할 Slack 봇 토큰입니다. 이것은 비밀 구문으로 전달되어야 합니다. 토큰을 설정하는 방법에 대한 지침은 [Slack 구성 추가](/docs/autoflow/overview#add-the-slack-integration) 를 참조하세요. - * **channel**: 메시지를 보낼 채널의 이름 또는 채널ID입니다. 자세한 내용은 [Slack API를](https://api.slack.com/methods/chat.postMessage#arg_channel/) 참조하세요. - * **text**: 지정된 `channel` 에 Slack에 게시할 메시지입니다. - * **threadTs**: 부모 메시지에 속하는 타임스탬프로, 스레드에서 메시지 회신을 생성하는 데 사용됩니다. - * **attachment**: 지정된 `channel` 에 메시지가 포함된 파일을 첨부할 수 있습니다. - * **attachment.filename**: Slack에 업로드된 파일의 파일 이름을 지정합니다. - * **attachment.content**: 업로드할 파일의 내용은 UTF8입니다. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 예시 -
- **스레드** - - 끈 - - `.` -
- **채널ID** - - 끈 - - `` -
- - - * **threadTs**: 메시지의 타임스탬프. 스레드에 답변을 게시하기 위해 향후 postMessage 호출에 사용될 수 있습니다. - * **channelID**: 메시지가 게시된 채널의 ID입니다. - -
- - - **예 1: Slack 채널에 메시지 게시** - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: SendMessage - - steps: - - name: send_slack_message - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: ${{ .workflowInputs.channel }} - text: ${{ .workflowInputs.text }} - ``` - - **예상 입력:** - - ```json - { - "inputs": [ - { - "key" : "channel", - "value" : "my-channel" - }, - { - "key" : "text", - "value" : "This is my message *with bold text* and `code backticks`" - } - ] - } - ``` - - **예상 출력:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
- - **예 2: 파일 첨부** - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: SendFileMessage - - steps: - - name: postCsv - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: my-channel - text: "Please find the attached file:" - attachment: - filename: 'file.txt' - content: "Hello\nWorld!" - ``` - - **예상 출력:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
-
-
-
-
-
- - - - Slack 채널에서 메시지에 대한 반응을 받아보세요. - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 예시 -
- **토큰** - - 필수의 - - 비밀 - - `${{ :secrets:slackToken }}` -
- **채널ID** - - 필수의 - - 끈 - - `C063JK1RHN1` -
- **시간 초과** - - 선택 과목 - - 정수 - - 60 -
- **스레드** - - 필수의 - - 끈 - - `.` -
- **선택기** - - 선택 과목 - - 목록 - - `[{\"name\": \"reactions\", \"expression\": \".reactions \"}]` -
- - - * **token**: 사용할 Slack 봇 토큰입니다. 이것은 비밀 구문으로 전달되어야 합니다. 토큰을 설정하는 방법에 대한 지침은 [Slack 구성 추가](/docs/autoflow/overview#add-the-slack-integration) 를 참조하세요. - * **channelID**: 메시지 반응을 얻기 위한 channelID입니다. - * **timeout**: 반응을 기다리는 시간(초)입니다. 기본값은 60초이고, 최대 허용 시간은 600초(10분)입니다. - * **threadTs**: 메시지에 속한 타임스탬프로, 해당 메시지에 대한 반응을 얻는 데 사용됩니다. - * **selectors**: 지정된 유일한 델파이를 출력으로 가져오는 선택기입니다. - -
- - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 예시 -
- **반응** - - 목록 - - `` -
- - - * **reactions**: 캡처된 모든 반응이 포함된 요소 목록이거나 시간 초과가 발생한 경우 비어 있는 목록입니다. - -
- - - **예 1: Slack에서 반응 얻기** - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: GetReactions - - steps: - - name: getReactions - type: action - action: slack.chat.getReactions - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channelID: ${{ .steps.promptUser.outputs.channelID }} - threadTs: ${{ .steps.promptUser.outputs.threadTs }} - timeout: ${{ .workflowInputs.timeout }} - selectors: ${{ .workflowInputs.selectors }} - ``` - - **예상 입력:** - - ```json - { - "inputs": [ - { - "key" : "channelID", - "value" : "C063JK1RHN1" - }, - { - "key" : "threadTs", - "value" : "1718897637.400609" - }, - { - "key" : "selectors", - "value" : "[{\"name\": \"reactions\", \"expression\": \".reactions \"}]" - } - ] - } - ``` - - **예상 출력:** - - ```json - [ - { - "name": "grinning", - "users": [ - "W222222" - ], - "count": 1 - }, - { - "name": "question", - "users": [ - "W333333" - ], - "count": 1 - } - ] - ``` - - 또는 시간이 초과된 경우: - - ```json - [] - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx b/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx deleted file mode 100644 index 7837ce4850c..00000000000 --- a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx +++ /dev/null @@ -1,1043 +0,0 @@ ---- -title: HTTP 동작 -tags: - - workflow automation - - workflow - - workflow automation actions - - HTTP actions -metaDescription: A list of available HTTP actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - 이 기능은 아직 개발 중이지만 꼭 사용해 보시기 바랍니다! - - 이 기능은 현재 [출시 전 정책](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy) 에 따라 미리보기 프로그램의 일부로 제공됩니다. - - -이 페이지에서는 fl.flo 자동화 작업 카탈로그에서 사용할 수 있는 HTTP 작업에 대한 포괄적인 참조를 제공합니다. 이러한 작업을 통해 폴리스우 정의의 일부로 외부 API 및 서비스에 대한 HTTP requests (GET, POST, PUT, DELETE)을 수행할 수 있습니다. - -## 전제 조건 - -블리자드 자동화에서 HTTP 작업을 사용하기 전에 다음 사항이 있는지 확인하세요. - -* 부채, 목표 API 포인트 포인트 URL. -* 필요한 인증 자격 증명(API 키, 토큰 등) -* API 요청/응답 형식에 대한 이해. - - - HTTP 액션은 모든 헤더 값에 대해 비밀 구문을 지원하므로 API 키와 같은 민감한 데이터를 안전하게 전달할 수 있습니다. 자세한 내용은 [비밀 관리를](/docs/infrastructure/host-integrations/installation/secrets-management/) 참조하세요. - - -## HTTP 동작 - - - - API 엔드포인트에서 데이터를 검색하려면 HTTP GET 호출을 수행합니다. - - - 이는 모든 헤더 값에 대한 비밀 구문을 지원합니다. - - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 설명 -
- **URL** - - 필수의 - - 문자열 - - 요청에 대한 타겟 URL입니다. 계획에는 다음이 포함되어야 합니다. - - `https://example.com` -
- **url 매개변수** - - 선택 과목 - - 지도 - - URL에 추가하려면 쿼리를 수행해야 합니다. 문자열화된 JSON 객체를 사용합니다. -
- **헤더** - - 선택 과목 - - 지도 - - 요청에 추가할 헤더입니다. 문자열화된 JSON 객체를 사용합니다. -
- **선택기** - - 선택 과목 - - 목록 - - 지정된 음색만 출력으로 가져오는 선택기입니다. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 설명 -
- **응답 본문** - - 문자열 - - 응답의 본문. -
- **상태 코드** - - 정수 - - 응답의 HTTP 상태 코드입니다. -
-
- - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: httpGetTest - description: 'Performs an HTTP GET request to retrieve data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - steps: - - name: query - type: action - action: http.get - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - next: end - ``` - - **입력 예시:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}" - } - ``` - - **출력 예시:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - API 엔드포인트에 데이터를 전송하기 위해 HTTP POST 호출을 수행합니다. - - - 이는 모든 헤더 값에 대한 비밀 구문을 지원합니다. - - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 설명 -
- **URL** - - 필수의 - - 문자열 - - 요청에 대한 타겟 URL입니다. 계획에는 다음이 포함되어야 합니다. - - `https://example.com` -
- **url 매개변수** - - 선택 과목 - - 지도 - - URL에 추가하려면 쿼리를 수행해야 합니다. 문자열화된 JSON 객체를 사용합니다. -
- **헤더** - - 선택 과목 - - 지도 - - 요청에 추가할 헤더입니다. 문자열화된 JSON 객체를 사용합니다. -
- **몸** - - 선택 과목 - - 문자열 - - 요청 본문. -
- **선택기** - - 선택 과목 - - 목록 - - 지정된 음색만 출력으로 가져오는 선택기입니다. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 설명 -
- **응답 본문** - - 문자열 - - 응답의 본문. -
- **상태 코드** - - 정수 - - 응답의 HTTP 상태 코드입니다. -
-
- - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: httpPostTest - description: 'Performs an HTTP POST request to send data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - steps: - - name: query - type: action - action: http.post - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - next: end - ``` - - **입력 예시:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}" - } - ``` - - **출력 예시:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - API 엔드포인트에서 데이터를 업데이트하기 위해 HTTP PUT 요청을 수행합니다. - - - 예를 들어 `Api-Key` 헤더와 같이 민감한 데이터를 입력에 전달해야 하는 경우 [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph 뮤테이션을 통해 저장된 값을 사용할 수 있습니다. - - 예시: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 설명 -
- **URL** - - 필수의 - - 문자열 - - 요청에 대한 타겟 URL입니다. URL에는 스키마(예: https:// 또는 http://)가 포함되어야 합니다. 예: - - `https://example.com` -
- **url 매개변수** - - 선택 과목 - - 지도 - - URL에 추가하려면 쿼리를 수행해야 합니다. 문자열화된 JSON 객체를 사용합니다. -
- **헤더** - - 선택 과목 - - 지도 - - 요청에 추가할 헤더입니다. 문자열화된 JSON 객체를 사용합니다. -
- **몸** - - 선택 과목 - - 문자열 - - 요청 본문. -
- **선택기** - - 선택 과목 - - 목록 - - 지정된 음색만 출력으로 가져오는 선택기입니다. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 설명 -
- **응답 본문** - - 문자열 - - 응답의 본문. -
- **상태 코드** - - 정수 - - 응답의 HTTP 상태 코드입니다. -
-
- - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: httpPutTest - description: 'Performs an HTTP PUT request to update data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.put - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **입력 예시:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **출력 예시:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - API 엔드포인트에서 데이터를 제거하기 위해 HTTP DELETE 요청을 수행합니다. - - - 예를 들어 `Api-Key` 헤더와 같이 민감한 데이터를 입력에 전달해야 하는 경우 [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph 뮤테이션을 통해 저장된 값을 사용할 수 있습니다. - - 예시: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 설명 -
- **URL** - - 필수의 - - 문자열 - - 요청에 대한 타겟 URL입니다. URL에는 스키마(예: https:// 또는 http://)가 포함되어야 합니다. 예: - - `https://example.com` -
- **url 매개변수** - - 선택 과목 - - 지도 - - URL에 추가하려면 쿼리를 수행해야 합니다. 문자열화된 JSON 객체를 사용합니다. -
- **헤더** - - 선택 과목 - - 지도 - - 요청에 추가할 헤더입니다. 문자열화된 JSON 객체를 사용합니다. -
- **선택기** - - 선택 과목 - - 목록 - - 지정된 음색만 출력으로 가져오는 선택기입니다. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 설명 -
- **응답 본문** - - 문자열 - - 응답의 본문. -
- **상태 코드** - - 정수 - - 응답의 HTTP 상태 코드입니다. -
-
- - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: httpDeleteTest - description: 'Performs an HTTP DELETE request to remove data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.delete - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **입력 예시:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **출력 예시:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx b/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx deleted file mode 100644 index ecfd8e7fba4..00000000000 --- a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx +++ /dev/null @@ -1,1210 +0,0 @@ ---- -title: 뉴렐릭 액션 -tags: - - workflow automation - - workflow - - workflow automation actions - - New relic actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - 이 기능은 아직 개발 중이지만 꼭 사용해 보시기 바랍니다! - - 이 기능은 현재 [출시 전 정책](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy) 에 따라 미리보기 프로그램의 일부로 제공됩니다. - - -이 페이지는 폴리스우 자동화 작업 카탈로그에서 사용할 수 있는 뉴렐릭 작업에 대한 포괄적인 참조를 제공합니다. 이러한 작업을 사용하면 커스텀 대시보드 및 로그 보내기, NerdGraph 쿼리 실행, NRQL 쿼리 실행, 공지 보내기 등의 워크플로우 정의에 워크플로우 정의에 통합할 수 있습니다. - -## 전제 조건 - -블로우 자동화에서 뉴렐릭 작업을 사용하기 전에 다음 사항이 있는지 확인하세요. - -* 적절한 권한이 있는 뉴렐릭 계정. -* 뉴렐릭 클러스터 키(데이터를 다른 계정으로 보내는 경우). -* 사용하려는 특정 뉴렐릭 서비스에 필요한 권한입니다. - -블루렐릭 계정 키를 생성하고 관리하는 방법에 대한 자세한 내용은 [볼륨 키를](/docs/apis/intro-apis/new-relic-api-keys/#license-key) 참조하세요. - -## 사용 가능한 뉴렐릭 작업 - -카테고리별 모든 뉴렐릭 작업에 대한 빠른 참조: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 범주 - - 동작 - - 목적 -
- **데이터 수집** - - [맞춤형 대시보드 보내기](#newrelicingestsendevents) - - 커스텀 대시보드를 뉴렐릭에게 보내세요. -
- **데이터 수집** - - [로그 보내기](#newrelicingestsendlogs) - - 뉴렐릭에게 로그인 데이터를 보냅니다. -
- **너드그래프** - - [GraphQL 쿼리 또는 뮤테이션 실행](#newrelicnerdgraphexecute) - - NerdGraph API에 대해 GraphQL 명령을 실행합니다. -
- **질문** - - [NRDB 쿼리 실행](#newrelicnrdbquery) - - 여러 계정의 NRQL 쿼리를 실행합니다. -
- **알림** - - [공지 보내기](#newrelicnotificationsend) - - 공지를 뉴렐릭 목적지로 보냅니다. -
- -## 데이터 수집 작업 - - - - 사용자 정의 대시보드를 뉴렐릭에게 보냅니다. - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 예시 -
- **속성** - - 선택 과목 - - 지도 - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **이벤트** - - 필수의 - - 목록 - - `"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]` -
- **라이센스 키** - - 선택 과목 - - 끈 - - `"{{ .secrets.secretName }}"` -
- **선택기** - - 선택 과목 - - 목록 - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: 제공되는 경우 모든 이벤트에 포함되는 공통 속성입니다. 필요한 경우 각 이벤트 항목을 병합하면 이벤트 항목이 일반적인 정의를 재정의합니다. - * **events**: 이벤트 데이터 목록입니다. 이벤트에는 사용자 정의 대시보드 유형을 나타내는 `eventType` 필드를 사용해야 하며 요청당 허용되는 최대 이벤트는 100개입니다. - * **LicenseKey**: 이벤트가 전송되는 구간, 목표 계정을 지정하는 뉴렐릭 계정 볼륨 키입니다. 이 값을 제공하지 않을 경우, 해당 워크플로우를 실행하는 계정을 기준으로 기본 볼륨 키를 가정합니다. - * **selectors**: 지정된 소스만 출력으로 가져오는 선택기입니다. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 예시 -
- **성공** - - 부울 - - `true` -
- **오류 메시지** - - 끈 - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: heartbeat_newrelicIngestSendEvents - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendEvents - version: 1 - inputs: - attributes: - colour: red - id: 1234 - events: - - eventType: HeartBeat - test: "OK" - attributes: - foo: bar - - eventType: HeartBeat1234 - test: "OK1234" - attributes: - foo: bar - - eventType: HeartBeat12345 - test: "OK12345" - attributes: - foo: bar - colour: yellow - - eventType: HeartBeat12345678 - test: "OK12345678" - selectors: - - name: success - expression: ".success" - ``` - - **예상 출력:** - - ```yaml - { - "success": true - } - ``` - - **이벤트 검색:** - - 워크플로우를 성공적으로 실행한 후 해당 이벤트를 실행한 계정에서 쿼리를 실행하면 관련 이벤트를 검색할 수 있습니다. - - ```sql - SELECT * FROM HeartBeat - ``` -
-
-
-
-
-
- - - - New Relic에 로그 보내기 - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 필드 - - 선택성 - - 유형 - - 예시 -
- **속성** - - 선택 과목 - - 지도 - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **로그** - - 필수의 - - 목록 - - `"[{\"message\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"message\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"` -
- **라이센스 키** - - 선택 과목 - - 끈 - - `"{{ .secrets.secretName }}"` -
- **선택기** - - 선택 과목 - - 목록 - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: 제공되는 경우 모든 로그에 포함되는 공통 속성입니다. 로그 항목이 동일한 속성을 지정하는 경우 일반적인 정의가 재정의됩니다. - * **logs**: 로그인 데이터 목록입니다. 요청당 허용되는 최대 로그 수는 100개입니다. - * **LicenseKey**: 로그가 전송되는 구간, 주요 계정을 지정하는 뉴렐릭 계정 볼륨 키입니다. 제공하지 않을 경우, 해당 워크플로우를 실행하는 계정을 기준으로 기본 볼륨 키를 가정합니다. 자세한 내용은 [라이선스 키를](/docs/apis/intro-apis/new-relic-api-keys/#license-key) 참조하세요. - * **selectors**: 지정된 소스만 출력으로 가져오는 선택기입니다. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 출력 필드 - - 유형 - - 예시 -
- **성공** - - 부울 - - `true` -
- **오류 메시지** - - 끈 - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- 워크플로 예 -
- ```yaml - name: heartbeat_newrelicIngestSendLogs - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - attributes: - colour: red - id: 1234 - logs: - - message: 'Heartbeat sendLogs Action Test Message' - attributes: - foo: bar - - message: 'HeartBeat1234' - attributes: - foo: bar - - message: 'HeartBeat12345' - attributes: - foo: bar - colour: yellow - - message: 'HeartBeat12345678' - selectors: - - name: success - expression: ".success" - ``` - - **예상 출력:** - - ```yaml - { - "success": true - } - ``` - - **로그 검색:** - - 워크플로우를 성공적으로 실행한 후 해당 로그플로우를 실행한 계정에서 쿼리를 실행하여 관련 로그플로우를 검색할 수 있습니다. - - ```sql - SELECT * FROM Log - ``` -
-
-
-
-
-
- -## NerdGraph 작업 - - - - newrelic NerdGraph API에 대해 Graphql 명령을 실행합니다. 명령은 쿼리이거나 뮤테이션일 수 있습니다. - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 - - 선택성 - - 유형 - - 설명 - - 예시 -
- **그래프QL** - - 필수의 - - 끈 - - GraphQL 구문. 명령을 빌드하고 테스트하려면 GraphiQL을 사용해야 합니다. - -
- **변수** - - 필수의 - - map[string]any - - GraphQL 명령문과 함께 사용할 핵심 가치 쌍 변수입니다. - -
- **선택기** - - 선택 과목 - - 목록 - - 지정된 유일한 델파이를 출력으로 가져오는 선택기입니다. - - ```yaml - { - "data": { - "actor": { - "user": { - "name": "" - } - } - } - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 산출 - - 유형 - - 예시 -
- **data** - - map[string]any: NerdGraph 응답의 - - `data` - - 속성 내용입니다. - - ```yaml - steps: - - name: currentUserId - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - query userId { - currentUser { - id - } - } - - name: sayHello - type: action - action: example.messaging.sayHello - version: 1 - inputs: - name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 예시 - - 산출 - - 이벤트 검색 -
- ```json - name: testLog - - steps: - - name: logStep - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - logs: - - message: 'Hello World' - ``` - - ```yaml - { - "success": true - } - ``` - - 해당 이벤트를 실행한 계정으로 쿼리를 실행하면 해당 이벤트를 조회할 수 있습니다. - - ```yaml - SELECT message FROM Log WHERE allColumnSearch('Hello World', insensitive: true) SINCE 30 minutes ago - ``` -
-
-
-
-
-
- -## 쿼리 작업 - - - - NerdGraph API를 통해 교차 계정 NRQL 쿼리를 실행합니다. - - - - - 입력 - - - - 출력 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 - - 선택성 - - 유형 - - 설명 - - 예시 -
- **질문** - - 필수의 - - 끈 - - NRQL 쿼리 문. - -
- **계정 ID** - - 선택 과목 - - int 목록 - - **New Relic Account ID** - - \[뉴렐릭 계정 ID] 입력은 쿼리가 실행되는 퀴, 목표 계정을 지정할 수 있는 롤리, 목표 ID 목록입니다. 이 값을 입력으로 제공하지 않으면 쿼리는 자동으로 RPG우의 실행 계정과 연결된 계정에 대해 실행됩니다. - -
- **선택기** - - 선택 과목 - - 목록 - - 지정된 유일한 델파이를 출력으로 가져오는 선택기입니다. - - ```json - steps: - - name: queryForLog - type: action - action: newrelic.nrdb.query - version: 1 - inputs: - accountIds: [12345] - query: FROM Log SELECT * WHERE message LIKE 'DEMO%' - selectors: - - name: resultsAsString - expression: '.results | tostring' - ``` -
-
- - - - - - - - - - - - - - - - - - - - -
- 산출 - - 유형 - - 예시 -
- **results** - - : 쿼리 결과를 포함하는 객체의 목록입니다. - - - - ```yaml - { - results=[ - { message=[INFO] - Workflow: test has ended, messageId=39af98 }, - { message=[INFO] - Workflow: test - Step query has started, messageId=649c612 }, - ... - ] - } - ``` -
-
-
-
-
-
- -## 공지사항 - - - - 예를 들어 Slack과 같은 대상과 통합된 채널로 메시지를 보냅니다. - - - - - 입력 - - - - 출력 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 - - 선택성 - - 유형 - - 설명 - - 예시 -
- **유형** - - 필수의 - - 끈 - - Newrelic 목적지 유형 - - `slack` -
- **목적지 ID** - - 필수의 - - 문자열 - - Newrelic 대상과 연관된 DestinationId입니다. - - `123e4567-e89b-12d3-a456-426614174000` -
- **매개변수** - - 필수의 - - 지도 - - 선택한 대상 유형으로 공지를 보내는 데 필요한 필드입니다. - - `{\"channel\": \"${{ YOUR_CHANNEL }}\", \"text\": \"Enter your text here\"}` -
- **선택기** - - 선택 과목 - - 목록 - - 지정된 유일한 델파이를 출력으로 가져오는 선택기입니다. - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 산출 - - 유형 - - 예시 -
- 성공 - - 부울 - - `true/false` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx b/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx deleted file mode 100644 index 2dde4295328..00000000000 --- a/src/i18n/content/kr/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx +++ /dev/null @@ -1,634 +0,0 @@ ---- -title: 유틸리티 작업 -tags: - - workflow automation - - workflow - - workflow automation actions - - utility actions -metaDescription: A list of available utility actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - -이 페이지에서는 fl.flo 자동화 작업 카탈로그에서 사용 가능한 유틸리티 작업에 대한 참조를 제공합니다. 이러한 작업을 통해 폴리스우 정의에서 일반적인 데이터 변환 및 유틸리티 작업을 수행할 수 있습니다. - -## 유틸리티 작업 - - - - 이 작업은 에포크 타임스탬프를 날짜/시간으로 변환하는 데 사용됩니다. 가능한 참조: - - * [https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - * [https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT\_IDS](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS) - - 자세한 내용은 [Epoch를](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) 참조하세요. - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 - - 선택성 - - 유형 - - 설명 -
- **타임스탬프** - - 필수의 - - 정수 - - 에포크 타임스탬프를 나타내는 정수입니다. 참고로, UNIX 에포크는 1970년 1월 1일 자정 UTC(00:00) 이후의 초 수입니다. -
- **타임스탬프 단위** - - 선택 과목 - - 끈 - - 제공된 타임스탬프의 단위를 나타내는 문자열입니다. 허용 가능한 값: SECONDS, MILLISECONDS(기본값) -
- **시간대 ID** - - 선택 과목 - - 끈 - - 원하는 날짜/시간의 시간대를 나타내는 문자열, 기본값: UTC -
- **pattern** - - 선택 과목 - - 끈 - - 원하는 날짜/시간 패턴을 나타내는 문자열, 기본값: ISO-8601 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 들 - - 선택성 - - 데이터 유형 - - 설명 -
- **날짜** - - 필수의 - - 끈 - - 날짜의 문자열 표현입니다. -
- **시간** - - 필수의 - - 끈 - - 시간을 나타내는 문자열입니다. -
- **날짜 시간** - - 필수의 - - 끈 - - datetime의 문자열 표현입니다. -
- **시간대** - - 필수의 - - 지도 - - 시간대 ID와 약어를 지도로 표현한 것입니다. -
-
- - - - - - - - - - - - - - - - - - - - - - -
- 예시 - - 흐름흐름 입력 - - 출력 -
- ```yaml - name: from_epoch - - workflowInputs: - timestamp: - type: Int - timestampUnit: - type: String - timezoneId: - type: String - pattern: - type: String - - steps: - - name: epochTime - type: action - action: utils.datetime.fromEpoch - version: 1 - inputs: - timestamp: ${{ .workflowInputs.timestamp }} - timezoneId: ${{ .workflowInputs.timezoneId }} - pattern: ${{ .workflowInputs.pattern }} - timestampUnit: ${{ .workflowInputs.timestampUnit }} - ``` - - ```json - mutation { - workflowAutomationStartWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { name: "from_epoch" } - workflowInputs: [ - {key: "timestamp", value: "1738236424003"} - {key: "timestampUnit", value: "MILLISECONDS"} - {key: "pattern", value: "yyyy-mm-dd HH:SS"} - {key: "timezoneId", value: "Asia/Kolkata"} - ] - ) { - runId - } - } - ``` - - ```json - { - "date": "2025-01-30", - "time": "16:57:04.003" - "datetime": "2025-01-30 16:00", - "timezone": { - "abbreviation": "IST", - "id": "Asia/Kolkata" - } - } - ``` -
-
-
-
-
-
- - - - 이 작업은 다양한 유형의 입력(JSON, 맵)을 CSV 형식으로 변환하는 데 사용됩니다. - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 입력 - - 선택성 - - 유형 - - 설명 -
- **data** - - 필수의 - - 어느 - - CSV로 변환할 데이터를 나타내는 문자열로, 일반적으로 JSON 문자열이나 맵입니다. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- 들 - - 선택성 - - 데이터 유형 - - 설명 -
- **CSV** - - 필수의 - - 끈 - - 수신된 데이터의 CSV 표현입니다. -
-
- - - - - - - - - - - - - - - - - - - - - -
- 예시 - - 흐름흐름 입력 - - 출력 -
- ```json - name: nrqltocsv - - steps: - - name: queryForLog - type: action - action: newrelic.nrql.query - version: 1 - inputs: - accountIds: ['${{ .workflowInputs.accountId }}'] - query: ${{ .workflowInputs.nrql }} - - - name: csv1 - type: action - action: utils.transform.toCSV - version: 1 - inputs: - data: ${{ .steps.queryForLog.outputs.results | tostring }} - ``` - - ```json - mutation { - startWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { - name: "nrqltocsv", - } - workflowInputs: [ - {key: "accountId" value: "12345678"} - {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} - ] - ) - { runId } - } - ``` - -
-
-
-
-
-
- - - - RFC 규격에 맞는 V4 UUID를 생성합니다. - - - - - 입력 - - - - 출력 - - - - 예시 - - - - - - - - - - - - - - - - - - - - - - -
- 입력 - - 선택성 - - 데이터 유형 - - 설명 -
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - -
- 들 - - 데이터 유형 - - 설명 -
- **uuid** - - 끈 - -
-
- - - - - - - - - - - - - - - - - - - - -
- 예시 - - 흐름흐름 입력 - - 출력 -
- - - 이름: generateUUID
단계: - - * 이름: generateUUID 유형: 작업 작업: utils.uuid.generate 버전: 1 -
- ```json - { - "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/pt/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx b/src/i18n/content/pt/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx deleted file mode 100644 index 409c5151338..00000000000 --- a/src/i18n/content/pt/docs/release-notes/lambda-extension-release-notes/lambda-extension-2.3.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -subject: Lambda-Extension -releaseDate: '2025-08-29' -version: 2.3.24 -translationType: machine ---- - -## Fixo - -* Atualizei a versão da biblioteca padrão do Go para `1.23.12` para resolver `CVE-2025-47907` -* Modo APM: Problema com a chave de licença do SM/SSM resolvido no Modo APM e prefixo de log corrigido. - -## Novo recurso - -* Adicionados os prefixos de nível de log `DEBUG` e `INFO` ao prefixo existente. `[NR_EXT]` -* Modo APM : Adicionada tag ao Modo APM -* Modo APM: ARN do Lambda adicionado ao host para conexão APM. -* Modo APM: Duração de espera atualizada para `NEW_RELIC_HOST` -* Modo APM : Refatorar dados de evento de erro APM -* Modo APM: Adicionado suporte a Ruby \ No newline at end of file diff --git a/src/i18n/content/pt/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx b/src/i18n/content/pt/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx deleted file mode 100644 index c04e64bba54..00000000000 --- a/src/i18n/content/pt/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.302.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -subject: Browser agent -releaseDate: '2025-10-24' -version: 1.302.0 -downloadLink: 'https://www.npmjs.com/package/@newrelic/browser-agent' -features: - - Prepare agent to utilize v2 harvests for MFE registrations -bugs: - - User frustrations logic should be gated - - Improve accuracy in standalone AjaxRequest event start times -security: [] -translationType: machine ---- - -## v1.302.0 - -### Recurso - -#### Prepare o agente para utilizar as colheitas v2 para registros MFE. - -Atualize o agente para lidar com as coletas de destinos registrados usando os esquemas endpoint v2 recém-definidos. Isso servirá como mecanismo para lidar com a síntese de entidades e relacionamentos do lado do cliente, bem como para ingerir dados específicos do MFE. Isso será compatível com os eventos Log, PageAction e JavaScriptError, mas atualmente está restrito a flags internas de recurso até que uma prévia pública seja anunciada. - -### Correções de bugs - -#### a lógica de frustrações do usuário deve ser bloqueada - -Mova a lógica de frustrações do usuário para o escopo do navegador apenas com FF gate na instrumentação genérica de eventos. Isso deve evitar a execução de lógica de encapsulamento desnecessária e eventos relacionados a frustrações do usuário. - -#### Melhorar a precisão dos horários de início de eventos AjaxRequest independentes - -Corrige um problema no agente em que os horários de início de certos carregamentos de eventos AjaxRequest independentes eram relatados em relação à origem da página, em vez de em relação ao primeiro evento no carregamento, causando discrepâncias na visualização em NR1. - -## Declaração de apoio - -New Relic recomenda que você atualize o agente regularmente para garantir que esteja obtendo os benefícios mais recentes de recursos e desempenho. Versões mais antigas não terão mais suporte quando chegarem [ao fim de sua vida útil](https://docs.newrelic.com/docs/browser/browser-monitoring/getting-started/browser-agent-eol-policy/). As datas de lançamento refletem a data de publicação original da versão do agente. - -Novos lançamentos de agente do browser são disponibilizados aos clientes em pequenas etapas ao longo de um período de tempo. Por esse motivo, a data em que o lançamento fica acessível à sua conta pode não corresponder à data de publicação original. Consulte este [dashboard de status](https://newrelic.github.io/newrelic-browser-agent-release/) para obter mais informações. - -Em conformidade com nossa [política de suporte a navegadores](https://docs.newrelic.com/docs/browser/new-relic-browser/getting-started/compatibility-requirements-browser-monitoring/#browser-types), a versão 1.302.0 do agente do browser foi desenvolvida e testada nos seguintes navegadores e faixas de versão: Chrome 131-141, Edge 131-141, Safari 17-26 e Firefox 134-144. Para dispositivos móveis, a versão 1.302.0 foi compilada e testada para Android OS 16 e iOS Safari 17-26. \ No newline at end of file diff --git a/src/i18n/content/pt/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx b/src/i18n/content/pt/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx deleted file mode 100644 index 07f26d2036f..00000000000 --- a/src/i18n/content/pt/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-rc1.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -subject: Node API runtime -releaseDate: '2025-10-30' -version: rc1.2 -translationType: machine ---- - -### Patches de segurança - -* Vulnerabilidades corrigidas (CVE-2025-56200) para o validador. \ No newline at end of file diff --git a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx b/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx deleted file mode 100644 index eeb440445ab..00000000000 --- a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/communication.mdx +++ /dev/null @@ -1,652 +0,0 @@ ---- -title: Ações de comunicação -tags: - - workflow automation - - workflow - - workflow automation actions - - communication actions - - slack actions - - ms teams actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Ainda estamos trabalhando nesse recurso, mas adoraríamos que você experimentasse! - - Atualmente, esse recurso é fornecido como parte de um programa de visualização de acordo com nossas [políticas de pré-lançamento](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Esta página fornece uma referência completa para as ações de comunicação disponíveis no catálogo de ações de automação de fluxo de trabalho. Essas ações permitem que você integre a plataforma de comunicação às suas definições de fluxo de trabalho, incluindo o envio de mensagens para canais do Slack, a recuperação de reações e muito mais. - -## Pré-requisitos - -Antes de usar ações de comunicação na automação de fluxo de trabalho, certifique-se de ter: - -* Um espaço de trabalho do Slack com as permissões apropriadas. -* Um token de bot do Slack configurado como um segredo na automação de fluxo de trabalho. -* Acesso aos canais do Slack onde você deseja enviar mensagens. - -Consulte a seção [Adicionar configuração do Slack](/docs/autoflow/overview#add-the-slack-integration) para obter informações sobre como configurar a integração com o Slack. - -## Ações do Slack - - - - Envia uma mensagem para um canal do Slack, com a opção de anexar um arquivo. - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Exemplo -
- **token** - - Obrigatório - - segredo - - `${{ :secrets:slackToken }}` -
- **canal** - - Obrigatório - - corda - - `my-slack-channel` -
- **texto** - - Obrigatório - - corda - - `Hello World!` -
- **threadTs** - - Opcional - - corda - - `.` -
- **anexo** - - Opcional - - map - -
- **anexo.nome do arquivo** - - Obrigatório - - corda - - `file.txt` -
- **anexo.conteúdo** - - Obrigatório - - corda - - `Hello\nWorld!` -
- - - * **token**: O token do bot do Slack a ser usado. Isso deve ser passado como uma sintaxe secreta. Consulte a seção [Adicionar configuração do Slack](/docs/autoflow/overview#add-the-slack-integration) para obter instruções sobre como configurar um token. - * **channel**: O nome do canal, ou um ID de canal, para enviar a mensagem. Consulte [a API do Slack](https://api.slack.com/methods/chat.postMessage#arg_channel/) para obter mais informações. - * **text**: A mensagem a ser postada no Slack no `channel` especificado. - * **threadTs**: carimbo de data/hora pertencente à mensagem principal, usado para criar uma resposta em uma thread. - * **attachment**: Permite anexar um arquivo com uma mensagem no `channel` especificado. - * **attachment.filename**: Especifique o nome do arquivo que será carregado no Slack. - * **attachment.content**: O conteúdo do arquivo a ser carregado está em UTF-8. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Exemplo -
- **threadTs** - - corda - - `.` -
- **ID do canal** - - corda - - `` -
- - - * **threadTs**: carimbo de data/hora da mensagem. Pode ser usado em futuras chamadas postMessage para postar uma resposta em um tópico. - * **channelID**: ID do canal onde a mensagem foi postada. - -
- - - **Exemplo 1: Publicar uma mensagem em um canal do Slack** - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: SendMessage - - steps: - - name: send_slack_message - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: ${{ .workflowInputs.channel }} - text: ${{ .workflowInputs.text }} - ``` - - **Entradas esperadas:** - - ```json - { - "inputs": [ - { - "key" : "channel", - "value" : "my-channel" - }, - { - "key" : "text", - "value" : "This is my message *with bold text* and `code backticks`" - } - ] - } - ``` - - **Resultado esperado:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
- - **Exemplo 2: Anexar um arquivo** - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: SendFileMessage - - steps: - - name: postCsv - type: action - action: slack.chat.postMessage - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channel: my-channel - text: "Please find the attached file:" - attachment: - filename: 'file.txt' - content: "Hello\nWorld!" - ``` - - **Resultado esperado:** - - ```json - [ - { - "threadTs": "1718897637.400609", - "channelID": "C063JK1RHN1" - } - ] - ``` -
-
-
-
-
-
- - - - Receba uma reação a uma mensagem de um canal do Slack. - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Exemplo -
- **token** - - Obrigatório - - segredo - - `${{ :secrets:slackToken }}` -
- **ID do canal** - - Obrigatório - - corda - - `C063JK1RHN1` -
- **Tempo esgotado** - - Opcional - - int - - 60 -
- **threadTs** - - Obrigatório - - corda - - `.` -
- **seletores** - - Opcional - - list - - `[{\"name\": \"reactions\", \"expression\": \".reactions \"}]` -
- - - * **token**: O token do bot do Slack a ser usado. Isso deve ser passado como uma sintaxe secreta. Consulte a seção [Adicionar configuração do Slack](/docs/autoflow/overview#add-the-slack-integration) para obter instruções sobre como configurar um token. - * **channelID**: O ID do canal para receber as reações às mensagens. - * **timeout**: O tempo em segundos que se deve esperar por qualquer reação. O valor padrão é 60 segundos, o máximo permitido é 600 segundos (10 minutos). - * **threadTs**: carimbo de data/hora pertencente à mensagem, usado para obter a reação a essa mensagem. - * **selectors**: Os seletores para obter apenas o parâmetro especificado como saída. - -
- - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Exemplo -
- **reações** - - list - - `` -
- - - * **reactions**: Lista de elementos com todas as reações registradas ou uma lista vazia caso tenha ocorrido um tempo limite. - -
- - - **Exemplo 1: Slack recebe reações** - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: GetReactions - - steps: - - name: getReactions - type: action - action: slack.chat.getReactions - version: 1 - inputs: - token: ${{ :secrets:slackToken }} - channelID: ${{ .steps.promptUser.outputs.channelID }} - threadTs: ${{ .steps.promptUser.outputs.threadTs }} - timeout: ${{ .workflowInputs.timeout }} - selectors: ${{ .workflowInputs.selectors }} - ``` - - **Entradas esperadas:** - - ```json - { - "inputs": [ - { - "key" : "channelID", - "value" : "C063JK1RHN1" - }, - { - "key" : "threadTs", - "value" : "1718897637.400609" - }, - { - "key" : "selectors", - "value" : "[{\"name\": \"reactions\", \"expression\": \".reactions \"}]" - } - ] - } - ``` - - **Resultado esperado:** - - ```json - [ - { - "name": "grinning", - "users": [ - "W222222" - ], - "count": 1 - }, - { - "name": "question", - "users": [ - "W333333" - ], - "count": 1 - } - ] - ``` - - Ou, se o tempo limite tiver expirado: - - ```json - [] - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx b/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx deleted file mode 100644 index 4d9cad0e3b5..00000000000 --- a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/http.mdx +++ /dev/null @@ -1,1043 +0,0 @@ ---- -title: Ações HTTP -tags: - - workflow automation - - workflow - - workflow automation actions - - HTTP actions -metaDescription: A list of available HTTP actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Ainda estamos trabalhando nesse recurso, mas adoraríamos que você experimentasse! - - Atualmente, esse recurso é fornecido como parte de um programa de visualização de acordo com nossas [políticas de pré-lançamento](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Esta página fornece uma referência completa para as ações HTTP disponíveis no catálogo de ações de automação de fluxo de trabalho. Essas ações permitem que você faça requests HTTP (GET, POST, PUT, DELETE) para APIs e serviços externos como parte das suas definições de fluxo de trabalho. - -## Pré-requisitos - -Antes de usar ações HTTP na automação de fluxo de trabalho, certifique-se de ter: - -* endpointde destino de URLs API. -* Quaisquer credenciais de autenticação necessárias (chave de API, token, etc.). -* Compreensão dos formatos de requisição/resposta da API. - - - As ações HTTP suportam sintaxe secreta para qualquer valor de cabeçalho, permitindo que você passe dados sensíveis com segurança, como a chave de API. Consulte [a seção de gerenciamento de segredos](/docs/infrastructure/host-integrations/installation/secrets-management/) para obter mais informações. - - -## Ações HTTP - - - - Realize uma chamada HTTP GET para recuperar dados de um endpointda API. - - - Isso permite o uso de sintaxe secreta para qualquer valor de cabeçalho. - - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Descrição -
- **url** - - Obrigatório - - Corda - - A URL de destino da solicitação. O esquema deve ser incluído: - - `https://example.com` -
- **parâmetros da URL** - - Opcional - - Mapa - - O parâmetro de consulta deve ser adicionado à URL. Recebe um objeto JSON em formato de string. -
- **cabeçalhos** - - Opcional - - Mapa - - Os cabeçalhos a serem adicionados à solicitação. Recebe um objeto JSON em formato de string. -
- **seletores** - - Opcional - - Lista - - Os seletores permitem obter apenas o parâmetro especificado como saída. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Descrição -
- **respostaCorpo** - - Corda - - O corpo da resposta. -
- **código de status** - - Inteiro - - O código de status HTTP da resposta. -
-
- - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: httpGetTest - description: 'Performs an HTTP GET request to retrieve data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - steps: - - name: query - type: action - action: http.get - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - next: end - ``` - - **Exemplos de entradas:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}" - } - ``` - - **Exemplos de saída:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Executa uma chamada HTTP POST para enviar dados para um endpointda API. - - - Isso permite o uso de sintaxe secreta para qualquer valor de cabeçalho. - - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Descrição -
- **url** - - Obrigatório - - Corda - - A URL de destino da solicitação. O esquema deve ser incluído: - - `https://example.com` -
- **parâmetros da URL** - - Opcional - - Mapa - - O parâmetro de consulta deve ser adicionado à URL. Recebe um objeto JSON em formato de string. -
- **cabeçalhos** - - Opcional - - Mapa - - Os cabeçalhos a serem adicionados à solicitação. Recebe um objeto JSON em formato de string. -
- **corpo** - - Opcional - - Corda - - O corpo da requisição. -
- **seletores** - - Opcional - - Lista - - Os seletores permitem obter apenas o parâmetro especificado como saída. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Descrição -
- **respostaCorpo** - - Corda - - O corpo da resposta. -
- **código de status** - - Inteiro - - O código de status HTTP da resposta. -
-
- - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: httpPostTest - description: 'Performs an HTTP POST request to send data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - steps: - - name: query - type: action - action: http.post - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - next: end - ``` - - **Exemplos de entradas:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}" - } - ``` - - **Exemplos de saída:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Executa uma solicitação HTTP PUT para atualizar dados em um endpointda API. - - - Se você precisar passar dados sensíveis para uma entrada, por exemplo um cabeçalho `Api-Key`, você pode usar valores armazenados por meio da mutação [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) do NerdGraph. - - Exemplo: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Descrição -
- **url** - - Obrigatório - - Corda - - A URL de destino da solicitação. O URL deve incluir o esquema (por exemplo, https:// ou http://). Exemplo: - - `https://example.com` -
- **parâmetros da URL** - - Opcional - - Mapa - - O parâmetro de consulta deve ser adicionado à URL. Recebe um objeto JSON em formato de string. -
- **cabeçalhos** - - Opcional - - Mapa - - Os cabeçalhos a serem adicionados à solicitação. Recebe um objeto JSON em formato de string. -
- **corpo** - - Opcional - - Corda - - O corpo da requisição. -
- **seletores** - - Opcional - - Lista - - Os seletores permitem obter apenas o parâmetro especificado como saída. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Descrição -
- **respostaCorpo** - - Corda - - O corpo da resposta. -
- **código de status** - - Inteiro - - O código de status HTTP da resposta. -
-
- - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: httpPutTest - description: 'Performs an HTTP PUT request to update data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.put - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - body: ${{ .workflowInputs.body }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Exemplos de entradas:** - - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Exemplos de saída:** - - ```json - { - "responseBody": "", - "statusCode": 200 - } - ``` -
-
-
-
-
- - - Executa uma solicitação HTTP DELETE para remover dados em um endpointda API. - - - Se você precisar passar dados sensíveis para uma entrada, por exemplo um cabeçalho `Api-Key`, você pode usar valores armazenados por meio da mutação [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) do NerdGraph. - - Exemplo: - - ```json - { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" - } - ``` - - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Descrição -
- **url** - - Obrigatório - - Corda - - A URL de destino da solicitação. O URL deve incluir o esquema (por exemplo, https:// ou http://). Exemplo: - - `https://example.com` -
- **parâmetros da URL** - - Opcional - - Mapa - - O parâmetro de consulta deve ser adicionado à URL. Recebe um objeto JSON em formato de string. -
- **cabeçalhos** - - Opcional - - Mapa - - Os cabeçalhos a serem adicionados à solicitação. Recebe um objeto JSON em formato de string. -
- **seletores** - - Opcional - - Lista - - Os seletores permitem obter apenas o parâmetro especificado como saída. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Descrição -
- **respostaCorpo** - - Corda - - O corpo da resposta. -
- **código de status** - - Inteiro - - O código de status HTTP da resposta. -
-
- - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: httpDeleteTest - description: 'Performs an HTTP DELETE request to remove data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - selectors: - type: String - steps: - - name: query - type: action - action: http.delete - version: '1' - inputs: - url: ${{ .workflowInputs.url }} - urlParams: ${{ .workflowInputs.urlParams }} - headers: ${{ .workflowInputs.headers }} - selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Exemplos de entradas:** - - ```json - { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Exemplos de saída:** - - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } - ``` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx b/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx deleted file mode 100644 index 262939abcd9..00000000000 --- a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic.mdx +++ /dev/null @@ -1,1212 +0,0 @@ ---- -title: Ações da New Relic -tags: - - workflow automation - - workflow - - workflow automation actions - - New relic actions -metaDescription: A list of available actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - - - Ainda estamos trabalhando nesse recurso, mas adoraríamos que você experimentasse! - - Atualmente, esse recurso é fornecido como parte de um programa de visualização de acordo com nossas [políticas de pré-lançamento](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). - - -Esta página fornece uma referência completa das ações do New Relic disponíveis no catálogo de ações de automação de fluxo de trabalho. Essas ações permitem integrar recursos da plataforma New Relic em suas definições de fluxo de trabalho, incluindo envio de eventos personalizados e logs, execução de consulta NerdGraph, execução de consulta NRQL e envio de notificação. - -## Pré-requisitos - -Antes de usar as ações New Relic na automação do fluxo de trabalho, certifique-se de ter: - -* Uma conta New Relic com as permissões apropriadas. -* Uma chave de licença do New Relic (caso esteja enviando dados para uma conta diferente). -* As permissões necessárias para os serviços específicos do New Relic que você planeja usar. - -Consulte [chave de licença](/docs/apis/intro-apis/new-relic-api-keys/#license-key) para obter informações sobre como criar e gerenciar sua conta New Relic chave de licença. - -## Ações disponíveis em New Relic - -Guia rápido de todas as ações da New Relic por categoria: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Categoria - - Ação - - Propósito -
- **Ingestão de dados** - - [Enviar evento personalizado](#newrelicingestsendevents) - - Enviar evento personalizado para New Relic. -
- **Ingestão de dados** - - [Enviar logs](#newrelicingestsendlogs) - - Enviar dados de logs para o New Relic. -
- **NerdGraph** - - [Executar consulta ou mutação GraphQL](#newrelicnerdgraphexecute) - - Execute comandos GraphQL na API NerdGraph. -
- **Consulta** - - [Executar consulta NRDB](#newrelicnrdbquery) - - Executar consultoria NRQL entre contas. -
- **Notificação** - - [Enviar notificação](#newrelicnotificationsend) - - Envie notificação para destinos New Relic. -
- -## Ações de ingestão de dados - - - - Envia um evento personalizado para New Relic - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Exemplo -
- **atributo** - - Opcional - - map - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **eventos** - - Obrigatório - - list - - `"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]` -
- **chave de licença** - - Opcional - - corda - - `"{{ .secrets.secretName }}"` -
- **seletores** - - Opcional - - list - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: Atributo comum que faz parte de todos os eventos quando fornecido. A fusão de cada item de evento, quando necessário, substitui a definição comum. - * **events**: A lista de dados do evento. Observe que o evento requer o uso de um campo `eventType` que representa o tipo personalizado do evento e o número máximo de eventos permitidos por solicitação é 100. - * **licenseKey**: A chave de licença da conta New Relic que especifica a conta de destino para onde os eventos são enviados. Caso esse valor não seja fornecido, será assumida uma chave de licença padrão com base na conta que executa o fluxo de trabalho. - * **selectors**: Os seletores para obter apenas o parâmetro especificado como saída. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Exemplo -
- **sucesso** - - Boleano - - `true` -
- **mensagem de erro** - - corda - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: heartbeat_newrelicIngestSendEvents - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendEvents - version: 1 - inputs: - attributes: - colour: red - id: 1234 - events: - - eventType: HeartBeat - test: "OK" - attributes: - foo: bar - - eventType: HeartBeat1234 - test: "OK1234" - attributes: - foo: bar - - eventType: HeartBeat12345 - test: "OK12345" - attributes: - foo: bar - colour: yellow - - eventType: HeartBeat12345678 - test: "OK12345678" - selectors: - - name: success - expression: ".success" - ``` - - **Resultado esperado:** - - ```yaml - { - "success": true - } - ``` - - **Recuperar evento:** - - Após executar um fluxo de trabalho com sucesso, você pode recuperar o evento associado executando uma consulta na conta que executou o fluxo de trabalho: - - ```sql - SELECT * FROM HeartBeat - ``` -
-
-
-
-
-
- - - - Enviar registro para New Relic - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de entrada - - Opcionalidade - - Tipo - - Exemplo -
- **atributo** - - Opcional - - map - - `"{\"page\": \"1\", \"limit\": \"10\"}"` -
- **logs** - - Obrigatório - - list - - `"[{\"message\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"message\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"` -
- **chave de licença** - - Opcional - - corda - - `"{{ .secrets.secretName }}"` -
- **seletores** - - Opcional - - list - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
- - - * **attributes**: Atributo comum incluído em todos os logs quando fornecido. Se um item de log especificar o mesmo atributo, ele substituirá a definição comum. - * **logs**: A lista de dados de logs. Observe que o número máximo de logs permitidos por solicitação é 100. - * **licenseKey**: A chave de licença da conta New Relic que especifica a conta de destino para onde os logs são enviados. Caso não seja fornecida, será assumida uma chave de licença padrão com base na conta que executa o fluxo de trabalho. Consulte [a chave de licença](/docs/apis/intro-apis/new-relic-api-keys/#license-key) para obter mais informações. - * **selectors**: Os seletores para obter apenas o parâmetro especificado como saída. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo de saída - - Tipo - - Exemplo -
- **sucesso** - - Boleano - - `true` -
- **mensagem de erro** - - corda - - `"Error message if operation failed"` -
-
- - - - - - - - - - - - - - -
- Exemplo de fluxo de trabalho -
- ```yaml - name: heartbeat_newrelicIngestSendLogs - - workflowInputs: - cellName: - type: String - - steps: - - name: runAction - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - attributes: - colour: red - id: 1234 - logs: - - message: 'Heartbeat sendLogs Action Test Message' - attributes: - foo: bar - - message: 'HeartBeat1234' - attributes: - foo: bar - - message: 'HeartBeat12345' - attributes: - foo: bar - colour: yellow - - message: 'HeartBeat12345678' - selectors: - - name: success - expression: ".success" - ``` - - **Resultado esperado:** - - ```yaml - { - "success": true - } - ``` - - **Recuperar logs:** - - Após executar um fluxo de trabalho com sucesso, você pode recuperar o log associado executando uma consulta na conta que executou o fluxo de trabalho: - - ```sql - SELECT * FROM Log - ``` -
-
-
-
-
-
- -## Ações do NerdGraph - - - - Executa um comando GraphQL na API NerdGraph do New Relic. O comando pode ser uma consulta ou uma mutação. - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Entrada - - Opcionalidade - - Tipo - - Descrição - - Exemplo -
- **graphql** - - Obrigatório - - corda - - Uma sintaxe GraphQL. Você deve usar o GraphiQL para construir e testar seu comando. - -
- **variáveis** - - Obrigatório - - map[string]any - - Quaisquer variáveis de par principal-valor para usar com a instrução GraphQL. - -
- **seletores** - - Opcional - - list - - Os seletores permitem obter como saída apenas o parâmetro especificado. - - ```yaml - { - "data": { - "actor": { - "user": { - "name": "" - } - } - } - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Saída - - Tipo - - Exemplo -
- **dados** - - map[string]any: Conteúdo da propriedade - - `data` - - de uma resposta NerdGraph. - - ```yaml - steps: - - name: currentUserId - type: action - action: newrelic.nerdgraph.execute - version: 1 - inputs: - graphql: | - query userId { - currentUser { - id - } - } - - name: sayHello - type: action - action: example.messaging.sayHello - version: 1 - inputs: - name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} - ``` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Exemplo - - Saída - - Recuperar evento -
- ```json - name: testLog - - steps: - - name: logStep - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - logs: - - message: 'Hello World' - ``` - - ```yaml - { - "success": true - } - ``` - - Você pode recuperar o evento associado executando uma consulta na conta que executou o fluxo de trabalho. - - ```yaml - SELECT message FROM Log WHERE allColumnSearch('Hello World', insensitive: true) SINCE 30 minutes ago - ``` -
-
-
-
-
-
- -## Ações de consulta - - - - Executa uma consulta NRQL entre contas através da API do NerdGraph. - - - - - Entradas - - - - Saídas - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Entrada - - Opcionalidade - - Tipo - - Descrição - - Exemplo -
- **consulta** - - Obrigatório - - corda - - A instrução de consulta NRQL. - -
- **IDs da conta** - - Opcional - - lista de inteiros - - O campo - - **New Relic Account ID** - - é uma lista de IDs de destino que permite especificar as contas de destino nas quais a consulta será executada. Caso esse valor não seja fornecido como entrada, a consulta será executada automaticamente na conta associada à conta de execução do fluxo de trabalho. - -
- **seletores** - - Opcional - - list - - Os seletores permitem obter como saída apenas o parâmetro especificado. - - ```json - steps: - - name: queryForLog - type: action - action: newrelic.nrdb.query - version: 1 - inputs: - accountIds: [12345] - query: FROM Log SELECT * WHERE message LIKE 'DEMO%' - selectors: - - name: resultsAsString - expression: '.results | tostring' - ``` -
-
- - - - - - - - - - - - - - - - - - - - -
- Saída - - Tipo - - Exemplo -
- **results** - - : Uma matriz de objetos contendo os resultados da consulta. - - - - ```yaml - { - results=[ - { message=[INFO] - Workflow: test has ended, messageId=39af98 }, - { message=[INFO] - Workflow: test - Step query has started, messageId=649c612 }, - ... - ] - } - ``` -
-
-
-
-
-
- -## ações de notificação - - - - Envia uma mensagem para um canal, integrado com destinos, por exemplo, o Slack. - - - - - Entradas - - - - Saídas - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Entrada - - Opcionalidade - - Tipo - - Descrição - - Exemplo -
- **tipo** - - Obrigatório - - corda - - Tipo de destino do New Relic - - `slack` -
- **id de destino** - - Obrigatório - - Corda - - DestinationId associado ao destino New Relic. - - `123e4567-e89b-12d3-a456-426614174000` -
- **parâmetro** - - Obrigatório - - map - - Campos obrigatórios para enviar notificação ao tipo de destino escolhido. - - `{\"channel\": \"${{ YOUR_CHANNEL }}\", \"text\": \"Enter your text here\"}` -
- **seletores** - - Opcional - - list - - Os seletores permitem obter como saída apenas o parâmetro especificado. - - `[{\"name\": \"success\", \"expression\": \".success\"}]` -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Saída - - Tipo - - Exemplo -
- sucesso - - boleano - - `true/false` -
-
-
-
-
-
\ No newline at end of file diff --git a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx b/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx deleted file mode 100644 index c723ac5f26e..00000000000 --- a/src/i18n/content/pt/docs/workflow-automation/setup-and-configuration/actions-catalog/others.mdx +++ /dev/null @@ -1,634 +0,0 @@ ---- -title: Ações de utilidade -tags: - - workflow automation - - workflow - - workflow automation actions - - utility actions -metaDescription: A list of available utility actions in the actions catalog for workflow definitions -freshnessValidatedDate: never -translationType: machine ---- - -Esta página fornece uma referência para as ações de utilitário disponíveis no catálogo de ações de automação de fluxo de trabalho. Essas ações permitem que você execute operações comuns de transformação de dados e utilitários em suas definições de fluxo de trabalho. - -## Ações de utilidade - - - - Esta ação é usada para transformar um timestamp Unix (ou timestamp da época) em data/hora. Possíveis referências: - - * [https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - * [https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT\_IDS](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS) - - Consulte [a Epoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) para obter mais informações. - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Entrada - - Opcionalidade - - Tipo - - Descrição -
- **Timestamp** - - Obrigatório - - int - - Um número inteiro que representa o timestamp da época. Note que as épocas UNIX são o número de segundos após 1º de janeiro de 1970, meia-noite UTC (00:00). -
- **timestampUnit** - - Opcional - - corda - - Uma string representando a unidade do timestamp fornecido. Valores aceitáveis: SEGUNDOS, MILISSEGUNDOS (PADRÃO) -
- **ID do fuso horário** - - Opcional - - corda - - Uma string que representa o fuso horário para a data/hora desejada, padrão: UTC -
- **padrão** - - Opcional - - corda - - Uma string que representa o padrão para a data e hora desejadas, padrão: ISO-8601 -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo - - Opcionalidade - - Tipo de dados - - Descrição -
- **data** - - Obrigatório - - corda - - Uma representação em formato de string de uma data. -
- **tempo** - - Obrigatório - - corda - - Uma representação em forma de string do tempo. -
- **data e hora** - - Obrigatório - - corda - - Uma representação em formato de string de data e hora. -
- **fuso horário** - - Obrigatório - - map - - Representação em mapa do ID do fuso horário e sua abreviação. -
-
- - - - - - - - - - - - - - - - - - - - - - -
- Exemplo - - Entrada de fluxo de trabalho - - Saídas -
- ```yaml - name: from_epoch - - workflowInputs: - timestamp: - type: Int - timestampUnit: - type: String - timezoneId: - type: String - pattern: - type: String - - steps: - - name: epochTime - type: action - action: utils.datetime.fromEpoch - version: 1 - inputs: - timestamp: ${{ .workflowInputs.timestamp }} - timezoneId: ${{ .workflowInputs.timezoneId }} - pattern: ${{ .workflowInputs.pattern }} - timestampUnit: ${{ .workflowInputs.timestampUnit }} - ``` - - ```json - mutation { - workflowAutomationStartWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { name: "from_epoch" } - workflowInputs: [ - {key: "timestamp", value: "1738236424003"} - {key: "timestampUnit", value: "MILLISECONDS"} - {key: "pattern", value: "yyyy-mm-dd HH:SS"} - {key: "timezoneId", value: "Asia/Kolkata"} - ] - ) { - runId - } - } - ``` - - ```json - { - "date": "2025-01-30", - "time": "16:57:04.003" - "datetime": "2025-01-30 16:00", - "timezone": { - "abbreviation": "IST", - "id": "Asia/Kolkata" - } - } - ``` -
-
-
-
-
-
- - - - Esta ação é usada para transformar vários tipos de entrada (JSON, mapa) em um formato CSV. - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Entrada - - Opcionalidade - - Tipo - - Descrição -
- **dados** - - Obrigatório - - qualquer - - Uma sequência de caracteres que representa dados a serem transformados em CSV, normalmente uma string JSON ou um mapa. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- Campo - - Opcionalidade - - Tipo de dados - - Descrição -
- **arquivo CSV** - - Obrigatório - - corda - - Representação em formato CSV dos dados recebidos. -
-
- - - - - - - - - - - - - - - - - - - - - -
- Exemplo - - Entrada de fluxo de trabalho - - Saídas -
- ```json - name: nrqltocsv - - steps: - - name: queryForLog - type: action - action: newrelic.nrql.query - version: 1 - inputs: - accountIds: ['${{ .workflowInputs.accountId }}'] - query: ${{ .workflowInputs.nrql }} - - - name: csv1 - type: action - action: utils.transform.toCSV - version: 1 - inputs: - data: ${{ .steps.queryForLog.outputs.results | tostring }} - ``` - - ```json - mutation { - startWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { - name: "nrqltocsv", - } - workflowInputs: [ - {key: "accountId" value: "12345678"} - {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} - ] - ) - { runId } - } - ``` - -
-
-
-
-
-
- - - - Gere um UUID V4 compatível com a RFC. - - - - - Entradas - - - - Saídas - - - - Exemplo - - - - - - - - - - - - - - - - - - - - - - -
- Entrada - - Opcionalidade - - Tipo de dados - - Descrição -
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - -
- Campo - - Tipo de dados - - Descrição -
- **uuid** - - corda - -
-
- - - - - - - - - - - - - - - - - - - - -
- Exemplo - - Entrada de fluxo de trabalho - - Saídas -
- - - nome: gerarUUID
passos: - - * nome: gerarUUID tipo: ação ação: utils.uuid.generate versão: 1 -
- ```json - { - "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", - } - ``` -
-
-
-
-
-
\ No newline at end of file From ea5c2dd52d1262d8276de635003365446da6b620 Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Thu, 20 Nov 2025 16:45:27 +0530 Subject: [PATCH 04/11] Updated the missing information --- .../actions-catalog/actions-catalog.mdx | 175 +++++++----------- .../{ => aws}/aws-cloudwatch.mdx | 7 - .../actions-catalog/{ => aws}/aws-ec2.mdx | 5 +- .../{ => aws}/aws-execute-api.mdx | 16 +- .../actions-catalog/{ => aws}/aws-lambda.mdx | 24 +-- .../actions-catalog/{ => aws}/aws-s3.mdx | 6 +- .../actions-catalog/{ => aws}/aws-sns.mdx | 3 - .../actions-catalog/{ => aws}/aws-sqs.mdx | 25 ++- .../{ => aws}/aws-systemsmanager.mdx | 4 +- .../{ => http}/http-delete.mdx | 6 +- .../actions-catalog/{ => http}/http-get.mdx | 1 + .../actions-catalog/{ => http}/http-post.mdx | 0 .../actions-catalog/{ => http}/http-put.mdx | 0 .../{ => newrelic}/newrelic-ingest.mdx | 0 .../{ => newrelic}/newrelic-nerdgraph.mdx | 0 .../{ => newrelic}/newrelic-notification.mdx | 0 .../{ => newrelic}/newrelic-nrdb.mdx | 0 .../{ => pagerduty}/pagerduty-incident.mdx | 0 .../{ => slack}/slack-chat.mdx | 0 .../{ => utils}/utils-datetime.mdx | 0 .../{ => utils}/utils-transform.mdx | 1 + .../{ => utils}/utils-uuid.mdx | 0 22 files changed, 103 insertions(+), 170 deletions(-) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-cloudwatch.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-ec2.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-execute-api.mdx (98%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-lambda.mdx (96%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-s3.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-sns.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-sqs.mdx (91%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => aws}/aws-systemsmanager.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => http}/http-delete.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => http}/http-get.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => http}/http-post.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => http}/http-put.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => newrelic}/newrelic-ingest.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => newrelic}/newrelic-nerdgraph.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => newrelic}/newrelic-notification.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => newrelic}/newrelic-nrdb.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => pagerduty}/pagerduty-incident.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => slack}/slack-chat.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => utils}/utils-datetime.mdx (100%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => utils}/utils-transform.mdx (99%) rename src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/{ => utils}/utils-uuid.mdx (100%) diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx index 1cb040e9e75..17f0c014605 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx @@ -37,273 +37,228 @@ The table below lists all available actions. Click on any action name to view it
Action Name Category DescriptionDocumentation
`aws.cloudwatch.getLogEvents`[Get log events from CloudWatch Logs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch#aws.cloudwatch.getLogEvents) AWS CloudWatch Get log events from CloudWatch Logs[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch#aws.cloudwatch.getLogEvents)
`aws.cloudwatch.putLogEvents`[Put log events to CloudWatch Logs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch#aws.cloudwatch.putLogEvents) AWS CloudWatch Put log events to CloudWatch Logs[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch#aws.cloudwatch.putLogEvents)
`aws.ec2.deleteSnapshot`[Delete an EBS snapshot](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2#awsec2deletesnapshot) AWS EC2 Delete an EBS snapshot[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2deletesnapshot)
`aws.ec2.rebootInstances`[Reboot EC2 instances](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2#awsec2rebootinstances) AWS EC2 Reboot EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2rebootinstances)
`aws.ec2.runInstances`[Launch new EC2 instances](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2#aws.ec2.runInstances) AWS EC2 Launch new EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#aws.ec2.runInstances)
`aws.ec2.startInstances`[Start stopped EC2 instances](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2#awsec2startinstances) AWS EC2 Start stopped EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2startinstances)
`aws.ec2.terminateInstances`[Terminate EC2 instances](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2#awsec2terminateinstances) AWS EC2 Terminate EC2 instances[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2#awsec2terminateinstances)
`aws.execute.api`[Execute any AWS API operation](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api#awsexecuteapi) AWS Execute API Execute any AWS API operation[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api#awsexecuteapi)
`aws.lambda.getFunction`[Get Lambda function configuration](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda#aws.lambda.getFunction) AWS Lambda Get Lambda function configuration[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.getFunction)
`aws.lambda.invoke`[Invoke a Lambda function](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda#aws.lambda.invoke) AWS Lambda Invoke a Lambda function[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.invoke)
`aws.lambda.listAliases`[List Lambda function aliases](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda#aws.lambda.listAliases) AWS Lambda List Lambda function aliases[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.listAliases)
`aws.lambda.updateFunctionConfiguration`[Update Lambda function configuration](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda#aws.lambda.updateFunctionConfiguration) AWS Lambda Update Lambda function configuration[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda#aws.lambda.updateFunctionConfiguration)
`aws.s3.deleteObject`[Delete an object from S3 bucket](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3#aws.s3.deleteObject) AWS S3 Delete an object from S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.deleteObject)
`aws.s3.getObject`[Get an object from S3 bucket](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3#aws.s3.getObject) AWS S3 Get an object from S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.getObject)
`aws.s3.listObjectsV2`[List objects in an S3 bucket](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3#aws.s3.listObjectsV2) AWS S3 List objects in an S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.listObjectsV2)
`aws.s3.putObject`[Add an object to S3 bucket](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3#aws.s3.putObject) AWS S3 Add an object to S3 bucket[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3#aws.s3.putObject)
`aws.sns.publish`[Publish a message to SNS topic](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns#aws.sns.publish) AWS SNS Publish a message to SNS topic[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns#aws.sns.publish)
`aws.sqs.receiveMessage`[Receive a message from SQS queue](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs#aws.sqs.receiveMessage) AWS SQS Receive a message from SQS queue[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs#aws.sqs.receiveMessage)
`aws.sqs.sendMessage`[Send a message to SQS queue](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs#aws.sqs.sendMessage) AWS SQS Send a message to SQS queue[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs#aws.sqs.sendMessage)
`aws.systemsManager.deleteDocument`[Delete a Systems Manager document](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager#awssystemsmanagerdeletedocument) AWS Systems Manager Delete a Systems Manager document[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerdeletedocument)
`aws.systemsManager.startAutomation`[Start a Systems Manager automation](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager#awssystemsmanagerstartautomation) AWS Systems Manager Start a Systems Manager automation[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerstartautomation)
`aws.systemsManager.waitForAutomationStatus`[Wait for automation execution status](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager#awssystemsmanagerwaitforautomationstatus) AWS Systems Manager Wait for automation execution status[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerwaitforautomationstatus)
`aws.systemsManager.writeDocument`[Create or update a Systems Manager document](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager#awssystemsmanagerwritedocument) AWS Systems Manager Create or update a Systems Manager document[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager#awssystemsmanagerwritedocument)
`http.delete`[Perform HTTP DELETE request](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete#httpdelete) HTTP Perform HTTP DELETE request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete#httpdelete)
`http.get`[Perform HTTP GET request](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get#httpget) HTTP Perform HTTP GET request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get#httpget)
`http.post`[Perform HTTP POST request](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post#httppost) HTTP Perform HTTP POST request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post#httppost)
`http.put`[Perform HTTP PUT request](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put#httpput) HTTP Perform HTTP PUT request[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put#httpput)
`newrelic.ingest.sendEvents`[Send custom events to New Relic](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest#newrelic.ingest.sendEvents) New Relic Ingest Send custom events to New Relic[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest#newrelic.ingest.sendEvents)
`newrelic.ingest.sendLogs`[Send logs to New Relic](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest#newrelic.ingest.sendLogs) New Relic Ingest Send logs to New Relic[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest#newrelic.ingest.sendLogs)
`newrelic.nerdgraph.execute`[Execute NerdGraph query or mutation](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph#newrelic.nerdgraph.execute) New Relic NerdGraph Execute NerdGraph query or mutation[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph#newrelic.nerdgraph.execute)
`newrelic.notification.send`[Send notification to New Relic destination](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification#newrelic.notification.send) New Relic Notification Send notification to New Relic destination[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification#newrelic.notification.send)
`newrelic.notification.sendEmail`[Send email notification](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification#newrelic.notification.sendEmail) New Relic Notification Send email notification[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification#newrelic.notification.sendEmail)
`newrelic.notification.sendMicrosoftTeams`[Send Microsoft Teams notification](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification#newrelic.notification.sendMicrosoftTeams) New Relic Notification Send Microsoft Teams notification[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification#newrelic.notification.sendMicrosoftTeams)
`newrelic.nrdb.query`[Execute NRQL query](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb#newrelic.nrdb.query) New Relic NRDB Execute NRQL query[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb#newrelic.nrdb.query)
`pagerduty.incident.create`[Create a PagerDuty incident](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident#pagerDuty.incident.create) PagerDuty Incident Create a PagerDuty incident[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.create)
`pagerduty.incident.get`[Get PagerDuty incident details](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident#pagerDuty.incident.get) PagerDuty Incident Get PagerDuty incident details[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.get)
`pagerduty.incident.list`[List PagerDuty incidents](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident#pagerDuty.incident.list) PagerDuty Incident List PagerDuty incidents[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.list)
`pagerduty.incident.resolve`[Resolve a PagerDuty incident](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident#pagerDuty.incident.resolve) PagerDuty Incident Resolve a PagerDuty incident[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.resolve)
`pagerduty.incident.update`[Update a PagerDuty incident](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident#pagerDuty.incident.update) PagerDuty Incident Update a PagerDuty incident[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident#pagerDuty.incident.update)
`slack.chat.getReactions`[Get reactions from Slack message](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat#slack.chat.getReactions) Slack Chat Get reactions from Slack message[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat#slack.chat.getReactions)
`slack.chat.postMessage`[Post a message to Slack channel](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat#slack.chat.postMessage) Slack Chat Post a message to Slack channel[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat#slack.chat.postMessage)
`utils.datetime.fromEpoch`[Convert epoch timestamp to datetime](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime#utils.datetime.fromEpoch) Utilities - DateTime Convert epoch timestamp to datetime[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime#utils.datetime.fromEpoch)
`utils.transform.toCSV`[Transform data to CSV format](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform#utils.transform.toCSV) Utilities - Transform Transform data to CSV format[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform#utils.transform.toCSV)
`utils.uuid.generate`[Generate a UUID](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid#utils.uuid.generate) Utilities - UUID Generate a UUID[View docs](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid#utils.uuid.generate)
@@ -313,37 +268,37 @@ The table below lists all available actions. Click on any action name to view it Browse actions organized by provider and product: ### AWS Actions -- [AWS CloudWatch](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch) - CloudWatch Logs operations -- [AWS EC2](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2) - EC2 instance and snapshot management -- [AWS Execute API](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api) - Execute any AWS API operation -- [AWS Lambda](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda) - Lambda function operations -- [AWS S3](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3) - S3 bucket and object operations -- [AWS SNS](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns) - SNS topic operations -- [AWS SQS](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs) - SQS queue operations -- [AWS Systems Manager](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager) - Systems Manager automation and documents +- [AWS CloudWatch](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch) - CloudWatch Logs operations +- [AWS EC2](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2) - EC2 instance and snapshot management +- [AWS Execute API](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api) - Execute any AWS API operation +- [AWS Lambda](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda) - Lambda function operations +- [AWS S3](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3) - S3 bucket and object operations +- [AWS SNS](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns) - SNS topic operations +- [AWS SQS](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs) - SQS queue operations +- [AWS Systems Manager](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager) - Systems Manager automation and documents ### HTTP Actions -- [HTTP DELETE](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete) - DELETE request operations -- [HTTP GET](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get) - GET request operations -- [HTTP POST](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post) - POST request operations -- [HTTP PUT](/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put) - PUT request operations +- [HTTP DELETE](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete) - DELETE request operations +- [HTTP GET](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get) - GET request operations +- [HTTP POST](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post) - POST request operations +- [HTTP PUT](/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put) - PUT request operations ### New Relic Actions -- [New Relic Ingest](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest) - Send events and logs to New Relic -- [New Relic NerdGraph](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph) - Execute NerdGraph queries and mutations -- [New Relic NRDB](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb) - Query New Relic database -- [New Relic Notification](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification) - Send notifications through New Relic +- [New Relic Ingest](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest) - Send events and logs to New Relic +- [New Relic NerdGraph](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph) - Execute NerdGraph queries and mutations +- [New Relic NRDB](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb) - Query New Relic database +- [New Relic Notification](/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification) - Send notifications through New Relic ### Communication Actions -- [Slack Chat](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat) - Slack messaging operations +- [Slack Chat](/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat) - Slack messaging operations ### Incident Management Actions -- [PagerDuty Incident](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident) - PagerDuty incident management +- [PagerDuty Incident](/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident) - PagerDuty incident management ### Utility Actions -- [Utilities - DateTime](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime) - Date and time utilities -- [Utilities - Transform](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform) - Data transformation utilities -- [Utilities - UUID](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid) - UUID generation utilities +- [Utilities - DateTime](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime) - Date and time utilities +- [Utilities - Transform](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform) - Data transformation utilities +- [Utilities - UUID](/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid) - UUID generation utilities ## What's next diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx index 13af3167578..c988097fcb1 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-cloudwatch.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx @@ -28,9 +28,6 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - -
-
- -## S3 actions - diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx index 96b697ec457..d59f9f25508 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-ec2.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx @@ -28,10 +28,6 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - -## EC2 actions - + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx similarity index 98% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx index a6802e7713c..d7b7cac52ae 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-execute-api.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx @@ -28,12 +28,10 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - - + This action allows you to execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. @@ -403,8 +401,4 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - - -## CloudWatch actions - + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx similarity index 96% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx index e9433656293..aef1bd53c0f 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-lambda.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx @@ -98,38 +98,22 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **functionName** Required String - `my-lambda-function` - - - **invocationType** - Optional - String - `Event'|'RequestResponse'|'DryRun'` + `functionName: "hello-you"` **payload** Optional - String - `'{"key": "value"}'` - - - **parameters** - Optional Map - ```yaml - { - "Qualifier": "1", - "ClientContext":"encoded value" - }, - ``` + `payload: + user: R2-D2` **selectors** Optional List - `[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]` + `[{\"name\": \"payload\", \"expression\": \".payload\"}]` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx index cd1325a6c7f..9760bc54ce9 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-s3.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx @@ -1226,8 +1226,4 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - -## SNS actions - - + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx index dae30cc4ffb..de2b231dbd0 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sns.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx @@ -264,7 +264,4 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - -## SQS actions diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx similarity index 91% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx index 336c41bfd9a..d4115143a17 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-sqs.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx @@ -314,7 +314,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml [ - 'All'|'Policy'|'VisibilityTimeout'|'MaximumMessageSize'|'MessageRetentionPeriod'|'ApproximateNumberOfMessages'|'ApproximateNumberOfMessagesNotVisible'|'CreatedTimestamp'|'LastModifiedTimestamp'|'QueueArn'|'ApproximateNumberOfMessagesDelayed'|'DelaySeconds'|'ReceiveMessageWaitTimeSeconds'|'RedrivePolicy'|'FifoQueue'|'ContentBasedDeduplication'|'KmsMasterKeyId'|'KmsDataKeyReusePeriodSeconds'|'DeduplicationScope'|'FifoThroughputLimit'|'RedriveAllowPolicy'|'SqsManagedSseEnabled', + 'All'|'Policy'|'VisibilityTimeout'|'MaximumMessageSize'|'MessageRetentionPeriod'|'ApproximateNumberOfMessages'|'ApproximateNumberOfMessagesNotVisible'|'CreatedTimestamp'|'LastModifiedTimestamp'|'QueueArn'|'ApproximateNumberOfMessagesDelayed'|'DelaySeconds'|'ReceiveMessageWaitTimeSeconds'|'RedrivePolicy'|'FifoQueue'|'ContentBasedDeduplication'|'KmsMasterKeyId'|'KmsDataKeyReusePeriodSeconds'|'DeduplicationScope'|'FifoThroughputLimit'|'RedriveAllowPolicy'|'SqsManagedSseEnabled', ] ``` @@ -391,7 +391,28 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - ```yaml +```yaml name: sqs-receive-message-test description: 'Receives a message from an SQS queue' steps: + - name: aws_sqs_receiveMessage_1 + type: action + action: aws.sqs.receiveMessage + version: '1' + inputs: + awsRoleArn: ${{ :secrets:awsRoleArn }} + region: us-east-1 + queueUrl: https://sqs.us-east-1.amazonaws.com/123456789012/workflow-test-queue + waitTimeSeconds: 5 + maxNumberOfMessages: 10 + messageAttributeNames: ['message_attribute_name'], +``` + + + + + + + + + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx index a7b8ddd05b9..b7dbb919616 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws-systemsmanager.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx @@ -28,8 +28,7 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - + - ## Systems Manager actions diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete.mdx index ea6c40a6dd1..4ebcb76b483 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-delete.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete.mdx @@ -30,9 +30,6 @@ Before using HTTP actions in workflow automation, ensure you have: HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. - - - - - + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get.mdx index 50539f13f43..6fb18411a89 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-get.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get.mdx @@ -179,3 +179,4 @@ Perform an HTTP GET call to retrieve data from an API endpoint. + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-post.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http-put.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-ingest.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nerdgraph.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-notification.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic-nrdb.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty-incident.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack-chat.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-datetime.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime.mdx diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform.mdx similarity index 99% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform.mdx index edf4d8e42e0..10468db42c5 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-transform.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform.mdx @@ -140,3 +140,4 @@ This page provides a comprehensive reference for utilities - transform available + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid.mdx similarity index 100% rename from src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils-uuid.mdx rename to src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid.mdx From d3ce88e1fc619a399b753a038fed8225f38b5811 Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Fri, 21 Nov 2025 18:56:53 +0530 Subject: [PATCH 05/11] Added the missing actions --- .../actions-catalog/actions-catalog.mdx | 4 +- .../actions-catalog/auth/auth-jwt-create.mdx | 206 ++++ .../actions-catalog/aws/aws-ec2.mdx | 634 +++++++++- .../actions-catalog/aws/aws-execute-api.mdx | 164 +-- .../actions-catalog/aws/aws-lambda.mdx | 157 ++- .../aws/aws-systemsmanager.mdx | 1025 ++++++++++++----- .../actions-catalog/http/http-delete.mdx | 95 +- .../actions-catalog/http/http-get.mdx | 108 +- .../actions-catalog/http/http-post.mdx | 109 +- .../actions-catalog/http/http-put.mdx | 107 +- .../newrelic/newrelic-ingest.mdx | 2 - .../newrelic/newrelic-nerdgraph.mdx | 5 +- .../actions-catalog/slack/slack-chat.mdx | 2 - .../actions-catalog/utils/script-run.mdx | 218 ++++ static/images/python-script.webp | Bin 0 -> 277250 bytes 15 files changed, 2189 insertions(+), 647 deletions(-) create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/script-run.mdx create mode 100644 static/images/python-script.webp diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx index 17f0c014605..2427e592ee1 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx @@ -76,7 +76,7 @@ The table below lists all available actions. Click on any action name to view it Terminate EC2 instances - [Execute any AWS API operation](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api#awsexecuteapi) + [Execute any AWS API operation](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api#aws.execute.api) AWS Execute API Execute any AWS API operation @@ -136,7 +136,7 @@ The table below lists all available actions. Click on any action name to view it Send a message to SQS queue - [Delete a Systems Manager document](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager#awssystemsmanagerdeletedocument) + [Delete a Systems Manager document](/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager#aws.systemsManager.deleteDocument) AWS Systems Manager Delete a Systems Manager document diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx new file mode 100644 index 00000000000..07d737ff364 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx @@ -0,0 +1,206 @@ +--- +title: "Auth JWT actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - Auth actions + - Auth JWT actions +metaDescription: "A list of available auth jwt actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for authentication actions available in the workflow automation actions catalog. These actions enable you to create and manage JSON Web Tokens (JWT) for secure authentication in your workflows. + +## Authentication actions + + + + Create a JSON Web Token + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldTypeDescriptionExample
**algorithm**StringAlgorithm used to sign the token. + RS256 +

Supported algorithms: RS256 ,ES256

+
**privateKey**String + The private key for signing a JWT. +

+ 1. RS256 supports private key in PKCS#8 & PKCS#1 format. ES256 supports private key in PKCS#8 (.p8) format. + 2. Private Key must be provided as a secret expression. + 3. PrivateKey must be stored as single line string in Secrets. +

+
`${{ :secrets:namespace:privateKey }}`
**headers**Map + Headers provides metadata for JWT +

+ **UnSupported headers**: nested objects, arrays, null are not supported +

+
`{"kid": "key-2025-09"}`
**claims**Map + Claims are statements about an entity (typically, the user) and additional data +

+ **Unsupported Claim Types**: null, Nested objects / arbitrary maps, Lists containing non-strings or mixed types. +

+
`{"role": "admin", "scope": "read:all"}`
**expirationTimeMinutes**Int + Expiration time in minutes +

+ Expiration time should be greater than 0 and less than 30days. +

+
10
**includeIssuedAt**Boolean + Issued At timestamp +

+ Default: true +

+
true
**selectors**List + ```yaml + [name: token, + + expression: .jwt + + ] +``` +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeDescription
**success**Boolean`true/false`
**jwt**String"`xxxxx.yyyyy.zzzzz`“
**errorMessage**String`“Unsupported algorithm for creating jwt token"`
+
+ + + + + + + + + + + + + +
Workflow definition
+ ```yaml + name: create-json-web-token + description: "" + steps: + - name: auth_jwt_create_1 + type: action + action: auth.jwt.create + version: "1" + inputs: + algorithm: RS256 + privateKey: ${{ :secrets:namespace:privatekey}} + headers: + header1: value1 + claims: + claim1: value1 + expirationTimeMinutes: 10 + next: end + ``` +
+
+
+
+
+
\ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx index d59f9f25508..a86c6450b55 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx @@ -30,11 +30,577 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - This action deletes an Amazon EC2 snapshot. You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. + Launches the specified number of instances using an AMI for which you have permissions. + + You can specify a number of options, or leave the default options. The following rules apply: + - If you don't specify a subnet ID, we choose a default subnet from your default VPC for you. If you don't have a default VPC, you must specify a subnet ID in the request. + - If any of the AMIs have a product code attached for which the user has not subscribed, the request fails. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**imageId**RequiredString`"ami-0ca4d5db4872d0c28"`
**instanceType**RequiredString`"t2.micro"`
**minCount**RequiredInt`1`
**maxCount**RequiredInt`10`
**parameters**OptionalMap + ```yaml + { + "EbsOptimized": false, + "TagSpecifications": [ + { + "ResourceType": "instance", + "Tags": [ + { + "Key": "Name", + "Value": "My-Web-Server" + } + ] + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object +

+ Response syntax can be referred: [run_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/run_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ec2_run_instance + workflowInputs: + arnRole: + type: String + required: true + steps: + - name: RunInstance + type: action + action: aws.ec2.runInstances + version: '1' + inputs: + awsRoleArn: ${{.workflowInputs.arnRole}} + region: us-east-2 + imageId: ami-0ca4d5db4872d0c28 + instanceType: t2.micro + minCount: 1 + maxCount: 1 + parameters: + EbsOptimized: false + TagSpecifications: + - ResourceType: instance + Tags: + - Key: Name + Value: My-Test-Instance + selectors: + - name: instanceId + expression: .response.Instances[0].InstanceId + ``` +
+
+
+
+
+ + + + Describes the specified instances or all instances. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**OptionalList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**filters**OptionalList`"[{\"Name\": \"instance-state-name\", \"Values\": [\"running\"]}]"`
**nextToken**OptionalString`“abcdefgh“`
**maxResults**OptionalInt100
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In action input at least one of the AWS Credentials (short, long, role) should be provided, where role take precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object + ```yaml + {"response": + + }} + ``` +

+ Response syntax can be referred [describe_instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/describe_instances.html). +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "The parameter instancesSet cannot be used with the parameter maxResults"`
+ + + - If you specify instance IDs, the output includes information for only the specified instances. + - If you specify filters, the output includes information for only those instances that meet the filter criteria. + - If you do not specify instance IDs or filters, the output includes information for all instances. + - The parameter `instanceIds` cannot be used with `maxResults`. + +
+ + + + + + + + + + + + + +
Workflow Example
+ ```yaml + name: ab-ec2-describe-test + description: '' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_ec2_describeInstances_1 + type: action + action: aws.ec2.describeInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-2 + instanceIds: + - i-123456789abcdef0 + next: end + ``` +
+
+
+
+
+ + + + Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance. + + The location of the source EBS volume determines where you can create the snapshot. + + + + + Inputs + + + + Outputs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**description**OptionalString"This is a test snapshot"
**outpostArn**OptionalString`“arn:aws:ec2:us-east-1:123456789012:outpost/op-1a2b3c4d5e6f7g8h9”`
**volumeId**RequiredString“`vol-0123456789abcdef0`“
**tagSpecifications**OptionalList`[{"ResourceType":"snapshot","Tags":[{"Key":"testKey","Value":"testValue"}]}]`
**location**OptionalString“regional”
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In action input at least one of the AWS Credentials (short, long, role) should be provided, where role take precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object + ```yaml + { + 'OwnerAlias': 'string', + 'OutpostArn': 'string', + 'Tags': [ + { + 'Key': 'string', + 'Value': 'string' + }, + ], + 'StorageTier': 'archive'|'standard', + 'RestoreExpiryTime': datetime(2015, 1, 1), + 'SseType': 'sse-ebs'|'sse-kms'|'none', + 'AvailabilityZone': 'string', + 'TransferType': 'time-based'|'standard', + 'CompletionDurationMinutes': 123, + 'CompletionTime': datetime(2015, 1, 1), + 'FullSnapshotSizeInBytes': 123, + 'SnapshotId': 'string', + 'VolumeId': 'string', + 'State': 'pending'|'completed'|'error'|'recoverable'|'recovering', + 'StateMessage': 'string', + 'StartTime': datetime(2015, 1, 1), + 'Progress': 'string', + 'OwnerId': 'string', + 'Description': 'string', + 'VolumeSize': 123, + 'Encrypted': True|False, + 'KmsKeyId': 'string', + 'DataEncryptionKeyId': 'string' + } + ``` +

+ Response syntax can be referred [create_snapshot](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/create_snapshot.html). +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "The parameter instancesSet cannot be used with the parameter maxResults"`
+
+
+
+
+ + + + This action deletes an Amazon EC2 snapshot. + + You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. @@ -190,8 +756,8 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Requests a reboot of the specified instances. This operation is asynchronous; it only queues a request to reboot the specified instances. The operation succeeds if the instances are valid and belong to you. Requests to reboot terminated instances are ignored. @@ -347,8 +913,8 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Starts an Amazon EBS-backed instance that you previously stopped. @@ -484,7 +1050,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - + @@ -527,7 +1093,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s @@ -626,7 +1192,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx index d7b7cac52ae..514e23781c8 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx @@ -29,7 +29,7 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. @@ -172,7 +172,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - + @@ -198,14 +198,6 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s
**response** object - ```yaml + ```yaml { 'TerminatingInstances': [ { @@ -642,7 +1208,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s }, ] } - ``` + ```

Response syntax can be referred [terminate_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/terminate_instances.html)

@@ -672,29 +1238,29 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s
- ```yaml - name: ec2-terminate-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_terminateInstances_1 - type: action - action: aws.ec2.terminateInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end - ``` + ```yaml + name: ec2-terminate-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_terminateInstances_1 + type: action + action: aws.ec2.terminateInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ```
**api** Required Stringapi: "create_queue"`api: "create_queue"`
**parameters**
- - - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. - - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. - - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. - - Use selectors to get only the specified parameters as output. -
@@ -220,9 +212,9 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **response** - object + Object `{"response":` - }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html. + }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html.` **success** @@ -236,147 +228,101 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + + - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. + - Use selectors to get only the specified parameters as output. + - ### Example 1: Send a message to an SQS queue - - This example demonstrates how to send a message to an Amazon SQS queue using the `aws.execute.api` action with IAM role authentication. - - ```yaml - name: sqs_send_message_example - - workflowInputs: - awsRoleArn: - type: String - description: "ARN of the IAM role to assume (e.g., arn:aws:iam::123456789012:role/workflow-sqs-role)" - awsRegion: - type: String - defaultValue: us-east-2 - awsQueueUrl: - type: String - defaultValue: "https://sqs.us-east-2.amazonaws.com//" - - steps: - - name: sendSqsMessage - type: action - action: aws.execute.api - version: 1 - inputs: - awsRoleArn: ${{ .workflowInputs.awsRoleArn }} - region: ${{ .workflowInputs.awsRegion }} - service: sqs - api: send_message - parameters: - QueueUrl: ${{ .workflowInputs.awsQueueUrl }} - MessageBody: | - { - "message": "deployment is bad", - "status": "not good" - } - selectors: - - name: success - expression: '.success' - - name: messageId - expression: '.response.MessageId' - - name: errorMessage - expression: '.errorMessage' - - - name: logResult - type: action - action: newrelic.ingest.sendLogs - version: 1 - inputs: - message: 'SQS message sent. Success: ${{ .steps.sendSqsMessage.outputs.success }}, MessageId: ${{ .steps.sendSqsMessage.outputs.messageId }}' - licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' - ``` - - **Required IAM policy for this example:** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "sqs:SendMessage", - "Resource": "arn:aws:sqs:us-east-2::" - } - ] - } - ``` - - **Expected outputs:** - - `success`: Boolean indicating whether the message was sent successfully - - `messageId`: The unique ID assigned by SQS to the sent message - - `errorMessage`: Error message if the operation failed - - ### Example 2: Query a DynamoDB table + ### Example: Query a DynamoDB table This example demonstrates how to query a DynamoDB table using the `aws.execute.api` action with session credentials. ```yaml - name: dynamodb_query_example + name: aws_execute_api_dynamoDB_dks workflowInputs: - awsAccessKeyId: + key: type: String - defaultValue: "${{ :secrets:AWS_ACCESS_KEY_ID }}" - awsSecretAccessKey: + defaultValue: "${{ :secrets: }}" + access: type: String - defaultValue: "${{ :secrets:AWS_SECRET_ACCESS_KEY }}" - awsSessionToken: + defaultValue: "${{ :secrets: }}" + region: type: String defaultValue: us-east-2 tableName: type: String - defaultValue: workflow-definitions-prod + defaultValue: workflow-definitions-dev scopedName: type: String - description: "The scoped name to query" version: type: String defaultValue: "1" steps: - - name: queryDynamoDB + - name: executeApi type: action action: aws.execute.api version: 1 inputs: - awsAccessKeyId: ${{ .workflowInputs.awsAccessKeyId }} - awsSecretAccessKey: ${{ .workflowInputs.awsSecretAccessKey }} - awsSessionToken: ${{ .workflowInputs.awsSessionToken }} - region: ${{ .workflowInputs.awsRegion }} + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} service: dynamodb api: query parameters: TableName: ${{ .workflowInputs.tableName }} - KeyConditionExpression: "ScopedName = :scopedNameValue AND Version = :versionValue" + KeyConditionExpression: "ScopedName = :scopedNameValue AND Version = :VersionValue" ExpressionAttributeValues: ":scopedNameValue": S: ${{ .workflowInputs.scopedName }} - ":versionValue": + ":VersionValue": N: ${{ .workflowInputs.version }} selectors: - - name: success - expression: '.success' - name: response expression: '.response' - name: errorMessage expression: '.errorMessage' - - - name: logResult + - name: success + expression: '.success' + + + - name: wait + type: wait + seconds: 2 + + - name: logOutput + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: 'The execute API message output is:${{ .steps.executeApi.outputs.response.Item }}' + licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' + - name: logOutput1 + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: 'does execute API have any error :${{ .steps.executeApi.outputs.errorMessage }}' + licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' + - name: logOutput2 type: action - action: newrelic.ingest.sendLogs + action: newrelic.instrumentation.log version: 1 inputs: - message: 'DynamoDB query result: ${{ .steps.queryDynamoDB.outputs.response.Items }}' - licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' + message: 'is execute successful :${{ .steps.executeApi.outputs.success }}' + licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' ``` **Required IAM policy for this example:** diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx index aef1bd53c0f..d30ba62237e 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx @@ -105,8 +105,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Optional Map - `payload: - user: R2-D2` + `payload: user: R2-D2` @@ -117,16 +116,6 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - - - **Action Timeout**: This action has a maximum 1-minute(60-second) timeout for synchronous invocations - - **Long-Running Functions**: For functions that may run longer than 1 minute, you must use the Event InvocationType. This invokes the function asynchronously. You can then use other actions (like aws.cloudwatch.getLogEvents or checking an SQS/SNS callback) to get the result. - - `InvocationType` is critical: - - `RequestResponse` (default): Invokes the function synchronously. The action waits for the function to complete and returns the response. - - `Event`: Invokes the function asynchronously. The action returns a success status immediately without waiting for the code to finish. - - `ClientContext` is for advanced use cases and the provided String must be Base64-encoded - - Any additional API parameters not listed above can be passed in the `parameters` map. To support a wide range of inputs, the `parameters` map accepts any optional argument available in the official boto3 API documentation. This allows you to dynamically construct requests by adding multiple fields. - @@ -140,60 +129,156 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - **response** - object + **payload** + Map - ```yaml - [{"success":true,"response":{"StatusCode":200,"ExecutedVersion":"$LATEST","Payload":{"statusCode":200,"body":"\"Hello userName\""}}}] + ```yaml + { + statusCode=200.0, + body=\"Hello R2-D2!\" + } ``` -

- Response syntax can be referred to [invoke - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/invoke.html) -

+ + **statusCode** + Int + `statusCode: 200` + + + **executedVersion** + String + `executedVersion: "$LATEST"` + + + **functionError** + String + `functionError: "Unhandled::Error occurred"` + **success** Boolean - `success: true | false` + `Status of the request` **errorMessage** String - `"errorMessage": "ValidationException: 1 validation error detected"` + `Failure reason as message` + + + - In action input at least one of the AWS Credentials (short, long, role) should be provided, where role take precedence over the others. + - In action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided make sure they are static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to action input. + - The credential owner must have the `lambda:InvokeFunction` IAM permission to invoke the lambda function passed in the action input. + - The selectors to get the only specified parameters as output. +
- + + + + + + +
Workflow exampleWorkflow definitionInputsOutputsOutputs when selectors are provided
```yaml - name: lambda-invoke-function-test - description: 'Invokes a Lambda function with a payload' + name: LambdaTest + workflowInputs: - arnRole: + region: type: String + functionName: + type: String + payload: + type: Map + defaultValue: {} + steps: - - name: aws_lambda_invoke_1 + - name: awsLambda type: action action: aws.lambda.invoke - version: '1' + version: 1 inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-1 - functionName: my-lambda-processor - payload: '{"orderId": "12345", "amount": 99.99}' - next: end + region: ${{ .workflowInputs.region }} + functionName: ${{ .workflowInputs.functionName }} + awsAccessKeyId: ${{ :secrets:awsAccessKeyId }} + awsSecretAccessKey: ${{ :secrets:awsSecretAccessKey }} + awsSessionToken: ${{ :secrets:awsSessionToken }} + payload: ${{ .workflowInputs.payload }} + selectors: ${{ .workflowInputs.selectors }} + + - name: logOutput + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: 'The lambda function message output is:${{ .steps.awsLambda.outputs.payload.body }}' + licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' + ``` + + ```yaml + { + "inputs": [ + { + "key": "region" + "value": "\"us-east-2\"" + }, + { + "key": "functionName" + "value": "\"hello-you\"" + }, + { + "key": "payload" + "value": "{\"user\":\"R2-D2\"}" + }, + { + "key": "selectors" + "value": "[{\"name\": \"payload\", \"expression\": \".payload\"}]" + } + ] + } ``` + ```yaml + Success case: + { + success: true + executedVersion=$LATEST, + statusCode=200, + payload={ + statusCode=200.0, + body=\"Hello R2-D2\" + } + } + + Failure case: + { + "errorMessage": "Invalid format", + "success": false + } + ``` + + ```yaml + { + payload={ + statusCode=200.0, + body=\"Hello R2-D2\" + } + } + ``` +
@@ -204,7 +289,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Modifies the configuration of a specific AWS Lambda function. Provide only the parameters you want to change. @@ -395,7 +480,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Retrieves the configuration details, code location, and other metadata for a specific AWS Lambda function. @@ -565,7 +650,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Returns a list of aliases for a specific AWS Lambda function. Aliases are pointers to function versions. @@ -675,7 +760,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - **Pagination**: Use the Marker and MaxItems inputs to paginate through a large number of aliases. + - **Pagination**: Use the `Marker` and `MaxItems` inputs to paginate through a large number of aliases. - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields.
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx index b7dbb919616..e4003b29f26 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx @@ -30,218 +30,8 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - Launches the specified number of instances using an AMI for which you have permissions. - - You can specify a number of options, or leave the default options. The following rules apply: - - If you don’t specify a subnet ID, we choose a default subnet from your default VPC for you. If you don’t have a default VPC, you must specify a subnet ID in the request. - - If any of the AMIs have a product code attached for which the user has not subscribed, the request fails. - - - - - Inputs - - - Outputs - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**imageId**RequiredString`“ami-0ca4d5db4872d0c28”`
**instanceType**RequiredString`“t2.micro”`
**minCount**RequiredInt`1`
**maxCount**RequiredInt`10`
**parameters**OptionalMap - ```yaml - { - "EbsOptimized": false, - "TagSpecifications": [ - { - "ResourceType": "instance", - "Tags": [ - { - "Key": "Name", - "Value": "My-Web-Server" - } - ] - } - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**object -

- Response syntax can be referred: [run_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/run_instances.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: ec2_run_instance - workflowInputs: - arnRole: - type: String - required: true - steps: - - name: RunInstance - type: action - action: aws.ec2.runInstances - version: '1' - inputs: - awsRoleArn: ${{.workflowInputs.arnRole}} - region: us-east-2 - imageId: ami-0ca4d5db4872d0c28 - instanceType: t2.micro - minCount: 1 - maxCount: 1 - parameters: - EbsOptimized: false - TagSpecifications: - - ResourceType: instance - Tags: - - Key: Name - Value: My-Test-Instance - selectors: - - name: instanceId - expression: .response.Instances[0].InstanceId - ``` -
-
-
-
-
-
- -## Systems Manager actions - - - Writes a document to the AWS account based on the AWS credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) @@ -272,15 +62,21 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + **awsRoleArn** + Optional + String + `arn:aws:iam::123456789012:role/my-workflow-role` + **awsAccessKeyId** - Required + Optional String `${{ :secrets: }}` **awsSecretAccessKey** - Required + Optional String `${{ :secrets: }}` @@ -306,28 +102,44 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **documentType** Optional String - `documentType: "Command"` + + `documentType: "Command"` +

Check valid values from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#API_CreateDocument_RequestSyntax:~:text=Required%3A%20No-,DocumentType,-The%20type%20of).

+ **documentFormat** Optional String - `documentFormat: "YAML"` + + `documentFormat: "YAML"` +

Check valid values from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#API_CreateDocument_RequestSyntax:~:text=Required%3A%20No-,DocumentFormat,-Specify%20the%20document).

+ **documentContent** Required String - + Check example **override** Optional Boolean - `override: true (default)`. When `true`, always write the document with the provided name even if one already exist. When `false`, if a document with the provided `documentName` already exist, the action returns `success: false` and `errorMessage:Document already exists`. Please enable override if you want to update the existing document. + `override: true (default)`. + +

When `true`, always write the document with the provided name even if one already exist.

+ +

When `false`, if a document with the provided `documentName` already exist, the action returns `success: false` and `errorMessage: Document already exists. Please enable override if you want to update the existing document.`

+ + **selectors** + Optional + list + `[{\"name\": \"documentName\", \"expression\": \".documentName\"}, {\"name\": \"documentType\", \"expression\": \".documentType\"}, {\"name\": \"documentStatus\", \"expression\": \".documentStatus\"}, {\"name\": \"success\", \"expression\": \".success\"}]` +
@@ -338,7 +150,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Output Field Type - Example + Description and example @@ -360,7 +172,11 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **documentStatus** String - `documentStatus: "Active"`. + + `documentStatus: "Active"` + +

The value will be one of the statuses from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DocumentDescription.html#systemsmanager-Type-DocumentDescription-Status:~:text=Required%3A%20No-,Status,-The%20status%20of).

+ **success** @@ -374,59 +190,473 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + + - In action input, only `awsAccessKeyId` and `awsSecretAccessKey` can be provided but they should be static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to action input. + - The selectors to get the only specified parameters as output. + - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. + - - - - - - - - - - - - - - - -
Workflow definitionInputsOutputs
- ```yaml - schemaVersion: '0.3' - description: List all Lambda function names. - mainSteps: - - name: ExecuteAwsApi - action: aws:executeAwsApi - isEnd: true - ``` - - ```yaml - inputs: + + **Example 1**: A simple SSM document to list all lambda function + + ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + inputs: Service: lambda Api: ListFunctions - ``` - - ```yaml - outputs: - - Name: resultFunctionName - Selector: $..FunctionName - Type: StringList - outputs: - - ExecuteAwsApi.resultFunctionName - ``` -
+ outputs: + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` + + **Complete autoflows definition with SSM listing lambda functions** + + ```yaml + name: aws-api + + workflowInputs: + key: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_ACCESS_KEY_ID }}" + access: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SECRET_ACCESS_KEY }}" + token: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SESSION_TOKEN }}" + region: + type: String + defaultValue: us-east-2 + + steps: + - name: createSsmDocument + type: action + action: aws.systemsManager.writeDocument + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + selectors: + - name: documentName + expression: '.documentName' + - name: documentType + expression: '.documentType' + - name: documentStatus + expression: '.documentStatus' + - name: success + expression: '.success' + documentName: "LambdaListFunctionNames" + documentContent: | + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + inputs: + Service: lambda + Api: ListFunctions + outputs: + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + + - name: generateIdempotencyToken + type: action + action: utils.uuid.generate + version: 1 + + - name: start1 + type: action + action: aws.systemsManager.startAutomation + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + documentName: "${{ .steps.createSsmDocument.outputs.documentName }}" + idempotencyToken: ${{ .steps.generateIdempotencyToken.outputs.uuid }} + + - name: waitForCompletion + type: action + action: aws.systemsManager.waitForAutomationStatus + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + automationExecutionId: ${{ .steps.start1.outputs.automationExecutionId }} + # Optional, default is Success and Failed + automationExecutionStatuses: + - "Success" + - "Failed" + timeout: 60 + + - name: hasCompleted + type: switch + switch: + - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }} + next: displayError + - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }} + next: displaySuccess + next: displayUnexpected + + - name: displayUnexpected + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "Unexpected status ${{ .steps.waitForCompletion.outputs.automationExecutionStatus | tojson }}" + next: cleanupSsmDocument + + - name: displaySuccess + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "This is all the lambda function names on the region ${{ .workflowInputs.region }}:${{ .steps.waitForCompletion.outputs.automationExecutionOutputs.ExecuteAwsApi.resultFunctionName | join(\",\") }}" + next: cleanupSsmDocument + + - name: displayError + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "Error while executing document ${{ .steps.createSsmDocument.outputs.documentName }}, detail: ${{ .steps.waitForCompletion.outputs.errorMessage }}" + next: cleanupSsmDocument + + - name: cleanupSsmDocument + type: action + action: aws.systemsManager.deleteDocument + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + documentName: ${{ .steps.createSsmDocument.outputs.documentName }} + ``` + + ** Example 2: Execute a Python script** + + + Using the AWS `SystemsManager` automation and document action, we can define a workflow definition that execute a python script. + + Here is a short example illustrating with a simple Hello World application. + + + ```yaml + schemaVersion: '0.3' + description: "Run a Python script that says 'Hello' to the username passed as input and capture the output." + parameters: + Username: + type: String + description: "The username to greet." + default: "User" + mainSteps: + - action: aws:executeScript + name: pythonStep + inputs: + Runtime: python3.8 + Handler: script_handler + Script: | + def script_handler(event, context): + username = event['username'] + return f'Hello {username}' + InputPayload: + username: "{{ Username }}" + outputs: + - Name: scriptOutput + Type: String + Selector: $.Payload + outputs: + - pythonStep.scriptOutput + ``` + + This can then be used in the workflow below: + + + ```yaml + name: aws-python-script + + workflowInputs: + key: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_ACCESS_KEY_ID }}" + access: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SECRET_ACCESS_KEY }}" + token: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SESSION_TOKEN }}" + region: + type: String + defaultValue: us-west-2 + name: + type: String + defaultValue: ExecuteHelloPythonScript + username: + type: String + defaultValue: World! + + steps: + - name: generateIdempotencyToken + type: action + action: utils.uuid.generate + version: 1 + + - name: createSsmDocument + type: action + action: aws.systemsManager.writeDocument + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + documentName: ${{ .workflowInputs.name }} + documentContent: | + schemaVersion: '0.3' + description: "Run a Python script that says 'Hello' to the username passed as input and capture the output." + parameters: + Username: + type: String + description: "The username to greet." + default: "User" + mainSteps: + - action: aws:executeScript + name: pythonStep + inputs: + Runtime: python3.8 + Handler: script_handler + Script: | + def script_handler(event, context): + username = event['username'] + return f'Hello {username}' + InputPayload: + username: "{{ Username }}" + outputs: + - Name: scriptOutput + Type: String + Selector: $.Payload + outputs: + - pythonStep.scriptOutput + + - name: start1 + type: action + action: aws.systemsManager.startAutomation + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + documentName: "${{ .steps.createSsmDocument.outputs.documentName }}" + idempotencyToken: ${{ .steps.generateIdempotencyToken.outputs.uuid }} + parameters: + Username: ${{ .workflowInputs.username }} + + - name: waitForCompletion + type: action + action: aws.systemsManager.waitForAutomationStatus + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + automationExecutionId: ${{ .steps.start1.outputs.automationExecutionId }} + # Optional, default is Success and Failed + automationExecutionStatuses: + - "Success" + - "Failed" + timeout: 300 + + - name: hasCompleted + type: switch + switch: + - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }} + next: displayError + - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }} + next: displaySuccess + next: displayUnexpected + + - name: displayUnexpected + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "Unexpected status ${{ .steps.waitForCompletion.outputs.automationExecutionStatus | tojson }}" + next: cleanupSsmDocument + + - name: displaySuccess + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "This is the results of the automation that was run on the region ${{ .workflowInputs.region }}:${{ .steps.waitForCompletion.outputs.automationExecutionOutputs.pythonStep.scriptOutput | tojson }}" + next: cleanupSsmDocument + + - name: displayError + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "Error while executing document ${{ .steps.createSsmDocument.outputs.documentName }}, detail: ${{ .steps.waitForCompletion.outputs | tojson }}" + next: cleanupSsmDocument + + - name: cleanupSsmDocument + type: action + action: aws.systemsManager.deleteDocument + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + documentName: ${{ .steps.createSsmDocument.outputs.documentName }} + ``` + + This can be started with the following NerdGraph mutation, assuming the AWS temporary secrets have been previously stored with the `secretsManagementCreateSecretNerdGraph` mutations. + + ```yaml + mutation { + autoflowsStartWorkflowRun(accountId: 11933347, + definition: { + name: "aws-python-script", + }, workflowInputs: [ + {key: "key" value: "${{ :secrets:testUser123_AWS_ACCESS_KEY_ID }}"} + {key: "access" value: "${{ :secrets:testUser123_AWS_SECRET_ACCESS_KEY }}"} + {key: "token" value: "${{ :secrets:testUser123_AWS_SESSION_TOKEN }}"} + {key: "region" value:"us-west-2"} + {key: "username" value: "Julien"} + ]) + { runId } + } + ``` + + Executing the mutation above, returns a runId, for example `207e8c23-2c89-4af2-a74f-3c9ea2ffd543`. This runId can then be used to query the Logs and see the following output: + + Image of a python script execution output + + + + + **Example 3: A more complex SSM document** + + 1. Step-1: Get the list of API gateway rest APIs. Filter my api (`Test API`) and get the rest API id. + 2. Get the list of all resources inside my api (`Test API`). Filter my specific resource based on pathPart(`/test`) and get the resourceID + 3. Get the list of versions for my lambda function (`ApiGwTestFn`). Filter the specific version that I want to rollback to (version: 1) and get the functionArn of that version. + 4. Update the API gateway integration with the lambda functionArn acquired in the above step. + 5. Create a new deployment for my rest API (`Test API`). + + + ```yaml + schemaVersion: '0.3' + description: Test SSM for API gateway rollback + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + nextStep: ExecuteGetApiResources + inputs: + Service: apigateway + Api: GetRestApis + outputs: + - Name: resultApiId + Selector: $.items[?(@.name=='Test API')].id + Type: String + - name: ExecuteGetApiResources + action: aws:executeAwsApi + nextStep: ExecuteListVersionsByFunction + inputs: + Service: apigateway + Api: GetResources + restApiId: '{{ ExecuteAwsApi.resultApiId }}' + outputs: + - Name: resultResourceId + Selector: $.items[?(@.pathPart=='test')].id + Type: String + - name: ExecuteListVersionsByFunction + action: aws:executeAwsApi + nextStep: ExecuteApiGwUpdateIntg + inputs: + Service: lambda + Api: ListVersionsByFunction + FunctionName: ApiGwTestFn + outputs: + - Name: resultLambdaVersionArn + Selector: $.Versions[?(@.Version=='1')].FunctionArn + Type: String + - name: ExecuteApiGwUpdateIntg + action: aws:executeAwsApi + nextStep: ExecuteApiGwCreateDeployment + inputs: + Service: apigateway + Api: UpdateIntegration + restApiId: '{{ ExecuteAwsApi.resultApiId }}' + resourceId: '{{ ExecuteGetApiResources.resultResourceId }}' + httpMethod: GET + patchOperations: + - op: replace + path: /uri + value: arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/{{ ExecuteListVersionsByFunction.resultLambdaVersionArn }}/invocations + - name: ExecuteApiGwCreateDeployment + action: aws:executeAwsApi + inputs: + Service: apigateway + Api: CreateDeployment + restApiId: '{{ ExecuteAwsApi.resultApiId }}' + outputs: + - ExecuteGetApiResources.resultResourceId + - ExecuteListVersionsByFunction.resultLambdaVersionArn + ``` + + + The sample SSM outputs `ExecuteGetApiResources.resultResourceId` and `ExecuteListVersionsByFunction.resultLambdaVersionArn`. These outputs can be used in further steps in the workflow definition.
- Deletes an AWS document in the AWS account based on the credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) + This action is to delete an AWS SSM document in the AWS account based on the credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) @@ -455,6 +685,12 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + **awsRoleArn** + Optional + String + `arn:aws:iam::123456789012:role/my-workflow-role` + **awsAccessKeyId** Required @@ -485,6 +721,12 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s String `documentName: "my-ssm-document"` + + **selectors** + Optional + List + `[{\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"documentName\", \"expression\": \".documentName\"}]` + @@ -502,7 +744,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **documentName** String - documentName: "my-ssm-document" + `documentName: "my-ssm-document"` **success** @@ -516,59 +758,179 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + + - In action input, only `awsAccessKeyId` and `awsSecretAccessKey` can be provided but they should be static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to action input. + - The selectors to get the only specified parameters as output. + - - - - - - - - - - - - - - - -
Workflow definitionInputsOutputs
- ```yaml + + A simple SSM document to list all lambda function + + ```yaml schemaVersion: '0.3' description: List all Lambda function names. mainSteps: - name: ExecuteAwsApi action: aws:executeAwsApi isEnd: true - ``` - - ```yaml - inputs: - Service: lambda - Api: ListFunctions - ``` - - ```yaml - outputs: + inputs: + Service: lambda + Api: ListFunctions + outputs: - Name: resultFunctionName Selector: $..FunctionName Type: StringList outputs: - ExecuteAwsApi.resultFunctionName ``` -
-
+ + **The complete workflow definition with SSM**: + + ```yaml + name: aws-api + + workflowInputs: + key: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_ACCESS_KEY_ID }}" + access: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SECRET_ACCESS_KEY }}" + token: + type: String + defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SESSION_TOKEN }}" + region: + type: String + defaultValue: us-east-2 + + steps: + - name: createSsmDocument + type: action + action: aws.systemsManager.writeDocument + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + selectors: + - name: documentName + expression: '.documentName' + - name: documentType + expression: '.documentType' + - name: documentStatus + expression: '.documentStatus' + - name: success + expression: '.success' + documentName: "LambdaListFunctionNames" + documentContent: | + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + inputs: + Service: lambda + Api: ListFunctions + outputs: + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + + - name: generateIdempotencyToken + type: action + action: utils.uuid.generate + version: 1 + + - name: start1 + type: action + action: aws.systemsManager.startAutomation + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + documentName: "${{ .steps.createSsmDocument.outputs.documentName }}" + idempotencyToken: ${{ .steps.generateIdempotencyToken.outputs.uuid }} + + - name: waitForCompletion + type: action + action: aws.systemsManager.waitForAutomationStatus + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + automationExecutionId: ${{ .steps.start1.outputs.automationExecutionId }} + # Optional, default is Success and Failed + automationExecutionStatuses: + - "Success" + - "Failed" + timeout: 60 + + - name: hasCompleted + type: switch + switch: + - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }} + next: displayError + - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }} + next: displaySuccess + next: displayUnexpected + + - name: displayUnexpected + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "Unexpected status ${{ .steps.waitForCompletion.outputs.automationExecutionStatus | tojson }}" + next: cleanupSsmDocument + + - name: displaySuccess + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "This is all the lambda function names on the region ${{ .workflowInputs.region }}:${{ .steps.waitForCompletion.outputs.automationExecutionOutputs.ExecuteAwsApi.resultFunctionName | join(\",\") }}" + next: cleanupSsmDocument + + - name: displayError + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: "Error while executing document ${{ .steps.createSsmDocument.outputs.documentName }}, detail: ${{ .steps.waitForCompletion.outputs.errorMessage }}" + next: cleanupSsmDocument + + - name: cleanupSsmDocument + type: action + action: aws.systemsManager.deleteDocument + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + documentName: ${{ .steps.createSsmDocument.outputs.documentName }} + ``` +
- Starts an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartAutomationExecution.html) + Starts an automation using an AWS SSM document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartAutomationExecution.html) @@ -597,15 +959,21 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + **awsRoleArn** + Optional + String + `arn:aws:iam::123456789012:role/my-workflow-role` + **awsAccessKeyId** - Required + Optional String `${{ :secrets: }}` **awsSecretAccessKey** - Required + Optional String `${{ :secrets: }}` @@ -637,7 +1005,16 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **idempotencyToken** Optional UUID - `idempotencyToken: "any token"` + + `idempotencyToken: "any token"` +

This will be passed as client token for idempotency to start aws ssm automation.

+ + + + **selectors** + Optional + List + `[{\"name\": \"automationExecutionId\", \"expression\": \".automationExecutionId\"}, {\"name\": \"success\", \"expression\": \".success\"}]` @@ -657,7 +1034,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **automationExecutionId** String `automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"` - + **success** Boolean @@ -670,6 +1047,13 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + + - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. + - Use selectors to get only the specified parameters as output. + @@ -717,7 +1101,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s
Waits for an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) for more information. @@ -783,19 +1167,28 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **automationExecutionId** Required String - `automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`. The automation executionID for which we need to wait for its completion. + `automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`. The automation `executionId` for which we need to wait for its completion. **automationExecutionStatuses** Optional List - List of automation execution statuses from [AutomationExecution](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_AutomationExecution.html#AutomationExecutionStatus) that can stop the waiting, `Default: ["Success", "Failed"]` + + `automationExecutionStatuses: ["status1", "status2"]` +

List of automation execution statuses from [AutomationExecution](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_AutomationExecution.html#AutomationExecutionStatus) that can stop the waiting.

`Default: ["Success", "Failed"]`

+ **timeout** Optional int - `timeout: 600`. The duration in seconds can wait for automation status to be one of the expected `automationExecutionStatuses`. Post this timeout duration, the action return value with timeout error. + + `timeout: 180`(default), maximum 600. + +

The duration in seconds we can wait for automation status to be one of the expected `automationExecutionStatuses`.

+ +

If timeout occurred, the output contains `success: false` and `errorMessag: Timeout waiting for automation status`.

+ **selectors** @@ -805,13 +1198,6 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - - 1. In the action input, only `awsAccessKeyId` and `awsSecretAccessKey` can be provided, but they should be static credentials of an IAM user. - 2. If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. - 3. Refer to the instructions to set up [AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials). - 4. Use selectors to get only the specified parameters as output. - @@ -832,7 +1218,13 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **automationExecutionStatus** String - `automationExecutionStatus: "Success"`. If action is successful, It will either of the values passed in `automationExecutionStatuses` input field. Else, this will be null. + + `automationExecutionStatus: "Success"` + +

If action is successful, It will either of the values passed in `automationExecutionStatuses` input field.

+ +

Else, this will be null.

+ **automationExecutionOutputs** @@ -847,7 +1239,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s }, "ExecuteListVersionsByFunction": { "resultLambdaVersionArn": [ - "arn:aws:lambda:us-east-2:123456789012:function:ApiGwTestFn:1" + "arn:aws:lambda:us-east-2:661945836867:function:ApiGwTestFn:1" ] } } @@ -869,6 +1261,13 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + + 1. In the action input, only `awsAccessKeyId` and `awsSecretAccessKey` can be provided, but they should be static credentials of an IAM user. + 2. If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + 3. Refer to the instructions to set up [AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials). + 4. Use selectors to get only the specified parameters as output. +
@@ -914,8 +1313,4 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s
-
- -## General AWS actions - diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete.mdx index 4ebcb76b483..0bc00996e03 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete.mdx @@ -1,5 +1,5 @@ --- -title: "HTTP DELETE" +title: "HTTP Delete" tags: - workflow automation - workflow @@ -31,19 +31,24 @@ Before using HTTP actions in workflow automation, ensure you have: Performs an HTTP DELETE request to remove data at an API endpoint. - + If you need to pass sensitive data to an input, for example an `Api-Key` header, you can use values stored via the [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph mutation. Example: ```json { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + "inputs": [ + { + "key": "headers", + "value": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + } + ] } ``` @@ -123,6 +128,16 @@ Performs an HTTP DELETE request to remove data at an API endpoint. Integer The HTTP status code of the response. + + **success** + Boolean + Status of the request. + + + **errorMessage** + String + Failure reason as message. + @@ -131,7 +146,9 @@ Performs an HTTP DELETE request to remove data at an API endpoint. - + + + @@ -139,45 +156,56 @@ Performs an HTTP DELETE request to remove data at an API endpoint. + + @@ -186,4 +214,5 @@ Performs an HTTP DELETE request to remove data at an API endpoint. - \ No newline at end of file + + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get.mdx index 6fb18411a89..622b039ece7 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get.mdx @@ -1,5 +1,5 @@ --- -title: "HTTP GET" +title: "HTTP Get" tags: - workflow automation - workflow @@ -30,18 +30,28 @@ Before using HTTP actions in workflow automation, ensure you have: HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. - - - -Perform an HTTP GET call to retrieve data from an API endpoint. + Perform an HTTP GET call to retrieve data from an API endpoint. - - This supports secret syntax for any header value. + + If you need to pass sensitive data to an input, for example an Api-Key header, you can use values stored via the [secretsManagementCreateSecret](https://onenr.io/0KQXX6BmdQa) NerdGraph mutation. + + **Example** + + ```yaml + { + "inputs": [ + { + "key": "headers", + "value": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + } + ] + } +``` @@ -113,12 +123,22 @@ Perform an HTTP GET call to retrieve data from an API endpoint. - + + + + + + + + + + +
Workflow exampleWorkflow definitionInputOutput
```yaml name: httpDeleteTest - description: 'Performs an HTTP DELETE request to remove data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - selectors: - type: String steps: - name: query type: action action: http.delete - version: '1' + version: 1 inputs: url: ${{ .workflowInputs.url }} urlParams: ${{ .workflowInputs.urlParams }} headers: ${{ .workflowInputs.headers }} selectors: ${{ .workflowInputs.selectors }} - next: end ``` - - **Example inputs:** - ```json + + ```yaml { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" + "inputs": [ + { + "key": "url", + "value": "https://example.com" + }, + { + "key": "urlParams", + "value": "{\"foo\": \"bar\"}" + }, + { + "key": "headers", + "value": "{\"baz\": \"bat\"}" + }, + { + "key": "selectors", + "value": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" + } + ] } ``` - - **Example outputs:** - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } + + ```yaml + Success case: + { + "success": true + "responseBody": "\n...\n", + "statusCode": 200 + } + + Failure case: + { + "errorMessage": "An unexpected error failed to call http delete endpoint.", + "success": false + } ```
**responseBody** String The body of the response.
**statusCode** Integer The HTTP status code of the response.
**success**BooleanStatus of the request.
**errorMessage**StringFailure reason as message.
@@ -127,7 +147,9 @@ Perform an HTTP GET call to retrieve data from an API endpoint. - + + + @@ -135,41 +157,56 @@ Perform an HTTP GET call to retrieve data from an API endpoint. + + @@ -178,5 +215,4 @@ Perform an HTTP GET call to retrieve data from an API endpoint. - - + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post.mdx index 562d6c1ad31..4e6c238ac39 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post.mdx @@ -1,5 +1,5 @@ --- -title: "HTTP POST" +title: "HTTP Post" tags: - workflow automation - workflow @@ -30,18 +30,28 @@ Before using HTTP actions in workflow automation, ensure you have: HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. - - - Performs an HTTP POST call to send data to an API endpoint. - - This supports secret syntax for any header value. + + If you need to pass sensitive data to an input, for example an Api-Key header, you can use values stored via the [secretsManagementCreateSecret](https://onenr.io/0KQXX6BmdQa) NerdGraph mutation. + + **Example** + + ```yaml + { + "inputs": [ + { + "key": "headers", + "value": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + } + ] + } +``` @@ -125,6 +135,16 @@ Performs an HTTP POST call to send data to an API endpoint. + + + + + + + + + +
Workflow exampleWorkflow definitionInputOutput
```yaml name: httpGetTest - description: 'Performs an HTTP GET request to retrieve data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String steps: - name: query type: action action: http.get - version: '1' + version: 1 inputs: url: ${{ .workflowInputs.url }} urlParams: ${{ .workflowInputs.urlParams }} headers: ${{ .workflowInputs.headers }} - next: end + selectors: ${{ .workflowInputs.selectors }} ``` - - **Example inputs:** - ```json + + ```yaml { - "url": "https://example.com", - "urlParams": "{\"foo\": \"bar\"}", - "headers": "{\"baz\": \"bat\"}" + "inputs": [ + { + "key": "url", + "value": "https://example.com" + }, + { + "key": "urlParams", + "value": "{\"foo\": \"bar\"}" + }, + { + "key": "headers", + "value": "{\"baz\": \"bat\"}" + }, + { + "key": "selectors", + "value": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" + } + ] } ``` - - **Example outputs:** - ```json - { - "responseBody": "\n...\n", - "statusCode": 200 - } + + ```yaml + Success case: + { + "responseBody": "\n...\n", + "statusCode": 200 + "success": true + } + + Failure case: + { + "errorMessage": "An unexpected error failed to call http get endpoint.", + "success": false + } ```
Integer The HTTP status code of the response.
**success**BooleanStatus of the request.
**errorMessage**StringFailure reason as message.
@@ -133,7 +153,9 @@ Performs an HTTP POST call to send data to an API endpoint. - + + + @@ -141,45 +163,62 @@ Performs an HTTP POST call to send data to an API endpoint. + + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put.mdx index b0884f726b1..9e7a21ed980 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put.mdx @@ -1,5 +1,5 @@ --- -title: "HTTP PUT" +title: "HTTP Put" tags: - workflow automation - workflow @@ -30,9 +30,6 @@ Before using HTTP actions in workflow automation, ensure you have: HTTP actions support secret syntax for any header value, allowing you to securely pass sensitive data like API keys. See [secrets management](/docs/infrastructure/host-integrations/installation/secrets-management/) for more information. - - - - If you need to pass sensitive data to an input, for example an `Api-Key` header, you can use values stored via the [secretsManagementCreateSecret](https://one.newrelic.com/nerdgraph-graphiql) NerdGraph mutation. + + If you need to pass sensitive data to an input, for example an `Api-Key` header, you can use values stored via the [secretsManagementCreateSecret](https://onenr.io/0KQXX6BmdQa) NerdGraph mutation. Example: ```json { - "headers": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + "inputs": [ + { + "key": "headers", + "value": "{\"Api-Key\": \"${{ :secrets:NR_API_KEY }}\"}" + } + ] } ``` @@ -132,6 +134,16 @@ Performs an HTTP PUT request to update data at an API endpoint. + + + + + + + + + +
Workflow exampleWorkflow definitionInputOutput
```yaml name: httpPostTest - description: 'Performs an HTTP POST request to send data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String + steps: - name: query type: action action: http.post - version: '1' + version: 1 inputs: url: ${{ .workflowInputs.url }} urlParams: ${{ .workflowInputs.urlParams }} headers: ${{ .workflowInputs.headers }} body: ${{ .workflowInputs.body }} - next: end + selectors: ${{ .workflowInputs.selectors }} ``` - - **Example inputs:** - ```json + + ```yaml { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}" + "inputs": [ + { + "key": "url", + "value": "https://example.com" + }, + { + "key": "headers", + "value": "{\"Content-Type\":\"application/json\"}" + }, + { + "key": "urlParams", + "value": "{\"foo\": \"bar\"}" + }, + { + "key": "body", + "value": "{\"foo\": \"bar\"}" + }, + { + "key": "selectors", + "value": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" + } + ] } ``` - - **Example outputs:** - ```json - { - "responseBody": "", - "statusCode": 200 - } + + ```yaml + Success case: + { + "success": true + "responseBody": "", + "statusCode": 200 + } + + Failure case: + { + "errorMessage": "An unexpected error failed to call http post endpoint.", + "success": false + } ```
Integer The HTTP status code of the response.
**success**BooleanStatus of the request.
**errorMessage**StringFailure reason as message.
@@ -140,7 +152,9 @@ Performs an HTTP PUT request to update data at an API endpoint. - + + + @@ -148,50 +162,63 @@ Performs an HTTP PUT request to update data at an API endpoint. + + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx index 673f0b796ba..14081573eb9 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx @@ -28,8 +28,6 @@ Before using New Relic actions in workflow automation, ensure you have: See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. - - ## Data ingest actions diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph.mdx index 692f42eda68..c889cb49b32 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph.mdx @@ -29,7 +29,6 @@ Before using New Relic actions in workflow automation, ensure you have: See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. - ## NerdGraph actions @@ -167,7 +166,7 @@ Executes a Graphql command against newrelic NerdGraph API. The command can eithe diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx index e2dac2add33..af06bea277f 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx @@ -29,8 +29,6 @@ Before using communication actions in workflow automation, ensure you have: See [Add Slack configuration](/docs/autoflow/overview#add-the-slack-integration) for information on how to set up Slack integration. - - ## Slack actions diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/script-run.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/script-run.mdx new file mode 100644 index 00000000000..675f3050907 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/script-run.mdx @@ -0,0 +1,218 @@ +--- +title: "Auth JWT actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - Auth actions + - Auth JWT actions +metaDescription: "A list of available auth jwt actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for authentication actions available in the workflow automation actions catalog. These actions enable you to create and manage JSON Web Tokens (JWT) for secure authentication in your workflows. + + + + Execute a python script and returns the response to a workflow. + + + + + Inputs + + + + Outputs + + + + Example + + + + + +
Workflow exampleWorkflow definitionInputsOutputs
```yaml name: httpPutTest - description: 'Performs an HTTP PUT request to update data' - workflowInputs: - url: - type: String - urlParams: - type: String - headers: - type: String - body: - type: String - selectors: - type: String + steps: - name: query type: action action: http.put - version: '1' + version: 1 inputs: url: ${{ .workflowInputs.url }} urlParams: ${{ .workflowInputs.urlParams }} headers: ${{ .workflowInputs.headers }} body: ${{ .workflowInputs.body }} selectors: ${{ .workflowInputs.selectors }} - next: end - ``` - - **Example inputs:** - ```json - { - "url": "https://example.com", - "headers": "{\"Content-Type\":\"application/json\"}", - "urlParams": "{\"foo\": \"bar\"}", - "body": "{\"foo\": \"bar\"}", - "selectors": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" - } - ``` - - **Example outputs:** - ```json + ``` + + ```yaml { - "responseBody": "", - "statusCode": 200 + "inputs": [ + { + "key": "url", + "value": "https://example.com" + }, + { + "key": "headers", + "value": "{\"Content-Type\":\"application/json\"}" + }, + { + "key": "urlParams", + "value": "{\"foo\": \"bar\"}" + }, + { + "key": "body", + "value": "{\"foo\": \"bar\"}" + }, + { + "key": "selectors", + "value": "[{\"name\": \"responseBody\", \"expression\": \".responseBody\"}, {\"name\": \"statusCode\", \"expression\": \".statusCode\"}]" + } + ] } - ``` + ``` + + ```yaml + Success case: + { + "responseBody": "", + "statusCode": 200 + "success": true + } + + Failure case: + { + "errorMessage": "An unexpected error failed to call http post endpoint.", + "success": false + } + ```
- ```yaml + ```yaml steps: - name: currentUserId type: action @@ -186,7 +185,7 @@ Executes a Graphql command against newrelic NerdGraph API. The command can eithe version: 1 inputs: name: ${{ .steps.currentUserId.outputs.data.currentUser.id }} - ``` + ```
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeDescriptionExample
**script**RequiredStringAny data transformation script + script: | + print("Hello, World!") +
**runtime**RequiredEnumRun time version of script`PYTHON_3_13`
**parameters**OptionalListlist of parameters to be used in script`parameters: ["--a", "10", "--b", "5"]`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldDatatypeExamples
**success**Boolean`true/false`
**payload**Object`"sessionId": "7fa97f26-3791-492e-a39b-53793163dfb9"`
**errorMessage**String`parsing error at line 9"`
+
+ + + + + + + + + + + + + +
Example
+ ```yaml + name: script-workflow + + steps: + - name: runScript + type: action + action: script.run + version: 1 + inputs: + script: | + import json + import argparse + + p = argparse.ArgumentParser() + p.add_argument("--a", type=int, required=True) + p.add_argument("--b", type=int, required=True) + args = p.parse_args() + # Data transformation: output original, squared, and sum + result = { + "original": {"a": args.a, "b": args.b}, + "transformed": {"a_squared": args.a ** 2, "b_squared": args.b ** 2}, + "sum": args.a + args.b + } + print(json.dumps(result)) + parameters: ["--a", "10", "--b", "5"] + runtime: PYTHON_3_13 + - name: logOutput + type: action + action: newrelic.ingest.sendLogs + version: 1 + inputs: + logs: + - message: "Hello from script testing : ${{ .steps.runScript.outputs.payload }}" + ``` +
+
+ + +
+ + +## What script.run can do + +### Supported python version + +- PYTHON_3_13 runtime with full language features + +### Allowed imports + +```yaml + "python-dateutil", + "simplejson", + "re", + "math", + "decimal", + "json", + "datetime", + "collections", + "itertools", + "functools", + "operator", + "string", + "argparse" +``` + +### Data handling + +- Parse and transform JSON data structures +- Process complex strings and perform text manipulation +- Format output as tables, markdown, or structured data + +### Parameter Ppssing + +- Pass simple values via command-line arguments with argparse + +## What script.run cannot do + +### Restricted imports + +- `base64` - Not allowed for security reasons +- `sys` - Not allowed for security reasons +- `os` - System operations restricted +- Most third-party libraries not included in Python 3.13 stdlib + +### Parameter limitations + +- Cannot pass complex JSON as command-line parameters (causes "Unsafe script argument" error) +- Cannot pass strings with special characters via parameters + +### Network/External access + +- No network calls or external API access +- No file system access outside script execution \ No newline at end of file diff --git a/static/images/python-script.webp b/static/images/python-script.webp new file mode 100644 index 0000000000000000000000000000000000000000..53a3f0e7361e23948f89057afac61662ee50b245 GIT binary patch literal 277250 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 Date: Fri, 21 Nov 2025 19:37:01 +0530 Subject: [PATCH 06/11] Updated the syntax errors --- .../actions-catalog/auth/auth-jwt-create.mdx | 10 +- .../actions-catalog/aws/aws-ec2.mdx | 188 ++++++++++++++++++ .../actions-catalog/aws/aws-execute-api.mdx | 4 +- .../aws/aws-systemsmanager.mdx | 8 +- src/nav/workflow-automation.yml | 55 +++++ 5 files changed, 253 insertions(+), 12 deletions(-) diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx index 07d737ff364..167e641908e 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create.mdx @@ -67,12 +67,10 @@ This page provides a comprehensive reference for authentication actions availabl **privateKey** String - The private key for signing a JWT. -

- 1. RS256 supports private key in PKCS#8 & PKCS#1 format. ES256 supports private key in PKCS#8 (.p8) format. - 2. Private Key must be provided as a secret expression. - 3. PrivateKey must be stored as single line string in Secrets. -

+ The private key for signing a JWT. + - RS256 supports private key in PKCS#8 & PKCS#1 format. ES256 supports private key in PKCS#8 (.p8) format. + - Private Key must be provided as a secret expression. + - PrivateKey must be stored as single line string in Secrets. `${{ :secrets:namespace:privateKey }}` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx index a86c6450b55..7e6e0fb0205 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx @@ -1267,6 +1267,194 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + + + + + Stops an Amazon EBS-backed instance + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**hibernate**OptionalBooleantrue or false (Default: `false`)
**force**OptionalBooleantrue or false (Default: `false`)
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + { + 'StoppingInstances': [ + { + 'InstanceId': 'string', + 'CurrentState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + }, + 'PreviousState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + } + }, + ] + } + ``` +

+ Response syntax can be referred [stop_instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/stop_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (InvalidInstanceID.Malformed) when calling the StopInstances operation: The instance ID 'i-123456789' is malformed"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ec2_stop_instance + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_stop_instances_1 + type: action + action: aws.ec2.stopInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
+
+
\ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx index 514e23781c8..7f50d13883c 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx @@ -214,7 +214,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **response** Object `{"response":` - }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html.` + }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html. **success** @@ -347,4 +347,4 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx index e4003b29f26..eae9e58f3c7 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx @@ -104,7 +104,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s String `documentType: "Command"` -

Check valid values from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#API_CreateDocument_RequestSyntax:~:text=Required%3A%20No-,DocumentType,-The%20type%20of).

+

Check valid values from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DocumentDescription.html#systemsmanager-Type-DocumentDescription-Status:text=Required%3A%20No-,Status,-The%20status%20of).

@@ -113,7 +113,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s String `documentFormat: "YAML"` -

Check valid values from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#API_CreateDocument_RequestSyntax:~:text=Required%3A%20No-,DocumentFormat,-Specify%20the%20document).

+

Check valid values from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DocumentDescription.html#systemsmanager-Type-DocumentDescription-Status:text=Required%3A%20No-,Status,-The%20status%20of).

@@ -175,7 +175,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s `documentStatus: "Active"` -

The value will be one of the statuses from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DocumentDescription.html#systemsmanager-Type-DocumentDescription-Status:~:text=Required%3A%20No-,Status,-The%20status%20of).

+

The value will be one of the statuses from [here](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DocumentDescription.html#systemsmanager-Type-DocumentDescription-Status:text=Required%3A%20No-,Status,-The%20status%20of).

@@ -1313,4 +1313,4 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - + \ No newline at end of file diff --git a/src/nav/workflow-automation.yml b/src/nav/workflow-automation.yml index 61a0640c6c4..86d257ae5f6 100644 --- a/src/nav/workflow-automation.yml +++ b/src/nav/workflow-automation.yml @@ -15,18 +15,73 @@ pages: pages: - title: Actions catalog overview path: /docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog + - title: Auth actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/auth + pages: + - title: JWT Create action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/auth/auth-jwt-create - title: AWS actions path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws + pages: + - title: AWS CloudWatch actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch + - title: AWS EC2 actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2 + - title: AWS Execute API actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api + - title: AWS Lambda actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda + - title: AWS S3 actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3 + - title: AWS SNS actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns + - title: AWS SQS actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs + - title: AWS Systems Manager actions + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager - title: HTTP actions path: /docs/workflow-automation/setup-and-configuration/actions-catalog/http + pages: + - title: HTTP DELETE action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-delete + - title: HTTP GET action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-get + - title: HTTP POST action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-post + - title: HTTP PUT action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/http/http-put - title: New Relic actions path: /docs/workflow-automation/setup-and-configuration/actions-catalog/new-relic + pages: + - title: New Relic Ingest action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest + - title: New Relic NerdGraph action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nerdgraph + - title: New Relic Notification action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification + - title: New Relic NRDB action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb - title: Communication actions path: /docs/workflow-automation/setup-and-configuration/actions-catalog/communication + pages: + - title: Slack Chat action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat - title: PagerDuty actions path: /docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty + pages: + - title: PagerDuty Incident action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident - title: Other actions path: /docs/workflow-automation/setup-and-configuration/actions-catalog/others + pages: + - title: Script Run action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/utils/script-run + - title: DateTime action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime + - title: Transform action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform + - title: UUID action + path: /docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid - title: Create a workflow automation path: /docs/workflow-automation/create-a-workflow-automation pages: From 1b888075fd732527df9a62f5217fd5dad91176d5 Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Fri, 21 Nov 2025 21:18:21 +0530 Subject: [PATCH 07/11] Updated the structure --- .../actions-catalog/aws/aws-cloudwatch.mdx | 6 +- .../actions-catalog/aws/aws-ec2.mdx | 1079 +++++++++-------- .../actions-catalog/aws/aws-execute-api.mdx | 628 +++++----- .../actions-catalog/aws/aws-s3.mdx | 18 +- .../actions-catalog/aws/aws-sns.mdx | 4 +- .../actions-catalog/aws/aws-sqs.mdx | 2 - .../aws/aws-systemsmanager.mdx | 8 +- .../newrelic/newrelic-notification.mdx | 321 ++++- .../newrelic/newrelic-nrdb.mdx | 4 +- .../pagerduty/pagerduty-incident.mdx | 2 - 10 files changed, 1197 insertions(+), 875 deletions(-) diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx index c988097fcb1..80acaf81e0d 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx @@ -28,9 +28,10 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + This action retrieves a batch of log events from a specified log stream in AWS CloudWatch Logs. It's essential for monitoring, auditing, and troubleshooting applications by programmatically fetching log data. @@ -233,7 +234,9 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s + + + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx index 7e6e0fb0205..87c44d8712d 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx @@ -29,6 +29,7 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + - Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance. - - The location of the source EBS volume determines where you can create the snapshot. + Starts an Amazon EBS-backed instance that you previously stopped. - + - - Inputs + + Inputs - + Outputs + + + Example + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**description**OptionalString"This is a test snapshot"
**outpostArn**OptionalString`“arn:aws:ec2:us-east-1:123456789012:outpost/op-1a2b3c4d5e6f7g8h9”`
**volumeId**RequiredString“`vol-0123456789abcdef0`“
**tagSpecifications**OptionalList`[{"ResourceType":"snapshot","Tags":[{"Key":"testKey","Value":"testValue"}]}]`
**location**OptionalString“regional”
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - In action input at least one of the AWS Credentials (short, long, role) should be provided, where role take precedence over the others. + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others.
- + @@ -540,39 +519,28 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s @@ -588,98 +556,147 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s
Object ```yaml - { - 'OwnerAlias': 'string', - 'OutpostArn': 'string', - 'Tags': [ - { - 'Key': 'string', - 'Value': 'string' - }, - ], - 'StorageTier': 'archive'|'standard', - 'RestoreExpiryTime': datetime(2015, 1, 1), - 'SseType': 'sse-ebs'|'sse-kms'|'none', - 'AvailabilityZone': 'string', - 'TransferType': 'time-based'|'standard', - 'CompletionDurationMinutes': 123, - 'CompletionTime': datetime(2015, 1, 1), - 'FullSnapshotSizeInBytes': 123, - 'SnapshotId': 'string', - 'VolumeId': 'string', - 'State': 'pending'|'completed'|'error'|'recoverable'|'recovering', - 'StateMessage': 'string', - 'StartTime': datetime(2015, 1, 1), - 'Progress': 'string', - 'OwnerId': 'string', - 'Description': 'string', - 'VolumeSize': 123, - 'Encrypted': True|False, - 'KmsKeyId': 'string', - 'DataEncryptionKeyId': 'string' - } + {"response":{ + 'StartingInstances': [ + { + 'InstanceId': 'String', + 'CurrentState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + }, + 'PreviousState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + } + }, + ] + } + + } + + } ```

- Response syntax can be referred [create_snapshot](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/create_snapshot.html). + Response syntax can be referred [start_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/start_instances.html)

+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ab-ec2-startInstance-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_startInstances_1 + type: action + action: aws.ec2.startInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
- This action deletes an Amazon EC2 snapshot. - - You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. + Stops an Amazon EBS-backed instance - - Inputs + + Inputs - + Outputs - + Example - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**snapshotId**RequiredString`“snapshot-id-1"`
**selectors**OptionalString`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**hibernate**OptionalBooleantrue or false (Default: `false`)
**force**OptionalBooleantrue or false (Default: `false`)
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. +
- + @@ -691,12 +708,28 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - + @@ -707,44 +740,44 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - +
**response**Objectobject - No Response in case of success : true -

- Response syntax can be referred [delete_snapshot - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/delete_snapshot.html). -

+ ```yaml + { + 'StoppingInstances': [ + { + 'InstanceId': 'string', + 'CurrentState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + }, + 'PreviousState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + } + }, + ] + } + ``` +

+ Response syntax can be referred [stop_instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/stop_instances.html) +

**errorMessage** String`errorMessage: "Failed to delete snapshot"``errorMessage: "An error occurred (InvalidInstanceID.Malformed) when calling the StopInstances operation: The instance ID 'i-123456789' is malformed"`
- + - + @@ -913,29 +946,31 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - Starts an Amazon EBS-backed instance that you previously stopped. + Terminates the specified instances. This operation is [idempotent](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html); if you terminate an instance more than once, each call succeeds. + + If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated. - + Inputs - + Outputs - + Example - +
Workflow ExampleWorkflow example
```yaml - name: ec2-deleteSnapshot-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - snapshotId: - type: List - defaultValue: snapshot-id-1 - steps: - - name: aws_ec2_deleteSnapshot_1 - type: action - action: aws.ec2.deleteSnapshot - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - snapshotId: ${{ .workflowInputs.snapshotId }} - next: end + name: ec2_stop_instance + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_stop_instances_1 + type: action + action: aws.ec2.stopInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end ```
@@ -991,12 +1026,12 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s
- - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. +
- + @@ -1008,189 +1043,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - - - - - - - - - - - - - -
**response**Object - ```yaml - {"response":{ - 'StartingInstances': [ - { - 'InstanceId': 'String', - 'CurrentState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - }, - 'PreviousState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - } - }, - ] - } - - } - - } - ``` -

- Response syntax can be referred [start_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/start_instances.html) -

-
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "The parameter instancesSet cannot be used with the parameter maxResults"`
-
- - - - - - - - - - - - - -
Workflow example
- ```yaml - name: ab-ec2-startInstance-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_startInstances_1 - type: action - action: aws.ec2.startInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end - ``` -
-
-
-
-
- - - - Terminates the specified instances. This operation is [idempotent](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html); if you terminate an instance more than once, each call succeeds. - - If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated. - - - - - Inputs - - - - Outputs - - - - Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - -
- - - - - - - - - - - - - - + @@ -1026,8 +1024,8 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s
Output FieldTypeExample
**response**objectobject ```yaml { @@ -1271,105 +1124,115 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - Stops an Amazon EBS-backed instance + Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance. - + The location of the source EBS volume determines where you can create the snapshot. + + - - Inputs + + Inputs - + Outputs - - - Example - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**hibernate**OptionalBooleantrue or false (Default: `false`)
**force**OptionalBooleantrue or false (Default: `false`)
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
- - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - -
- - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**description**OptionalString"This is a test snapshot"
**outpostArn**OptionalString`“arn:aws:ec2:us-east-1:123456789012:outpost/op-1a2b3c4d5e6f7g8h9”`
**volumeId**RequiredString“`vol-0123456789abcdef0`“
**tagSpecifications**OptionalList`[{"ResourceType":"snapshot","Tags":[{"Key":"testKey","Value":"testValue"}]}]`
**location**OptionalString“regional”
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In action input at least one of the AWS Credentials (short, long, role) should be provided, where role take precedence over the others. + +
+ + + + + @@ -1378,28 +1241,43 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - + @@ -1410,44 +1288,167 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - +
Output Field Type Example
**response**objectObject ```yaml - { - 'StoppingInstances': [ - { - 'InstanceId': 'string', - 'CurrentState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - }, - 'PreviousState': { - 'Code': 123, - 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' - } - }, - ] - } + { + 'OwnerAlias': 'string', + 'OutpostArn': 'string', + 'Tags': [ + { + 'Key': 'string', + 'Value': 'string' + }, + ], + 'StorageTier': 'archive'|'standard', + 'RestoreExpiryTime': datetime(2015, 1, 1), + 'SseType': 'sse-ebs'|'sse-kms'|'none', + 'AvailabilityZone': 'string', + 'TransferType': 'time-based'|'standard', + 'CompletionDurationMinutes': 123, + 'CompletionTime': datetime(2015, 1, 1), + 'FullSnapshotSizeInBytes': 123, + 'SnapshotId': 'string', + 'VolumeId': 'string', + 'State': 'pending'|'completed'|'error'|'recoverable'|'recovering', + 'StateMessage': 'string', + 'StartTime': datetime(2015, 1, 1), + 'Progress': 'string', + 'OwnerId': 'string', + 'Description': 'string', + 'VolumeSize': 123, + 'Encrypted': True|False, + 'KmsKeyId': 'string', + 'DataEncryptionKeyId': 'string' + } ``` -

- Response syntax can be referred [stop_instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/stop_instances.html) -

+

+ Response syntax can be referred [create_snapshot](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/create_snapshot.html). +

**errorMessage** String`errorMessage: "An error occurred (InvalidInstanceID.Malformed) when calling the StopInstances operation: The instance ID 'i-123456789' is malformed"``errorMessage: "The parameter instancesSet cannot be used with the parameter maxResults"`
+
+
+
+
+ + + + This action deletes an Amazon EC2 snapshot. + + You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**snapshotId**RequiredString`“snapshot-id-1"`
**selectors**OptionalString`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. +
- + - + + + + + + + + + + + + + + + + + + + + + + +
Workflow exampleOutput FieldTypeExample
**response**Object + No Response in case of success : true +

+ Response syntax can be referred [delete_snapshot - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/delete_snapshot.html). +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Failed to delete snapshot"`
+
+ + + + + + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx index 7f50d13883c..7208b03632e 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx @@ -28,323 +28,325 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - - This action allows you to execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. - - ### Security and IAM configuration - - To use this action, you must configure AWS credentials. See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for detailed instructions on creating an IAM role or IAM user. - - - **Security best practice:** When defining IAM policies for this action, always use least-privilege access. Grant only the specific AWS API actions your workflow requires, and restrict permissions to specific resources rather than using wildcards. - - - ### Required IAM permissions - - The permissions you need depend on which AWS services and APIs your workflow calls. Use the examples below as templates for creating least-privilege policies. - - **Example: Allow sending messages to a specific SQS queue** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "sqs:SendMessage", - "Resource": "arn:aws:sqs:us-west-2::" - } - ] - } - ``` - - **Example: Allow querying a specific DynamoDB table** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "dynamodb:Query", - "Resource": "arn:aws:dynamodb:us-west-2::table/" - } - ] - } - ``` - - **Example: Multiple services with specific permissions** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "sqs:SendMessage", - "Resource": "arn:aws:sqs:us-west-2::" - }, - { - "Effect": "Allow", - "Action": "dynamodb:Query", - "Resource": "arn:aws:dynamodb:us-west-2::table/" - } - ] - } - ``` - - - - Replace ``, ``, and `` with your actual values - - Find available AWS service APIs in the [Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) - - For more complex IAM policy patterns, see the [AWS IAM documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) - - - For more information on how this action works, see the [AWS Systems Manager executeAwsApi documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-action-executeAwsApi.html). - - - - - Inputs - - - - Outputs - - - - Example - - - - - + + + + This action allows you to execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. + + ### Security and IAM configuration + + To use this action, you must configure AWS credentials. See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for detailed instructions on creating an IAM role or IAM user. + + + **Security best practice:** When defining IAM policies for this action, always use least-privilege access. Grant only the specific AWS API actions your workflow requires, and restrict permissions to specific resources rather than using wildcards. + + + ### Required IAM permissions + + The permissions you need depend on which AWS services and APIs your workflow calls. Use the examples below as templates for creating least-privilege policies. + + **Example: Allow sending messages to a specific SQS queue** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-west-2::" + } + ] + } + ``` + + **Example: Allow querying a specific DynamoDB table** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-west-2::table/" + } + ] + } + ``` + + **Example: Multiple services with specific permissions** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-west-2::" + }, + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-west-2::table/" + } + ] + } + ``` + + + - Replace ``, ``, and `` with your actual values + - Find available AWS service APIs in the [Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) + - For more complex IAM policy patterns, see the [AWS IAM documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) + + + For more information on how this action works, see the [AWS Systems Manager executeAwsApi documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-action-executeAwsApi.html). + + + + + Inputs + + + + Outputs + + + + Example + + + + + +
Workflow Example
```yaml - name: ec2_stop_instance - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_stop_instances_1 - type: action - action: aws.ec2.stopInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end + name: ec2-deleteSnapshot-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + snapshotId: + type: List + defaultValue: snapshot-id-1 + steps: + - name: aws_ec2_deleteSnapshot_1 + type: action + action: aws.ec2.deleteSnapshot + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + snapshotId: ${{ .workflowInputs.snapshotId }} + next: end ```
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**service**RequiredString`service: "sqs"`.[AWS available services](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)
**api**RequiredString`api: "create_queue"`
**parameters**RequiredMap + ```yaml + parameters: { + "QueueName": "dks-testing-queue", + "Attributes": { + "DelaySeconds": "0", + "MessageRetentionPeriod": "86400" + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+
+ + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +
Input FieldOptionality
Output Field Type Example
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**service**RequiredString`service: "sqs"`.[AWS available services](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)
**api**RequiredString`api: "create_queue"`
**parameters**RequiredMap - ```yaml - parameters: { - "QueueName": "dks-testing-queue", - "Attributes": { - "DelaySeconds": "0", - "MessageRetentionPeriod": "86400" - } - } - ``` -
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
**response**Object`{"response":` + }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html.
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "User does not have permission to query DynamoDB"`
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Output FieldTypeExample
**response**Object`{"response":` - }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html.
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "User does not have permission to query DynamoDB"`
- - - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. - - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. - - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. - - Use selectors to get only the specified parameters as output. - -
- - - - ### Example: Query a DynamoDB table - - This example demonstrates how to query a DynamoDB table using the `aws.execute.api` action with session credentials. - ```yaml - name: aws_execute_api_dynamoDB_dks - - workflowInputs: - key: - type: String - defaultValue: "${{ :secrets: }}" - access: - type: String - defaultValue: "${{ :secrets: }}" - region: - type: String - defaultValue: us-east-2 - tableName: - type: String - defaultValue: workflow-definitions-dev - scopedName: - type: String - version: - type: String - defaultValue: "1" - - steps: - - name: executeApi - type: action - action: aws.execute.api - version: 1 - inputs: - awsAccessKeyId: ${{ .workflowInputs.key }} - awsSecretAccessKey: ${{ .workflowInputs.access }} - awsSessionToken: ${{ .workflowInputs.token }} - region: ${{ .workflowInputs.region }} - service: dynamodb - api: query - parameters: - TableName: ${{ .workflowInputs.tableName }} - KeyConditionExpression: "ScopedName = :scopedNameValue AND Version = :VersionValue" - ExpressionAttributeValues: - ":scopedNameValue": - S: ${{ .workflowInputs.scopedName }} - ":VersionValue": - N: ${{ .workflowInputs.version }} - selectors: - - name: response - expression: '.response' - - name: errorMessage - expression: '.errorMessage' - - name: success - expression: '.success' + + - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. + - Use selectors to get only the specified parameters as output. + + + + + + ### Example: Query a DynamoDB table + + This example demonstrates how to query a DynamoDB table using the `aws.execute.api` action with session credentials. + + ```yaml + name: aws_execute_api_dynamoDB_dks + + workflowInputs: + key: + type: String + defaultValue: "${{ :secrets: }}" + access: + type: String + defaultValue: "${{ :secrets: }}" + region: + type: String + defaultValue: us-east-2 + tableName: + type: String + defaultValue: workflow-definitions-dev + scopedName: + type: String + version: + type: String + defaultValue: "1" + + steps: + - name: executeApi + type: action + action: aws.execute.api + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.key }} + awsSecretAccessKey: ${{ .workflowInputs.access }} + awsSessionToken: ${{ .workflowInputs.token }} + region: ${{ .workflowInputs.region }} + service: dynamodb + api: query + parameters: + TableName: ${{ .workflowInputs.tableName }} + KeyConditionExpression: "ScopedName = :scopedNameValue AND Version = :VersionValue" + ExpressionAttributeValues: + ":scopedNameValue": + S: ${{ .workflowInputs.scopedName }} + ":VersionValue": + N: ${{ .workflowInputs.version }} + selectors: + - name: response + expression: '.response' + - name: errorMessage + expression: '.errorMessage' + - name: success + expression: '.success' + + - name: wait + type: wait + seconds: 2 - - name: wait - type: wait - seconds: 2 - - - name: logOutput - type: action - action: newrelic.instrumentation.log - version: 1 - inputs: - message: 'The execute API message output is:${{ .steps.executeApi.outputs.response.Item }}' - licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' - - name: logOutput1 - type: action - action: newrelic.instrumentation.log - version: 1 - inputs: - message: 'does execute API have any error :${{ .steps.executeApi.outputs.errorMessage }}' - licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' - - name: logOutput2 - type: action - action: newrelic.instrumentation.log - version: 1 - inputs: - message: 'is execute successful :${{ .steps.executeApi.outputs.success }}' - licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' - ``` - - **Required IAM policy for this example:** - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "dynamodb:Query", - "Resource": "arn:aws:dynamodb:us-east-2::table/workflow-definitions-prod" - } - ] - } - ``` - - **Expected outputs:** - - `success`: Boolean indicating whether the query was successful - - `response`: The DynamoDB query response containing the matching items - - `errorMessage`: Error message if the operation failed - -
-
-
\ No newline at end of file + - name: logOutput + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: 'The execute API message output is:${{ .steps.executeApi.outputs.response.Item }}' + licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' + - name: logOutput1 + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: 'does execute API have any error :${{ .steps.executeApi.outputs.errorMessage }}' + licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' + - name: logOutput2 + type: action + action: newrelic.instrumentation.log + version: 1 + inputs: + message: 'is execute successful :${{ .steps.executeApi.outputs.success }}' + licenseKey: '${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}' + ``` + + **Required IAM policy for this example:** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-east-2::table/workflow-definitions-prod" + } + ] + } + ``` + + **Expected outputs:** + - `success`: Boolean indicating whether the query was successful + - `response`: The DynamoDB query response containing the matching items + - `errorMessage`: Error message if the operation failed + + + + + \ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx index 9760bc54ce9..34fcf1a1185 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx @@ -28,8 +28,6 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - Optional
Map - ```yaml - { - "ChecksumMode": "ENABLED", - "ExpectedBucketOwner": "test-user" - } - ``` +```yaml + { + "ChecksumMode": "ENABLED", + "ExpectedBucketOwner": "test-user" + } +```
diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx index de2b231dbd0..723fbebce60 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx @@ -28,8 +28,7 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - + + diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx index d4115143a17..fbb46277946 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx @@ -28,8 +28,6 @@ Before using AWS actions in workflow automation, ensure you have: See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. - - + + + + + + @@ -535,3 +533,322 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf + + + + + Sends a slack message to a channel, integrated with destinations . + + + + + Inputs + + + Outputs + + + Example + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityDatatypeDescriptionExample
**destinationId**RequiredString + DestinationId associated with the newrelic destination. +

+ Refer [NerdGraph tutorial: Alerts destinations](/docs/apis/nerdgraph/examples/nerdgraph-api-notifications-destinations/) for steps on how to configure a new destination and listing destination Id. +

+

+ Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations. +

+ + ```yaml + { + actor { + account(id: 12345678) { + aiNotifications { + destinations(filters: {type: SLACK, active: true}) { + entities { + createdAt + id + name + active + } + } + } + } + } + } + ``` + +
`123e4567-e89b-12d3-a456-426614174000`
**text**RequiredStringText message which need to be sent Hello ! this message from Workflow
**channel**RequiredStringChannel name where message will be senthelp-nomad
**selectors**OptionalListThe selectors to get the only specified parameters as output.`[{\"name\": \"success\", \"expression\": \".success\"}]`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**success**Boolean`true/false`
**sessionId**String`"sessionId": "7fa97f26-3791-492e-a39b-53793163dfb9"`
**errorMessage**String`Channel is a required field in the notification send"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: slack_notification_workflow + description: This is a test workflow to test slack notification send action + steps: + - name: SendMessageUsingSlackChannel + type: action + action: newrelic.notification.sendSlack + version: 1 + inputs: + destinationId: ccd0d926-ed6f-4ddd-bc7d-b7ea9822908d + text: Hi , Testing notifcation api using slack channel name + channel: test-channel-workflow + ``` +
+
+
+
+
+
+ + + + + Runs a workflow through the NerdGraph API. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityDatatypeDescription
**definitionName**RequiredStringName of the workflow definition.
**definitionScopeType**OptionalStringScope type of the workflow definition. Scope type must be either `ACCOUNT` or `ORGANIZATION`.
**definitionVersion**OptionalIntVersion of the workflow definition
**idempotencyKey**OptionalStringUnique identifier to ensure idempotency of the request. It should be a UUID.
**workflowInputs**OptionalListVersion of the workflow definition
**runScopeType**RequiredStringScope type of the workflow. Scope type must be 'ACCOUNT'. We’ll support starting a workflow at the organization level in the future
**runScopeId**RequiredStringScope id of the workflow. Scope type must be accountId for now.
**selectors**OptionalListThe selectors to get the only specified parameters as output.
+ + ### Example + + ```yaml + steps: + - name: startHealthyHeartbeat + type: action + action: newrelic.workflowAutomation.startWorkflowRun + version: 1 + inputs: + definitionName: "heartbeat_newrelicIngestSendEvents_10062025" + definitionVersion: 1 + scopeType: "ACCOUNT" + definitionScopeType: "d34568b7-ee0b-4191-b663-7b2925b0de5b" + workflowInputs: + - key: "cellName" + value: "stg-joint-effort" + runScopeType: "ACCOUNT" + runScopeId: "11544325" + ``` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**runId**Unique identifier for the workflow run
**success**Boolean`Status of the request.`
**errorMessage**StringFailure reason as message.`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + { + "success": true + "runId": "00dc031f-c1cc-4d26-a3fb-6153c553c66b" + } + ``` +
+
+
+
+
+
\ No newline at end of file diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb.mdx index 6b9601d3a03..e8a789c65b1 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-nrdb.mdx @@ -28,14 +28,12 @@ Before using New Relic actions in workflow automation, ensure you have: See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for information on how to create and manage your New Relic Account License Key. - - ## Query actions Executes a cross-accounts NRQL query through the NerdGraph API. diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx index 89ae9e8851a..9535f8b5aba 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx @@ -27,8 +27,6 @@ Before using PagerDuty actions in workflow automation, ensure you have: * The necessary permissions to manage incidents in your PagerDuty account. * For account tokens, you'll need to provide the `from` email address in relevant actions. - - ## Incident actions From 3fe23409f87ab999c4a1a0d064585807c91a271b Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Fri, 21 Nov 2025 21:51:47 +0530 Subject: [PATCH 08/11] Updated the index --- .../newrelic/newrelic-notification.mdx | 152 +++++++++--------- 1 file changed, 77 insertions(+), 75 deletions(-) diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx index 60dad9f61e1..4acd6a1668d 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx @@ -169,8 +169,8 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf id="nerdgraph-query-get-destinationId" title="NerdGraph Query to get destinationId" > - ```sh - { + ```yaml + { actor { account(id: 12345678) { aiNotifications { @@ -186,7 +186,7 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf } } } - ``` + ``` @@ -265,18 +265,18 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf ```yaml - name: msTeam_notification_workflow - description: This is a test workflow to test MSTeam notification send action - steps: - - name: SendMessageUsingMSTeam - type: action - action: newrelic.notification.sendMicrosoftTeams - version: 1 - inputs: - destinationId: acc24dc2-d4fc-4eba-a7b4-b3ad0170f8aa - channel: DEV_TESTING - teamName: TEST_TEAM_DEV - message: Hello from Workflow + name: msTeam_notification_workflow + description: This is a test workflow to test MSTeam notification send action + steps: + - name: SendMessageUsingMSTeam + type: action + action: newrelic.notification.sendMicrosoftTeams + version: 1 + inputs: + destinationId: acc24dc2-d4fc-4eba-a7b4-b3ad0170f8aa + channel: DEV_TESTING + teamName: TEST_TEAM_DEV + message: Hello from Workflow ``` @@ -489,40 +489,40 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf ```yaml - name: email_testing_with_attachment - description: Workflow to test sending an email notification via NewRelic with log step - workflowInputs: - destinationId: - type: String - steps: - - name: sendEmailNotification - type: action - action: newrelic.notification.sendEmail - version: '1' - inputs: - destinationId: ${{ .workflowInputs.destinationId }} - subject: "workflow notification" - message: "Workflow Email Notification Testing from local" - attachments: - - type: QUERY - query: "SELECT * FROM Log" - format: JSON - filename: "log_count.json" - selectors: - - name: success - expression: '.success' - - name: sessionId - expression: '.response.sessionId' - - name: attachments - expression: '.response.attachments' - - name: logOutput - type: action - action: newrelic.ingest.sendLogs - version: '1' - inputs: - logs: - - message: "Hello from cap check Testing staging server user2 : ${{ .steps.sendEmailNotification.outputs.result.attachments }}" - licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }} + name: email_testing_with_attachment + description: Workflow to test sending an email notification via NewRelic with log step + workflowInputs: + destinationId: + type: String + steps: + - name: sendEmailNotification + type: action + action: newrelic.notification.sendEmail + version: '1' + inputs: + destinationId: ${{ .workflowInputs.destinationId }} + subject: "workflow notification" + message: "Workflow Email Notification Testing from local" + attachments: + - type: QUERY + query: "SELECT * FROM Log" + format: JSON + filename: "log_count.json" + selectors: + - name: success + expression: '.success' + - name: sessionId + expression: '.response.sessionId' + - name: attachments + expression: '.response.attachments' + - name: logOutput + type: action + action: newrelic.ingest.sendLogs + version: '1' + inputs: + logs: + - message: "Hello from cap check Testing staging server user2 : ${{ .steps.sendEmailNotification.outputs.result.attachments }}" + licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }} ``` @@ -580,6 +580,7 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf

Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations.

+ + `123e4567-e89b-12d3-a456-426614174000` @@ -671,17 +673,17 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf ```yaml - name: slack_notification_workflow - description: This is a test workflow to test slack notification send action - steps: - - name: SendMessageUsingSlackChannel - type: action - action: newrelic.notification.sendSlack - version: 1 - inputs: - destinationId: ccd0d926-ed6f-4ddd-bc7d-b7ea9822908d - text: Hi , Testing notifcation api using slack channel name - channel: test-channel-workflow + name: slack_notification_workflow + description: This is a test workflow to test slack notification send action + steps: + - name: SendMessageUsingSlackChannel + type: action + action: newrelic.notification.sendSlack + version: 1 + inputs: + destinationId: ccd0d926-ed6f-4ddd-bc7d-b7ea9822908d + text: Hi , Testing notifcation api using slack channel name + channel: test-channel-workflow ``` @@ -780,21 +782,21 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf ### Example ```yaml - steps: - - name: startHealthyHeartbeat - type: action - action: newrelic.workflowAutomation.startWorkflowRun - version: 1 - inputs: - definitionName: "heartbeat_newrelicIngestSendEvents_10062025" - definitionVersion: 1 - scopeType: "ACCOUNT" - definitionScopeType: "d34568b7-ee0b-4191-b663-7b2925b0de5b" - workflowInputs: - - key: "cellName" - value: "stg-joint-effort" - runScopeType: "ACCOUNT" - runScopeId: "11544325" + steps: + - name: startHealthyHeartbeat + type: action + action: newrelic.workflowAutomation.startWorkflowRun + version: 1 + inputs: + definitionName: "heartbeat_newrelicIngestSendEvents_10062025" + definitionVersion: 1 + scopeType: "ACCOUNT" + definitionScopeType: "d34568b7-ee0b-4191-b663-7b2925b0de5b" + workflowInputs: + - key: "cellName" + value: "stg-joint-effort" + runScopeType: "ACCOUNT" + runScopeId: "11544325" ``` From fc731718754a101f24228fa3bcf9c83a6827561d Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Fri, 21 Nov 2025 22:28:29 +0530 Subject: [PATCH 09/11] Updates --- .../newrelic/newrelic-notification.mdx | 97 ++++++++++--------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx index 4acd6a1668d..20261a93c88 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx @@ -169,24 +169,26 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf id="nerdgraph-query-get-destinationId" title="NerdGraph Query to get destinationId" > - ```yaml - { - actor { - account(id: 12345678) { - aiNotifications { - destinations(filters: {type: MICROSOFT_TEAMS, active: true}) { - entities { - createdAt - id - name - active - } - } + +```yaml +{ + actor { + account(id: 12345678) { + aiNotifications { + destinations(filters: {type: MICROSOFT_TEAMS, active: true}) { + entities { + createdAt + id + name + active } } } } - ``` + } +} +``` + @@ -334,30 +336,32 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf

Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations.

- + - ```yaml - { - actor { - account(id: 12345678) { - aiNotifications { - destinations(filters: {type: EMAIL, active: true}) { - entities { - createdAt - id - name - active - } + +```yaml +{ + actor { + account(id: 12345678) { + aiNotifications { + destinations(filters: {type: EMAIL, active: true}) { + entities { + createdAt + id + name + active } } } } } - ``` +} +``` + @@ -580,29 +584,32 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf

Refer [Destinations](/docs/alerts/get-notified/destinations/) to know more about destinations.

+ - ```yaml - { - actor { - account(id: 12345678) { - aiNotifications { - destinations(filters: {type: SLACK, active: true}) { - entities { - createdAt - id - name - active - } - } + +```yaml +{ + actor { + account(id: 12345678) { + aiNotifications { + destinations(filters: {type: SLACK, active: true}) { + entities { + createdAt + id + name + active } } } } - ``` + } +} +``` + @@ -762,7 +769,7 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf **runScopeType** Required String - Scope type of the workflow. Scope type must be 'ACCOUNT'. We’ll support starting a workflow at the organization level in the future + Scope type of the workflow. Scope type must be `ACCOUNT`. We'll support starting a workflow at the organization level in the future **runScopeId** @@ -823,7 +830,7 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf **errorMessage** String - Failure reason as message.` + `Failure reason as message.` From 28f34ec94582e60513ff460063d865f77b243ca4 Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Tue, 2 Dec 2025 14:57:02 +0530 Subject: [PATCH 10/11] Hallucination information removed --- .../limitations-and-faq/workflow-limits.mdx | 16 +- .../actions-catalog/aws/aws-cloudwatch.mdx | 6 +- .../actions-catalog/aws/aws-ec2.mdx | 256 +++++++++--------- .../actions-catalog/aws/aws-execute-api.mdx | 34 +-- .../actions-catalog/aws/aws-lambda.mdx | 102 +++---- .../actions-catalog/aws/aws-s3.mdx | 38 +-- .../actions-catalog/aws/aws-sns.mdx | 2 +- .../actions-catalog/aws/aws-sqs.mdx | 2 +- .../aws/aws-systemsmanager.mdx | 32 +-- .../newrelic/newrelic-ingest.mdx | 11 +- .../newrelic/newrelic-notification.mdx | 108 ++++---- .../pagerduty/pagerduty-incident.mdx | 12 +- .../actions-catalog/slack/slack-chat.mdx | 172 +++++++----- .../actions-catalog/utils/utils-datetime.mdx | 104 ++++--- .../actions-catalog/utils/utils-transform.mdx | 109 ++++++-- .../actions-catalog/utils/utils-uuid.mdx | 50 +++- .../workflow-automation/workflow-examples.mdx | 161 ++++++++++- 17 files changed, 767 insertions(+), 448 deletions(-) diff --git a/src/content/docs/workflow-automation/limitations-and-faq/workflow-limits.mdx b/src/content/docs/workflow-automation/limitations-and-faq/workflow-limits.mdx index 493ed518548..d5b06e166b3 100644 --- a/src/content/docs/workflow-automation/limitations-and-faq/workflow-limits.mdx +++ b/src/content/docs/workflow-automation/limitations-and-faq/workflow-limits.mdx @@ -40,12 +40,22 @@ freshnessValidatedDate: never 50KB - No of Workflow definitions (Including all versions) + No of Workflow definitions at account level(excluding versions count) 1000 - No of Workflow definitions at org level (including all versions) + No of Workflow definitions at org level (excluding versions count) + + 1000 + + + No of versions per workflow definition at account level + + 1000 + + + No of versions per workflow definition at org level 1000 @@ -67,7 +77,7 @@ freshnessValidatedDate: never Length of a workflow input value - 1000 characters + 1000 Characters Workflow concurrent runs (per account) diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx index 80acaf81e0d..daddb0a105c 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-cloudwatch.mdx @@ -161,7 +161,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **response** - object + Object ```yaml { @@ -203,7 +203,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: get-lambda-logs + name: get-lambda-logs description: 'Retrieve log events from an AWS Lambda function' workflowInputs: region: @@ -385,7 +385,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: get-lambda-logs + name: get-lambda-logs description: 'Retrieve log events from an AWS Lambda function' workflowInputs: region: diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx index 87c44d8712d..69c55e0f43b 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-ec2.mdx @@ -334,7 +334,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - In action input at least one of the AWS Credentials (short, long, role) should be provided, where role take precedence over the others. + In action input at least one of the AWS credentials (short, long, role) should be provided, where role take precedence over the others. @@ -394,22 +394,22 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: ab-ec2-describe-test - description: '' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_ec2_describeInstances_1 - type: action - action: aws.ec2.describeInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-2 - instanceIds: - - i-123456789abcdef0 - next: end + name: ab-ec2-describe-test + description: '' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_ec2_describeInstances_1 + type: action + action: aws.ec2.describeInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-2 + instanceIds: + - i-123456789abcdef0 + next: end ``` @@ -569,27 +569,27 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: ab-ec2-startInstance-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_startInstances_1 - type: action - action: aws.ec2.startInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end + name: ab-ec2-startInstance-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_startInstances_1 + type: action + action: aws.ec2.startInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end ``` @@ -708,7 +708,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **response** - object + Object ```yaml { @@ -758,26 +758,26 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml name: ec2_stop_instance - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_stop_instances_1 - type: action - action: aws.ec2.stopInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_stop_instances_1 + type: action + action: aws.ec2.stopInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end ``` @@ -914,27 +914,27 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: reboot-ec2-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: List - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_rebootInstances_1 - type: action - action: aws.ec2.rebootInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end + name: reboot-ec2-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: List + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_rebootInstances_1 + type: action + action: aws.ec2.rebootInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end ``` @@ -1043,7 +1043,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **response** - object + Object ```yaml { @@ -1093,26 +1093,26 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml name: ec2-terminate-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - instanceIds: - type: list - defaultValue: ["i-123456789abcdef0"] - steps: - - name: aws_ec2_terminateInstances_1 - type: action - action: aws.ec2.terminateInstances - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - instanceIds: ${{ .workflowInputs.instanceIds }} - next: end + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_terminateInstances_1 + type: action + action: aws.ec2.terminateInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end ``` @@ -1128,7 +1128,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s title="Snapshot EBS volume" > - Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance. + Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and save data before shutting down an instance. The location of the source EBS volume determines where you can create the snapshot. @@ -1213,7 +1213,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **location** Optional String - “regional” + `“regional”` **selectors** @@ -1225,7 +1225,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - In action input at least one of the AWS Credentials (short, long, role) should be provided, where role take precedence over the others. + Input at least one of the AWS credentials (short, long, role) should be provided, where role take precedence over the others. @@ -1302,7 +1302,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s title="Delete a snapshot" > - This action deletes an Amazon EC2 snapshot. + Deletes an Amazon EC2 snapshot. You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. @@ -1379,7 +1379,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + Input at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. @@ -1397,7 +1397,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **response** Object - No Response in case of success : true + No Response in case of `success : true`

Response syntax can be referred [delete_snapshot - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/delete_snapshot.html).

@@ -1428,27 +1428,27 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: ec2-deleteSnapshot-test - description: '' - workflowInputs: - arnRole: - type: String - region: - type: String - defaultValue: us-west-2 - snapshotId: - type: List - defaultValue: snapshot-id-1 - steps: - - name: aws_ec2_deleteSnapshot_1 - type: action - action: aws.ec2.deleteSnapshot - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: ${{ .workflowInputs.region }} - snapshotId: ${{ .workflowInputs.snapshotId }} - next: end + name: ec2-deleteSnapshot-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + snapshotId: + type: List + defaultValue: snapshot-id-1 + steps: + - name: aws_ec2_deleteSnapshot_1 + type: action + action: aws.ec2.deleteSnapshot + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + snapshotId: ${{ .workflowInputs.snapshotId }} + next: end ``` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx index 7208b03632e..4980eb401f0 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-execute-api.mdx @@ -34,9 +34,9 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s title="Execute an AWS API" > - This action allows you to execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. + Execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. - ### Security and IAM configuration + ## Security and IAM configuration To use this action, you must configure AWS credentials. See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for detailed instructions on creating an IAM role or IAM user. @@ -44,11 +44,11 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **Security best practice:** When defining IAM policies for this action, always use least-privilege access. Grant only the specific AWS API actions your workflow requires, and restrict permissions to specific resources rather than using wildcards. - ### Required IAM permissions + ## Required IAM permissions The permissions you need depend on which AWS services and APIs your workflow calls. Use the examples below as templates for creating least-privilege policies. - **Example: Allow sending messages to a specific SQS queue** + **Example 1: Send messages to a specific SQS queue** ```json { @@ -63,7 +63,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s } ``` - **Example: Allow querying a specific DynamoDB table** + **Examples 2: Query a specific DynamoDB table** ```json { @@ -78,7 +78,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s } ``` - **Example: Multiple services with specific permissions** + **Example 3: Multiple services with specific permissions** ```json { @@ -98,7 +98,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s } ``` - + - Replace ``, ``, and `` with your actual values - Find available AWS service APIs in the [Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) - For more complex IAM policy patterns, see the [AWS IAM documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) @@ -180,15 +180,15 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s Required Map - ```yaml - parameters: { - "QueueName": "dks-testing-queue", - "Attributes": { - "DelaySeconds": "0", - "MessageRetentionPeriod": "86400" - } - } - ``` + ```yaml + parameters: { + "QueueName": "dks-testing-queue", + "Attributes": { + "DelaySeconds": "0", + "MessageRetentionPeriod": "86400" + } + } + ``` @@ -231,7 +231,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s - - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + - Input at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx index d30ba62237e..44e6b943a12 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-lambda.mdx @@ -450,24 +450,24 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml name: lambda-update-config-test - description: 'Updates the timeout and memory of a Lambda function' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_lambda_update_function_configuration_1 - type: action - action: aws.lambda.updateFunctionConfiguration - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-west-2 - functionName: my-lambda-function-to-update - parameters: - Timeout:60 - MemorySize:123 - - next: end + description: 'Updates the timeout and memory of a Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_update_function_configuration_1 + type: action + action: aws.lambda.updateFunctionConfiguration + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-west-2 + functionName: my-lambda-function-to-update + parameters: + Timeout:60 + MemorySize:123 + + next: end ``` @@ -622,22 +622,22 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml name: lambda-get-function-test - description: 'Retrieves the configuration of a specific Lambda function' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_lambda_getFunction_1 - type: action - action: aws.lambda.getFunction - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-1 - FunctionName: hello-you - parameters: - Qualifier: 1 - next: end + description: 'Retrieves the configuration of a specific Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_getFunction_1 + type: action + action: aws.lambda.getFunction + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + FunctionName: hello-you + parameters: + Qualifier: 1 + next: end ``` @@ -812,23 +812,23 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: lambda-list-aliases-test - description: 'Lists all aliases for a Lambda function' - workflowInputs: - arnRole: - type: String - steps: - - name: aws_lambda_list_aliases_1 - type: action - action: aws.lambda.listAliases - version: '1' - inputs: - awsRoleArn: ${{ .workflowInputs.arnRole }} - region: us-east-1 - functionName: hello-you - parameters: - FunctionVersion: 1 - next: end + name: lambda-list-aliases-test + description: 'Lists all aliases for a Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_list_aliases_1 + type: action + action: aws.lambda.listAliases + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + functionName: hello-you + parameters: + FunctionVersion: 1 + next: end ``` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx index 34fcf1a1185..8ce3685ab11 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-s3.mdx @@ -274,22 +274,22 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: aws-s3-list-objects-v2 - description: 'List Objects in an AWS S3 Bucket' - - steps: - - name: aws_s3_listObjectsV2_1 - type: action - action: aws.s3.listObjectsV2 - version: '1' - inputs: - awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" - region: "us-east-2" - bucket: "examplebucket" - prefix: "path/to/folder/" - maxKeys: 100 - continuationToken: "some-token" - next: end + name: aws-s3-list-objects-v2 + description: 'List Objects in an AWS S3 Bucket' + + steps: + - name: aws_s3_listObjectsV2_1 + type: action + action: aws.s3.listObjectsV2 + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-east-2" + bucket: "examplebucket" + prefix: "path/to/folder/" + maxKeys: 100 + continuationToken: "some-token" + next: end ``` @@ -507,7 +507,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: aws-s3-delete-object + name: aws-s3-delete-object description: 'Delete an AWS S3 Object' steps: @@ -883,7 +883,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: s3-put-object + name: s3-put-object description: 'Put an AWS S3 Object' steps: @@ -1201,7 +1201,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: s3-get-object + name: s3-get-object description: 'Get an AWS S3 Object' steps: diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx index 723fbebce60..a58ded5ba15 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sns.mdx @@ -237,7 +237,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: sns-publish-test + name: sns-publish-test description: Publishes a notification to an SNS topic workflowInputs: arnRole: diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx index fbb46277946..7f0a7b7c9f4 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-sqs.mdx @@ -184,7 +184,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - name: sqs-send-message-test + name: sqs-send-message-test description: Sends a message to an SQS queue workflowInputs: arnRole: diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx index 613c71f4484..d847da83a5e 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws/aws-systemsmanager.mdx @@ -204,7 +204,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s **Example 1**: A simple SSM document to list all lambda function ```yaml - schemaVersion: '0.3' + schemaVersion: '0.3' description: List all Lambda function names. mainSteps: - name: ExecuteAwsApi @@ -370,7 +370,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s title="SystemsManager document" > ```yaml - schemaVersion: '0.3' + schemaVersion: '0.3' description: "Run a Python script that says 'Hello' to the username passed as input and capture the output." parameters: Username: @@ -586,7 +586,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s title="SSM document performing API gateway rollback" > ```yaml - schemaVersion: '0.3' + schemaVersion: '0.3' description: Test SSM for API gateway rollback mainSteps: - name: ExecuteAwsApi @@ -773,7 +773,7 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s A simple SSM document to list all lambda function ```yaml - schemaVersion: '0.3' + schemaVersion: '0.3' description: List all Lambda function names. mainSteps: - name: ExecuteAwsApi @@ -1073,12 +1073,12 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - schemaVersion: '0.3' - description: List all Lambda function names. - mainSteps: - - name: ExecuteAwsApi - action: aws:executeAwsApi - isEnd: true + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true ``` @@ -1289,12 +1289,12 @@ See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/s ```yaml - schemaVersion: '0.3' - description: List all Lambda function names. - mainSteps: - - name: ExecuteAwsApi - action: aws:executeAwsApi - isEnd: true + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true ``` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx index 14081573eb9..16951e949f7 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-ingest.mdx @@ -35,7 +35,7 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf id="newrelic.ingest.sendEvents" title="Send custom events to New Relic" > - Sends a custom events to New Relic + Reports a custom event to New Relic. @@ -74,13 +74,13 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf **events** Required list - `"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]` + `"[{\"eventType\":\"XYZ\",\"attributes\":{\"foo\":\"bar\"}}, {\"eventType\":\"ABC\",\"value\":\"1234\",\"attributes\":{\"color\":\"red\"}}]"` **licenseKey** Optional string - `"{{ .secrets.secretName }}"` + `"{{ .secrets.secretName }}"`, where `secretName` is the key under which the license key is stored. **selectors** @@ -93,8 +93,8 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf - **attributes**: Common attributes which are part of all the events when provided. Merging for each event item when needed event item overrides common definition. - - **events**: The list of event data. Note that events requires the use of an `eventType` field that represents the custom event type and the maximum events allowed per request is 100. - - **licenseKey**: The New Relic Account License Key that specifies the target account where events are sent. If this value is not provided, a default license key is assumed based on the account executing the workflow. + - **events**: The list of event data. Note that events requires the use of an `eventType` field that represents the custom event type and the maximum events allowed per request is **100**. + - **licenseKey**: The **New Relic Account License Key** is a required input that specifies the target account where events are sent. If this value is not provided as an input, a default license key is assumed based on the account executing the workflow. In other words, you need to specify the **New Relic Account License Key** where you want to send your events. If you don't provide one, the system will use a default license key associated with the account running the workflow. Refer to [xyz](/docs/apis/intro-apis/new-relic-api-keys/#license-key) on how to create and manage your New Relic Account License Key. - **selectors**: The selectors to get only the specified parameters as output. @@ -180,6 +180,7 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf **Retrieve events:** After successfully executing a workflow, you can retrieve the associated event by running a query under the account that executed the workflow: + ```sql SELECT * FROM HeartBeat ``` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx index 20261a93c88..1baf9d2d5b3 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/newrelic/newrelic-notification.mdx @@ -268,17 +268,17 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf ```yaml name: msTeam_notification_workflow - description: This is a test workflow to test MSTeam notification send action - steps: - - name: SendMessageUsingMSTeam - type: action - action: newrelic.notification.sendMicrosoftTeams - version: 1 - inputs: - destinationId: acc24dc2-d4fc-4eba-a7b4-b3ad0170f8aa - channel: DEV_TESTING - teamName: TEST_TEAM_DEV - message: Hello from Workflow + description: This is a test workflow to test MSTeam notification send action + steps: + - name: SendMessageUsingMSTeam + type: action + action: newrelic.notification.sendMicrosoftTeams + version: 1 + inputs: + destinationId: acc24dc2-d4fc-4eba-a7b4-b3ad0170f8aa + channel: DEV_TESTING + teamName: TEST_TEAM_DEV + message: Hello from Workflow ``` @@ -494,39 +494,39 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf ```yaml name: email_testing_with_attachment - description: Workflow to test sending an email notification via NewRelic with log step - workflowInputs: - destinationId: - type: String - steps: - - name: sendEmailNotification - type: action - action: newrelic.notification.sendEmail - version: '1' - inputs: - destinationId: ${{ .workflowInputs.destinationId }} - subject: "workflow notification" - message: "Workflow Email Notification Testing from local" - attachments: - - type: QUERY - query: "SELECT * FROM Log" - format: JSON - filename: "log_count.json" - selectors: - - name: success - expression: '.success' - - name: sessionId - expression: '.response.sessionId' - - name: attachments - expression: '.response.attachments' - - name: logOutput - type: action - action: newrelic.ingest.sendLogs - version: '1' - inputs: - logs: - - message: "Hello from cap check Testing staging server user2 : ${{ .steps.sendEmailNotification.outputs.result.attachments }}" - licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }} + description: Workflow to test sending an email notification via NewRelic with log step + workflowInputs: + destinationId: + type: String + steps: + - name: sendEmailNotification + type: action + action: newrelic.notification.sendEmail + version: '1' + inputs: + destinationId: ${{ .workflowInputs.destinationId }} + subject: "workflow notification" + message: "Workflow Email Notification Testing from local" + attachments: + - type: QUERY + query: "SELECT * FROM Log" + format: JSON + filename: "log_count.json" + selectors: + - name: success + expression: '.success' + - name: sessionId + expression: '.response.sessionId' + - name: attachments + expression: '.response.attachments' + - name: logOutput + type: action + action: newrelic.ingest.sendLogs + version: '1' + inputs: + logs: + - message: "Hello from cap check Testing staging server user2 : ${{ .steps.sendEmailNotification.outputs.result.attachments }}" + licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }} ``` @@ -681,16 +681,16 @@ See [License Key](/docs/apis/intro-apis/new-relic-api-keys/#license-key) for inf ```yaml name: slack_notification_workflow - description: This is a test workflow to test slack notification send action - steps: - - name: SendMessageUsingSlackChannel - type: action - action: newrelic.notification.sendSlack - version: 1 - inputs: - destinationId: ccd0d926-ed6f-4ddd-bc7d-b7ea9822908d - text: Hi , Testing notifcation api using slack channel name - channel: test-channel-workflow + description: This is a test workflow to test slack notification send action + steps: + - name: SendMessageUsingSlackChannel + type: action + action: newrelic.notification.sendSlack + version: 1 + inputs: + destinationId: ccd0d926-ed6f-4ddd-bc7d-b7ea9822908d + text: Hi , Testing notifcation api using slack channel name + channel: test-channel-workflow ``` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx index 9535f8b5aba..a6003687a14 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/pagerduty/pagerduty-incident.mdx @@ -159,7 +159,7 @@ Before using PagerDuty actions in workflow automation, ensure you have: ```yaml - name: resolve-pagerduty-incident + name: resolve-pagerduty-incident description: '' steps: - name: pagerduty_incident_resolve_1 @@ -308,7 +308,7 @@ Before using PagerDuty actions in workflow automation, ensure you have: ```yaml - name: list-pagerduty-incidents + name: list-pagerduty-incidents description: '' steps: - name: pagerduty_incident_list_1 @@ -337,7 +337,7 @@ Before using PagerDuty actions in workflow automation, ensure you have: id="pagerDuty.incident.get" title="Get a PagerDuty incident" > - Retrieves detailed information about a specific PagerDuty incident by its ID. + Ge a pagerduty incident. @@ -458,7 +458,7 @@ Before using PagerDuty actions in workflow automation, ensure you have: ```yaml - name: get-pagerduty-incident + name: get-pagerduty-incident description: '' steps: - name: pagerduty_incident_get_1 @@ -720,7 +720,7 @@ Before using PagerDuty actions in workflow automation, ensure you have: ```yaml - name: create-pagerduty-incident + name: create-pagerduty-incident description: '' steps: - name: create @@ -990,7 +990,7 @@ Before using PagerDuty actions in workflow automation, ensure you have: ```yaml - name: update-pagerduty-incident + name: update-pagerduty-incident description: '' steps: - name: pagerduty_incident_update_1 diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx index af06bea277f..9bc88cfe008 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/slack/slack-chat.mdx @@ -62,6 +62,7 @@ Sends a message to a slack channel, with an optional file attachment. Input Field Optionality Type + Description Example @@ -69,57 +70,61 @@ Sends a message to a slack channel, with an optional file attachment. **token** Required - secret + Secret + The Slack bot token to use. This should be passed as a secret syntax. Refer to [Add Slack configuration](/docs/alerts/get-notified/notification-integrations/) for instructions on setting up a token. `${{ :secrets:slackToken }}` **channel** Required - string + String + The name of the channel, or a channelID, to send the message. See [Slack API](https://docs.slack.dev/reference/methods/chat.postMessage/#arg_channel) for more information. `my-slack-channel` **text** Required - string + String + The message to be posted to Slack in the specified `channel`. `Hello World!` **threadTs** Optional - string + String + Timestamp belonging to parent message, used to create a message reply in a thread. `.` **attachment** Optional - map + Map + Allows attaching a file with a message onto the specified `channel`. **attachment.filename** Required - string + String + Specify the filename for the uploaded file in Slack. `file.txt` **attachment.content** Required - string + String + The content of the file to upload as UTF8. `Hello\nWorld!` + + **selectors** + Optional + List + The selectors to get the only specified parameters as output. + `[{\"name\": \"threadTs\", \"expression\": \".threadTs\"}, {\"name\": \"channelID\", \"expression\": \".channelID\")\"}]` + - - - - **token**: The Slack bot token to use. This should be passed as a secret syntax. Refer to [Add Slack configuration](/docs/autoflow/overview#add-the-slack-integration) for instructions on setting up a token. - - **channel**: The name of the channel, or a channelID, to send the message. See [Slack API](https://api.slack.com/methods/chat.postMessage#arg_channel/) for more information. - - **text**: The message to be posted to Slack in the specified `channel`. - - **threadTs**: Timestamp belonging to parent message, used to create a message reply in a thread. - - **attachment**: Allow attaching a file with a message onto the specified `channel`. - - **attachment.filename**: Specify the filename for the uploaded file in Slack. - - **attachment.content**: The content of the file to upload as UTF8. - @@ -128,27 +133,37 @@ Sends a message to a slack channel, with an optional file attachment. Output Field Type + Description Example **threadTs** - string + String + Timestamp of the message thread. May be used in future `postMessage` calls to post a reply in a thread. `.` **channelID** - string + String + Id of the channel where message is posted. + `` + + + **success** + Boolean + Status of the request + `true / false` + + + **errorMessage** + String + Failure reason as message `` - - - - **threadTs**: Timestamp of message. May be used in future postMessage calls to post a reply in a thread. - - **channelID**: Id of the channel where message is posted. - @@ -170,12 +185,17 @@ name: SendMessage steps: - name: send_slack_message type: action - action: slack.chat.postMessage + action: slack.chat.postMessage version: 1 inputs: - token: ${{ :secrets:slackToken }} + token: ${{ :secrets:dn_staging_slack_token }} channel: ${{ .workflowInputs.channel }} text: ${{ .workflowInputs.text }} + selectors: + - name: threadTs + expression: ".threadTs" + - name: channelID + expression: ".channelID" ``` **Expected inputs:** @@ -185,7 +205,7 @@ steps: "inputs": [ { "key" : "channel", - "value" : "my-channel" + "value" : "test-channel-workflow" }, { "key" : "text", @@ -202,6 +222,7 @@ steps: { "threadTs": "1718897637.400609", "channelID": "C063JK1RHN1" + "success": true } ] ``` @@ -225,13 +246,14 @@ steps: name: SendFileMessage steps: + - name: postCsv type: action action: slack.chat.postMessage version: 1 inputs: - token: ${{ :secrets:slackToken }} - channel: my-channel + token: ${{ :secrets:dn_staging_slack_token }} + channel: test-channel-workflow text: "Please find the attached file:" attachment: filename: 'file.txt' @@ -245,6 +267,7 @@ steps: { "threadTs": "1718897637.400609", "channelID": "C063JK1RHN1" + "success": true } ] ``` @@ -289,6 +312,7 @@ Get a reaction of a message from Slack channel. Input Field Optionality Type + Description Example @@ -296,43 +320,40 @@ Get a reaction of a message from Slack channel. **token** Required - secret + Secret + The Slack bot token to use. This should be passed as a secret syntax. Refer to [Add Slack configuration](/docs/alerts/get-notified/notification-integrations/) for instructions on setting up a token. `${{ :secrets:slackToken }}` **channelID** Required - string + String + The channelID, to get the message reactions. See [`reactions.get` method](https://docs.slack.dev/reference/methods/reactions.get/#arg_channel) `C063JK1RHN1` **timeout** Optional - int + Int + The time in seconds for how long to wait for any reaction. Default is 60s, maximum allowed is 600s (10min). 60 **threadTs** Required - string + String + Timestamp belonging to message, used to get reaction of that message. `.` **selectors** Optional - list + List + The selectors to get the only specified parameters as output. `[{\"name\": \"reactions\", \"expression\": \".reactions \"}]` - - - - **token**: The Slack bot token to use. This should be passed as a secret syntax. Refer to [Add Slack configuration](/docs/autoflow/overview#add-the-slack-integration) for instructions on setting up a token. - - **channelID**: The channelID to get the message reactions. - - **timeout**: The time in seconds for how long to wait for any reaction. Default is 60s, maximum allowed is 600s (10min). - - **threadTs**: Timestamp belonging to message, used to get reaction of that message. - - **selectors**: The selectors to get the only specified parameters as output. - @@ -341,21 +362,31 @@ Get a reaction of a message from Slack channel. Output Field Type + Description Example - **reactions** - list - `` - + **reactions** + List + List of elements with all the reactions captured or an empty list if timeout occurred. + `` + + + **success** + Boolean + Status of the request + `true / false` + + + **errorMessage** + String + Failure reason as message + `Invalid slack token` + - - - - **reactions**: List of elements with all the reactions captured or an empty list if timeout occurred. - @@ -375,12 +406,12 @@ Get a reaction of a message from Slack channel. name: GetReactions steps: - - name: getReactions + - name: getReactions type: action action: slack.chat.getReactions version: 1 inputs: - token: ${{ :secrets:slackToken }} + token: ${{ :secrets:dn_staging_slack_token }} channelID: ${{ .steps.promptUser.outputs.channelID }} threadTs: ${{ .steps.promptUser.outputs.threadTs }} timeout: ${{ .workflowInputs.timeout }} @@ -412,26 +443,23 @@ steps: ```json [ - { - "name": "grinning", - "users": [ - "W222222" - ], - "count": 1 - }, - { - "name": "question", - "users": [ - "W333333" - ], - "count": 1 - } -] -``` - -Or if it is timed out: - -```json + { + "name": "grinning", + "users": [ + "W222222" + ], + "count": 1 + }, + { + "name": "question", + "users": [ + "W333333" + ], + "count": 1 + } + ] + +or if it is timed out, [] ``` diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime.mdx index 9f8a97ec052..0d6954f45ff 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-datetime.mdx @@ -27,8 +27,8 @@ This page provides a comprehensive reference for utilities - datetime available > This action is used to transform from epoch timestamp to date/time. Possible references: -* https://en.wikipedia.org/wiki/List_of_tz_database_time_zones -* https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS + * https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + * https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS Refer [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for more information. @@ -62,8 +62,8 @@ Refer [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/Dat **timestamp** Required - int - An integer representing epoch timestamp. Note that, UNIX epochs are the number of seconds after 1st Jan 1970, midnight UTC (00:00) + Int + An integer representing epoch timestamp. **Note**: *UNIX epochs are the number of seconds after 1st Jan 1970, midnight UTC (00:00)* **timestampUnit** @@ -74,14 +74,34 @@ Refer [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/Dat **timezoneId** Optional - string - A string representing timezone for desired date/time, default: UTC + String + + A string representing timezone for desired date/time, default: UTC + +

+ For more information on supported zoneIds refer: [ZoneId (Java Platform SE 8 )](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html) +

+ **pattern** Optional - string - A string representing pattern for desired datetime, default: ISO-8601 + String + + A string representing pattern for desired datetime, + +

default: `ISO-8601`

+ +

+ For more information on supported patterns refer: [DateTimeFormatter (Java Platform SE 8 )](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) +

+ + + + **selectors** + Optional + List + The selectors to get the only specified parameters as output. @@ -101,27 +121,39 @@ Refer [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/Dat **date** Required - string + String A string representation of date. **time** Required - string + String A string representation of time. **datetime** Required - string + String A string representation of datetime. **timezone** Required - map + Map A map representation of timezoneId and abbreviation. + + **success** + + Boolean + Status of the request + + + **errorMessage** + + String + Failure reason as message +
@@ -161,34 +193,44 @@ Refer [fromEpoch](https://docs.oracle.com/javase/8/docs/api/java/time/format/Dat timezoneId: ${{ .workflowInputs.timezoneId }} pattern: ${{ .workflowInputs.pattern }} timestampUnit: ${{ .workflowInputs.timestampUnit }} + selectors: + - name: date + expression: ".date" + - name: time + expression: ".time" + - name: datetime + expression: ".datetime" + - name: timezone + expression: ".timezone" ``` - ```json - mutation { - workflowAutomationStartWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { name: "from_epoch" } - workflowInputs: [ - {key: "timestamp", value: "1738236424003"} - {key: "timestampUnit", value: "MILLISECONDS"} - {key: "pattern", value: "yyyy-mm-dd HH:SS"} - {key: "timezoneId", value: "Asia/Kolkata"} - ] - ) { - runId - } - } - ``` + ```yaml + mutation { + autoflowsStartWorkflowRun( + accountId: 11933347 + definition: { name: "from_epoch" } + workflowInputs: [ + {key: "timestamp", value: "1738236424003"} + {key: "timestampUnit", value: "MILLISECONDS"} + {key: "pattern", value: "yyyy-mm-dd HH:SS"} + {key: "timezoneId", value: "Asia/Kolkata"} + ] + ) { + runId + } + } + ``` - ```json + ```yaml { + "success": true "date": "2025-01-30", "time": "16:57:04.003" - "datetime": "2025-01-30 16:00", + "datetime": "2025-57-30 16:00", "timezone": { - "abbreviation": "IST", + "abbreviation": "IST", "id": "Asia/Kolkata" } } diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform.mdx index 10468db42c5..a62a77d605e 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-transform.mdx @@ -58,6 +58,12 @@ This page provides a comprehensive reference for utilities - transform available any A string representing a data to transform into CSV, typically a JSON string or a map. + + **selectors** + Optional + List + The selectors to get the only specified parameters as output. + @@ -79,6 +85,18 @@ This page provides a comprehensive reference for utilities - transform available string A CSV representation of the data received. + + **success** + + Boolean + Status of the request + + + **** + + String + Failure reason as message + @@ -95,7 +113,7 @@ This page provides a comprehensive reference for utilities - transform available - ```json + ```yaml name: nrqltocsv steps: @@ -113,26 +131,83 @@ This page provides a comprehensive reference for utilities - transform available version: 1 inputs: data: ${{ .steps.queryForLog.outputs.results | tostring }} + selectors: + - name: csv + expression: ".csv" + ``` + + + ```yaml + mutation { + startWorkflowRun( + accountId: 11933347 + definition: { + name: "nrqltocsv", + } + workflowInputs: [ + {key: "accountId" value: "11933347"} + {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'temporal-workflow-worker%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} + ] + ) + { runId } + } ``` - ```json - mutation { - startWorkflowRun( - scope: { type: ACCOUNT id: "12345678" } - definition: { - name: "nrqltocsv", - } - workflowInputs: [ - {key: "accountId" value: "12345678"} - {key: "nrql" value: "FROM TransactionError SELECT error.message, error.class, transactionName, request.uri, query WHERE appName like 'my-app-1%' AND error.expected IS FALSE SINCE 1 hour ago LIMIT 50"} - ] - ) - { runId } - } - ``` + ```yaml + error.class,error.message,query,request.uri,timestamp,transactionName + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561445470,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561445470,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561445470,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561445470,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561445470,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561445470,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561445470,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561445470,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439931,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439931,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439931,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439931,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439930,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439930,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439930,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439930,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439770,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439770,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439770,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439770,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561439769,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439560,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439560,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439559,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439559,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439559,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561439473,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421659,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421659,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421659,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421659,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561421659,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561421659,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561421659,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421659,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561421648,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421648,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561421648,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561421648,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561421648,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421648,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421648,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561421648,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561412587,Unknown + "java.lang.RuntimeException","java.net.UnknownHostException: temporal-frontend.temporal.svc.cluster.local: Name or service not known",,,1720561412587,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561412587,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561412587,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561412587,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561412587,Unknown + "io.grpc.StatusRuntimeException","UNAVAILABLE: Unable to resolve host temporal-frontend.temporal.svc.cluster.local",,,1720561412587,Unknown + ``` - diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid.mdx index 642775cc6a3..2f38b3dd294 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/utils/utils-uuid.mdx @@ -24,7 +24,7 @@ This page provides a comprehensive reference for utilities - uuid available in t id="utils.uuid.generate" title="Generate a UUID" > - Generate an RFC-compliant V4 uuid. + Generate an RFC-compliant V4 uuid. Uses Temporal workflow's deterministic PRNG making it safe for use within a workflow. Refer to [Namespace: workflow | Temporal TypeScript SDK API Reference](https://typescript.temporal.io/api/namespaces/workflow?&_ga=2.223881945.39829224.1686648936-167080156.1680123165#uuid4) for more information. @@ -77,6 +77,21 @@ This page provides a comprehensive reference for utilities - uuid available in t string + + **selectors** + List + The selectors to get the only specified parameters as output. + + + **success** + Boolean + Status of the request. + + + **errorMessage** + String + Failure reason as message. + @@ -85,28 +100,33 @@ This page provides a comprehensive reference for utilities - uuid available in t - - + - diff --git a/src/content/docs/workflow-automation/workflow-examples.mdx b/src/content/docs/workflow-automation/workflow-examples.mdx index bffd5bcea34..74913ae2b8c 100644 --- a/src/content/docs/workflow-automation/workflow-examples.mdx +++ b/src/content/docs/workflow-automation/workflow-examples.mdx @@ -11,9 +11,7 @@ freshnessValidatedDate: never This page shows common automation scenarios you can build with Workflow Automation. Use these examples as starting points for your own workflows, or explore the [template library](/docs/workflow-automation/create-a-workflow-automation/use-a-template) for ready-to-deploy solutions. -## Incident response and remediation - -### API gateway rollback +## API gateway rollback Revert API gateway configs to a previous state so you can fix errors and misconfigurations. @@ -33,7 +31,7 @@ Revert API gateway configs to a previous state so you can fix errors and misconf **Key actions**: `newrelic.nerdgraph.execute`, `slack.chat.postMessage`, `slack.chat.getReactions`, `aws.systemsManager.writeDocument`, `aws.systemsManager.startAutomation`, `aws.systemsManager.waitForAutomationStatus`, `aws.systemsManager.deleteDocument` -### EC2 instance management +## EC2 instance management Automate provisioning, scaling, and termination of EC2 instances for optimal performance and cost. @@ -54,7 +52,7 @@ Automate provisioning, scaling, and termination of EC2 instances for optimal per **Key actions**: `newrelic.nerdgraph.execute`, `newrelic.nrdb.query`, `slack.chat.postMessage`, `slack.chat.getReactions`, `aws.systemsManager.writeDocument`, `aws.systemsManager.startAutomation`, `aws.systemsManager.waitForAutomationStatus`, `aws.systemsManager.deleteDocument`, `utils.datetime.fromEpoch`, `utils.uuid.generate` -### Deployment rollback +## Deployment rollback Rollback deployment if entity becomes unhealthy and notify with either AWS SQS or HTTP. @@ -74,9 +72,7 @@ Rollback deployment if entity becomes unhealthy and notify with either AWS SQS o **Key actions**: `newrelic.nerdgraph.execute`, `newrelic.ingest.sendLogs`, `aws.execute.api` (sqs.send_message), `http.post` -## Data processing and reporting - -### Send a report to Slack +## Send a report to Slack Send a NRQL query output as a CSV file on Slack. @@ -91,7 +87,7 @@ Send a NRQL query output as a CSV file on Slack. **Key actions**: `newrelic.nrdb.query`, `utils.transform.toCSV`, `slack.chat.postMessage` -### JSON Parsing +## JSON Parsing Parses the New Relic public status API JSON (HTTP) and optionally logs operational and non-operational components. @@ -108,6 +104,153 @@ Parses the New Relic public status API JSON (HTTP) and optionally logs operation **Key actions**: `http.get`, `newrelic.ingest.sendLogs` +## REST API polling and logging + +Poll a REST API endpoint, loop through results, and log data to New Relic. + + +**Key Point:** You don't need to use selectors if you want the full payload. Most workflow tools let you reference the complete response object directly. + + +### Simple GET and Log + +For a basic use case of polling an API and logging the full response: + +**What this workflow does:** +- Trigger: Schedule (e.g., every 5 minutes) or you can use Run for manual +- HTTP Request Step: + - Method: GET + - URL: https://pokeapi.co/api/v2/pokemon + - Save full response body to a variable (e.g., `{{.http_response}}`) +- Log/Create Event Step: + - Send the entire `{{.http_response.body}}` as the payload + - No selectors needed - just pass through the raw JSON + +### REST API with loops and selectors + +This example collects all results from an API, loops through them, makes individual HTTP calls, and logs extracted data. + +**What this workflow does:** +- Fetches all results from a REST API endpoint +- Loops through each result in the response +- Makes individual API calls for each item using data from the loop +- Extracts specific fields from each response using selectors +- Logs the extracted data to New Relic with custom attributes + +**Requirements:** +- Access to a REST API endpoint +- Permissions to send logs via newrelic.ingest.sendLogs + +**Key actions**: `http.get`, `newrelic.ingest.sendLogs` + +```yaml +name: pokemon_workflow +description: '' +steps: + - name: get_all_pokemons + type: action + action: http.get + version: '1' + inputs: + url: https://pokeapi.co/api/v2/pokemon + selectors: + - name: pokemons + expression: .responseBody | fromjson.results + - name: pokemon_loop + type: loop + for: + in: ${{ .steps.get_all_pokemons.outputs.pokemons }} + steps: + - name: get_individual_pokemon + type: action + action: http.get + version: '1' + inputs: + url: ${{ .steps.pokemon_loop.loop.element.url }} + selectors: + - name: pokemon_name + expression: .responseBody | fromjson.name + - name: pokemon_id + expression: .responseBody | fromjson.id + - name: pokemon_stats + expression: .responseBody | fromjson.stats + - name: log_pokemon_info + type: action + action: newrelic.ingest.sendLogs + version: '1' + inputs: + logs: + - message: >- + Pokemon name is: ${{ + .steps.get_individual_pokemon.outputs.pokemon_name}}, Id: ${{ + .steps.get_individual_pokemon.outputs.pokemon_id}} + attributes: + pokemon_stats: ${{ .steps.get_individual_pokemon.outputs.pokemon_stats}} + next: continue + next: end +``` + +### REST API to CSV conversion + +This example illustrates using the full response without selectors, converting API data to CSV, and sharing it via Slack. + +**What this workflow does:** +- Fetches current time data from World Time API based on timezone input +- Converts the full JSON response to CSV format +- Logs the CSV data to New Relic +- Posts the CSV file to a Slack channel + +**Requirements:** +- Access to a REST API endpoint +- Permissions to send logs via newrelic.ingest.sendLogs +- A configured Slack app with a token and target channel + +**Key actions**: `http.get`, `utils.transform.toCSV`, `newrelic.ingest.sendLogs`, `slack.chat.postMessage` + +```yaml +name: jsontocsv + +workflowInputs: + timezone: + type: String + defaultValue: 'America/Los_Angeles' + +steps: + - name: getCurrentTime + type: action + action: http.get + version: 1 + inputs: + url: 'https://worldtimeapi.org/api/timezone/${{ .workflowInputs.timezone }}' + + - name: csv1 + type: action + action: utils.transform.toCSV + version: 1 + inputs: + json: ${{ .steps.getCurrentTime.outputs.responseBody }} + + - name: logOutput + type: action + action: newrelic.ingest.sendLogs + version: 1 + inputs: + logs: + - message: 'CSV: ${{ .steps.csv1.outputs.csv }}' + + - name: postCsv + type: action + action: slack.chat.postMessage + version: 1 + inputs: + channel: test-channel-workflow + text: "Current Date details" + attachment: + filename: 'file.csv' + content: ${{ .steps.csv1.outputs.csv }} + token: ${{ :secrets:dn_staging_slack_token }} +``` + ## Available template workflows The templates listed above are available directly in the New Relic Workflow Automation UI. To access them: From acfe6ed9a14ddf7d0de7828c3902b173fff2e709 Mon Sep 17 00:00:00 2001 From: Abhilash Dutta Date: Wed, 3 Dec 2025 12:59:11 +0530 Subject: [PATCH 11/11] Updates --- .../create-your-own.mdx | 12 +- .../actions-catalog/actions-catalog.mdx | 4 +- .../actions-catalog/aws.mdx | 4935 +++++++++++++++++ .../definition-schema.mdx | 30 +- 4 files changed, 4957 insertions(+), 24 deletions(-) create mode 100644 src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx diff --git a/src/content/docs/workflow-automation/create-a-workflow-automation/create-your-own.mdx b/src/content/docs/workflow-automation/create-a-workflow-automation/create-your-own.mdx index fac0634876e..6278cfbab3b 100644 --- a/src/content/docs/workflow-automation/create-a-workflow-automation/create-your-own.mdx +++ b/src/content/docs/workflow-automation/create-a-workflow-automation/create-your-own.mdx @@ -20,9 +20,9 @@ When templates don't fit your needs, [Create Your Own](https://onenr.io/0OQM47Kg This guide shows you how to build workflows using concepts and a complete example. Choose your learning path: -- **Learn core concepts first** → Read [Core concepts](#core-concepts) and [Workflow patterns](#workflow-patterns) to understand the fundamentals, then apply them -- **Follow the example** → Jump to [Example walkthrough](#example-walkthrough) to build an EC2 auto-resize workflow step-by-step -- **Reference patterns** → Use the [Workflow patterns](#workflow-patterns) section as a quick reference when building your own workflows +- **Learn core concepts first**: Read [Core concepts](#core-concepts) and [Workflow patterns](#workflow-patterns) to understand the fundamentals, then apply them +- **Follow the example**: Jump to [Example walkthrough](#example-walkthrough) to build an EC2 auto-resize workflow step-by-step +- **Reference patterns**: Use the [Workflow patterns](#workflow-patterns) section as a quick reference when building your own workflows **New to workflows?** Start with core concepts, then follow the example. The EC2 workflow demonstrates all key patterns in a real-world scenario. @@ -134,7 +134,7 @@ Understand these fundamentals before you build:
ExampleWorkflow InputWorkflow Definition Outputs
- name: generateUUID

- steps: - - name: generateUUID - type: action - action: utils.uuid.generate - version: 1 + ```yaml + name: generateUUID + steps: + - name: generateUUID + type: action + action: utils.uuid.generate + version: 1 + inputs: + selectors: + - name: uuid + expression: ".uuid" + ```
- ```json - { - "uuid": "c76bd606-5eaa-42bb-a847-4221fb49f83c", - } - ``` + ```yaml + { + "uuid": "-------------------------------", + "success": true + } + ```
- Mandatory field for loop functions to define iteration count + Required parameter for loop functions to define iteration count @@ -242,7 +242,7 @@ Four essential patterns handle most automation scenarios. Each pattern is demons ### Approval gates and waiting -**Use approval gates when:** Human judgment needed before destructive operations or compliance sign-off required +**Use approval gates when:** Human judgment is needed before destructive operations or compliance sign-off is required **Key syntax:** ```yaml @@ -606,7 +606,7 @@ Now let's build each part of the workflow. Each step includes the specific actio The workflow resizes the instance through AWS Systems Manager (SSM): * **`createSsmDocument`**: Creates an SSM Automation document that stops the instance, modifies type, and restarts it. - * **`generateIdempotencyToken`**: Creates a unique UUID. Prevents duplicate resizes if the workflow runs twice. + * **`generateIdempotencyToken`**: Creates a unique UUID to prevent duplicate resizes if the workflow runs twice. * **`startResizing`**: Executes the SSM document with instance ID and new type. * **`progressLoop` (Loop)**: Posts Slack updates every 10 seconds (5 times total). * **`waitForCompletion`**: Polls SSM status with 2-minute timeout. diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx index 2427e592ee1..55d2b4f953e 100644 --- a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/actions-catalog.mdx @@ -5,7 +5,7 @@ tags: - workflow - workflow automation actions - actions catalog -metaDescription: "List of available actions catalog for workflow definition" +metaDescription: "List of available action catalogs for workflow definitions" freshnessValidatedDate: never --- @@ -15,7 +15,7 @@ freshnessValidatedDate: never This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). -New Relic actions catalog provides actions that can be performed against your infrastructure and integrations. You can orchestrate and automate your end-to-end processes by linking together actions that perform tasks in your cloud providers, and New Relic accounts. +The New Relic actions catalog provides actions that can be performed against your infrastructure and integrations. You can orchestrate and automate your end-to-end processes by linking together actions that perform tasks in your cloud providers and New Relic accounts. The actions follow a hierarchical naming convention: `company.product.action`, making it easy to find and use the right action for your workflow. diff --git a/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx new file mode 100644 index 00000000000..04218760408 --- /dev/null +++ b/src/content/docs/workflow-automation/setup-and-configuration/actions-catalog/aws.mdx @@ -0,0 +1,4935 @@ +--- +title: "AWS actions" +tags: + - workflow automation + - workflow + - workflow automation actions + - AWS actions +metaDescription: "A list of available actions in the actions catalog for workflow definitions" +freshnessValidatedDate: never +--- + + + We're still working on this feature, but we'd love for you to try it out! + + This feature is currently provided as part of a preview program pursuant to our [pre-release policies](/docs/licenses/license-information/referenced-policies/new-relic-pre-release-policy). + + +This page provides a comprehensive reference for AWS actions available in the workflow automation actions catalog. These actions enable you to integrate AWS services into your workflow definitions, including Lambda functions, Systems Manager automation, EC2 instance management, and general API execution. + +## Prerequisites + +Before using AWS actions in workflow automation, ensure you have: + + * An AWS account with appropriate permissions. + * AWS credentials configured (IAM user credentials, IAM role ARN, or session credentials). + * The necessary IAM permissions for the specific AWS services you plan to use. + +See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for information on how to create IAM users and IAM roles, and set up static and session AWS credentials for integration with workflow automation AWS actions. + +## Lambda actions + + + + Invokes a Lambda function synchronously or asynchronously with an optional payload. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`my-lambda-function`
**invocationType**OptionalString`Event'|'RequestResponse'|'DryRun'`
**payload**OptionalString`'{"key": "value"}'`
**parameters**OptionalMap + ```yaml + { + "Qualifier": "1", + "ClientContext":"encoded value" + }, + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + - **Action Timeout**: This action has a maximum 1-minute(60-second) timeout for synchronous invocations + - **Long-Running Functions**: For functions that may run longer than 1 minute, you must use the Event InvocationType. This invokes the function asynchronously. You can then use other actions (like aws.cloudwatch.getLogEvents or checking an SQS/SNS callback) to get the result. + - `InvocationType` is critical: + - `RequestResponse` (default): Invokes the function synchronously. The action waits for the function to complete and returns the response. + - `Event`: Invokes the function asynchronously. The action returns a success status immediately without waiting for the code to finish. + - `ClientContext` is for advanced use cases and the provided String must be Base64-encoded + - Any additional API parameters not listed above can be passed in the `parameters` map. To support a wide range of inputs, the `parameters` map accepts any optional argument available in the official boto3 API documentation. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + [{"success":true,"response":{"StatusCode":200,"ExecutedVersion":"$LATEST","Payload":{"statusCode":200,"body":"\"Hello userName\""}}}] + ``` +

+ Response syntax can be referred to [invoke - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/invoke.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ValidationException: 1 validation error detected"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-invoke-function-test + description: 'Invokes a Lambda function with a payload' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_invoke_1 + type: action + action: aws.lambda.invoke + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + functionName: my-lambda-processor + payload: '{"orderId": "12345", "amount": 99.99}' + next: end + ``` +
+
+
+
+
+ + + + Modifies the configuration of a specific AWS Lambda function. Provide only the parameters you want to change. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`"my-lambda-function-to-update"`
**role**OptionalString`arn:aws:iam::123456789012:role/new-lambda-role`
**handler**OptionalString`“main.new_handler"`
**description**OptionalString`Updated function description`
**parameters**OptionalMap + ```yaml + { + "Timeout": "60", + "MemorySize": 123, + }, + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + [{"success":true,"response":{"FunctionName":"hello-you","FunctionArn":"arn:aws:lambda:us-east-2:----:function:hello-you","Runtime":"nodejs20.x","Role":"arn:aws:iam::----:role/TF-hello-you-role","Handler":"hello-you.handler","CodeSize":334,"Description":"This is hello you description from action","Timeout":30,"MemorySize":128,"LastModified":"2025-09-23T13:57:03.000+0000","CodeSha256":"CU03aDDg+34=","Version":"$LATEST","TracingConfig":{"Mode":"PassThrough"},"RevisionId":"0f1e4d9b-c45a-4896-a32d-7cd78e77a273","State":"Active","LastUpdateStatus":"InProgress","LastUpdateStatusReason":"The function is being created.","LastUpdateStatusReasonCode":"Creating","PackageType":"Zip","Architectures":["x86_64"],"EphemeralStorage":{"Size":512},"SnapStart":{"ApplyOn":"None","OptimizationStatus":"Off"},"RuntimeVersionConfig":{"RuntimeVersionArn":"arn:aws:lambda:us-east-2::runtime:01eab27397bfdbdc243d363698d4bc355e3c8176d34a51cd47dfe58cf977f508"},"LoggingConfig":{"LogFormat":"Text","LogGroup":"/aws/lambda/hello-you"}}}] + ``` +

+ Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/update_function_configuration.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`[ { "errorMessage": "An error occurred (ResourceNotFoundException) when calling the UpdateFunctionConfiguration operation: Function not found: arn:aws:lambda:us-east-2:661945836867:function:my-lambda-function-to-update", "success": false, "response": null } ]`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-update-config-test + description: 'Updates the timeout and memory of a Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_update_function_configuration_1 + type: action + action: aws.lambda.updateFunctionConfiguration + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-west-2 + functionName: my-lambda-function-to-update + parameters: + Timeout:60 + MemorySize:123 + + next: end + ``` +
+
+
+
+
+ + + + Retrieves the configuration details, code location, and other metadata for a specific AWS Lambda function. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`"my-lambda-function"`
**parameters**OptionalMap + ```yaml + { + "Qualifier": "1" + }, + ``` +
**selectors**OptionalList`[[{"name": "response", "expression": ".response"}]`
+ + + To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + {"response": } + ``` +

+ Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/get_function.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ResourceNotFoundException: Function not found"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-get-function-test + description: 'Retrieves the configuration of a specific Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_getFunction_1 + type: action + action: aws.lambda.getFunction + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + FunctionName: hello-you + parameters: + Qualifier: 1 + next: end + ``` +
+
+
+
+
+ + + Returns a list of aliases for a specific AWS Lambda function. Aliases are pointers to function versions. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**functionName**RequiredString`“my-lambda-function“`
**marker**OptionalString + Pass the `NextMarker` token from a previous response for pagination. +

+ e.g., `“abcd....."` +

+
**maxItems**OptionalInt + Limit the number of aliases returned +

+ e.g., `123` +

+
**parameters**OptionalMap + For additional optional API parameters. +

+ e.g., `{"AnotherOptionalParam": "value"}` +

+
**selectors**OptionalList`[{"name": "response", "expression": ".response"}]`
+ + + - **Pagination**: Use the Marker and MaxItems inputs to paginate through a large number of aliases. + - To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + {"response": } + ``` +

+ Response syntax can be referred to [update_function_configuration - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/list_aliases.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "ResourceNotFoundException: Function not found"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: lambda-list-aliases-test + description: 'Lists all aliases for a Lambda function' + workflowInputs: + arnRole: + type: String + steps: + - name: aws_lambda_list_aliases_1 + type: action + action: aws.lambda.listAliases + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + functionName: hello-you + parameters: + FunctionVersion: 1 + next: end + ``` +
+
+
+
+
+
+ +## EC2 actions + + + + + This action deletes an Amazon EC2 snapshot. You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**snapshotId**RequiredString`“snapshot-id-1"`
**selectors**OptionalString`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object + No Response in case of success : true +

+ Response syntax can be referred [delete_snapshot - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/delete_snapshot.html). +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Failed to delete snapshot"`
+
+ + + + + + + + + + + + + +
Workflow Example
+ ```yaml + name: ec2-deleteSnapshot-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + snapshotId: + type: List + defaultValue: snapshot-id-1 + steps: + - name: aws_ec2_deleteSnapshot_1 + type: action + action: aws.ec2.deleteSnapshot + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + snapshotId: ${{ .workflowInputs.snapshotId }} + next: end + ``` +
+
+
+
+
+ + + + Requests a reboot of the specified instances. This operation is asynchronous; it only queues a request to reboot the specified instances. The operation succeeds if the instances are valid and belong to you. Requests to reboot terminated instances are ignored. + + If an instance does not cleanly shut down within a few minutes, Amazon EC2 performs a hard reboot. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object[reboot_instances - Boto3 1.40.56 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/reboot_instances.html)
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: reboot-ec2-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: List + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_rebootInstances_1 + type: action + action: aws.ec2.rebootInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
+
+
+
+
+ + + + Starts an Amazon EBS-backed instance that you previously stopped. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**Object + ```yaml + {"response":{ + 'StartingInstances': [ + { + 'InstanceId': 'String', + 'CurrentState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + }, + 'PreviousState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + } + }, + ] + } + + } + + } + ``` +

+ Response syntax can be referred [start_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/start_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "The parameter instancesSet cannot be used with the parameter maxResults"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ab-ec2-startInstance-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_startInstances_1 + type: action + action: aws.ec2.startInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
+
+
+
+
+ + + + Terminates the specified instances. This operation is [idempotent](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html); if you terminate an instance more than once, each call succeeds. + + If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**instanceIds**RequiredList`"[\"i-0123456789abcdef0\", \"i-0fedcba9876543210\"]"`
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + { + 'TerminatingInstances': [ + { + 'InstanceId': 'String', + 'CurrentState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + }, + 'PreviousState': { + 'Code': 123, + 'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped' + } + }, + ] + } + ``` +

+ Response syntax can be referred [terminate_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/terminate_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (`InvalidInstanceID.Malformed`) when calling the TerminateInstances operation: The instance ID 'i-012345678' is malformed"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ec2-terminate-test + description: '' + workflowInputs: + arnRole: + type: String + region: + type: String + defaultValue: us-west-2 + instanceIds: + type: list + defaultValue: ["i-123456789abcdef0"] + steps: + - name: aws_ec2_terminateInstances_1 + type: action + action: aws.ec2.terminateInstances + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: ${{ .workflowInputs.region }} + instanceIds: ${{ .workflowInputs.instanceIds }} + next: end + ``` +
+
+
+
+
+ + + + Launches the specified number of instances using an AMI for which you have permissions. + + You can specify a number of options, or leave the default options. The following rules apply: + - If you don’t specify a subnet ID, we choose a default subnet from your default VPC for you. If you don’t have a default VPC, you must specify a subnet ID in the request. + - If any of the AMIs have a product code attached for which the user has not subscribed, the request fails. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**imageId**RequiredString`“ami-0ca4d5db4872d0c28”`
**instanceType**RequiredString`“t2.micro”`
**minCount**RequiredInt`1`
**maxCount**RequiredInt`10`
**parameters**OptionalMap + ```yaml + { + "EbsOptimized": false, + "TagSpecifications": [ + { + "ResourceType": "instance", + "Tags": [ + { + "Key": "Name", + "Value": "My-Web-Server" + } + ] + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + To support a wide range of inputs, the `parameters` map accepts any optional argument available. This allows you to dynamically construct requests by adding multiple fields. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object +

+ Response syntax can be referred: [run_instances - Boto3 1.40.50 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/run_instances.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: ""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: ec2_run_instance + workflowInputs: + arnRole: + type: String + required: true + steps: + - name: RunInstance + type: action + action: aws.ec2.runInstances + version: '1' + inputs: + awsRoleArn: ${{.workflowInputs.arnRole}} + region: us-east-2 + imageId: ami-0ca4d5db4872d0c28 + instanceType: t2.micro + minCount: 1 + maxCount: 1 + parameters: + EbsOptimized: false + TagSpecifications: + - ResourceType: instance + Tags: + - Key: Name + Value: My-Test-Instance + selectors: + - name: instanceId + expression: .response.Instances[0].InstanceId + ``` +
+
+
+
+
+ +
+ +## Systems Manager actions + + + + Writes a document to the AWS account based on the AWS credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
**documentType**OptionalString`documentType: "Command"`
**documentFormat**OptionalString`documentFormat: "YAML"`
**documentContent**RequiredString
**override**OptionalBoolean + `override: true (default)`. When `true`, always write the document with the provided name even if one already exist. When `false`, if a document with the provided `documentName` already exist, the action returns `success: false` and `errorMessage:Document already exists`. Please enable override if you want to update the existing document. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**documentName**String`documentName: "my-ssm-document"`
**documentVersion**String`documentVersion: 1`
**documentType**String`documentType: "Command"`
**documentStatus**String`documentStatus: "Active"`.
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + inputs: + Service: lambda + Api: ListFunctions + ``` + + ```yaml + outputs: + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ + + Deletes an AWS document in the AWS account based on the credentials passed in the action input. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**documentName**StringdocumentName: "my-ssm-document"
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + inputs: + Service: lambda + Api: ListFunctions + ``` + + ```yaml + outputs: + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ + + Starts an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartAutomationExecution.html) + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsAccessKeyId**RequiredString`${{ :secrets: }}`
**awsSecretAccessKey**RequiredString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**documentName**RequiredString`documentName: "my-ssm-document"`
**parameters**OptionalMap`parameters: myKey: myValue`
**idempotencyToken**OptionalUUID`idempotencyToken: "any token"`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**automationExecutionId**String`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + Service: lambda + Api: ListFunctions + ``` + + ```yaml + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ + + Waits for an automation using an AWS document. See [AWS Systems Manager Documentation](https://docs.aws.amazon.com/systems-manager/?id=docs_gateway) for more information. + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**automationExecutionId**RequiredString`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`. The automation executionID for which we need to wait for its completion.
**automationExecutionStatuses**OptionalListList of automation execution statuses from [AutomationExecution](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_AutomationExecution.html#AutomationExecutionStatus) that can stop the waiting, `Default: ["Success", "Failed"]`
**timeout**Optionalint`timeout: 600`. The duration in seconds can wait for automation status to be one of the expected `automationExecutionStatuses`. Post this timeout duration, the action return value with timeout error.
**selectors**OptionalList`[{\"name\": \"automationExecutionStatus\", \"expression\": \".automationExecutionStatus\"}, {\"name\": \"scriptOutput\", \"expression\": \".automationExecutionOutputs.pythonStep.scriptOutput | tojson\"}]`.
+ + + 1. In the action input, only `awsAccessKeyId` and `awsSecretAccessKey` can be provided, but they should be static credentials of an IAM user. + 2. If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + 3. Refer to the instructions to set up [AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials). + 4. Use selectors to get only the specified parameters as output. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**automationExecutionId**String`automationExecutionId: "3143a28d-241c-4abd-a3ca-9c0ff3890241"`
**automationExecutionStatus**String`automationExecutionStatus: "Success"`. If action is successful, It will either of the values passed in `automationExecutionStatuses` input field. Else, this will be null.
**automationExecutionOutputs**Map + ```yaml + "automationExecutionOutputs": { + "ExecuteGetApiResources": { + "resultResourceId": [ + "pky3cb" + ] + }, + "ExecuteListVersionsByFunction": { + "resultLambdaVersionArn": [ + "arn:aws:lambda:us-east-2:123456789012:function:ApiGwTestFn:1" + ] + } + } + ``` +

+ The output will be a map of output values from the document. Any output in the document can be collected using this output field and can be used in subsequent steps of the workflow automation definition. +

+
**success**Boolean`success: true`
**errorMessage**String`errorMessage: "Some error message from ssm"`
+
+ + + + + + + + + + + + + + + + + +
Workflow definitionInputsOutputs
+ ```yaml + schemaVersion: '0.3' + description: List all Lambda function names. + mainSteps: + - name: ExecuteAwsApi + action: aws:executeAwsApi + isEnd: true + ``` + + ```yaml + Service: lambda + Api: ListFunctions + ``` + + ```yaml + - Name: resultFunctionName + Selector: $..FunctionName + Type: StringList + outputs: + - ExecuteAwsApi.resultFunctionName + ``` +
+
+
+
+
+ +
+ +## General AWS actions + + + + + This action allows you to execute any AWS API operation for a specified service. It supports providing AWS credentials, region, service name, API name, and optional parameters. The action can return outputs such as success status, response data, and error messages, making it versatile for interacting with AWS services programmatically. + + ### Security and IAM configuration + + To use this action, you must configure AWS credentials. See [Set up AWS credentials](/docs/workflow-automation/setup-and-configuration/set-up-aws-credentials/) for detailed instructions on creating an IAM role or IAM user. + + + **Security best practice:** When defining IAM policies for this action, always use least-privilege access. Grant only the specific AWS API actions your workflow requires, and restrict permissions to specific resources rather than using wildcards. + + + ### Required IAM permissions + + The permissions you need depend on which AWS services and APIs your workflow calls. Use the examples below as templates for creating least-privilege policies. + + **Example: Allow sending messages to a specific SQS queue** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-west-2::" + } + ] + } + ``` + + **Example: Allow querying a specific DynamoDB table** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-west-2::table/" + } + ] + } + ``` + + **Example: Multiple services with specific permissions** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-west-2::" + }, + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-west-2::table/" + } + ] + } + ``` + + + - Replace ``, ``, and `` with your actual values + - Find available AWS service APIs in the [Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) + - For more complex IAM policy patterns, see the [AWS IAM documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) + + + For more information on how this action works, see the [AWS Systems Manager executeAwsApi documentation](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-action-executeAwsApi.html). + + + + + Inputs + + + + Outputs + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`region: "us-east-2"`
**service**RequiredString`service: "sqs"`.[AWS available services](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html)
**api**RequiredStringapi: "create_queue"
**parameters**RequiredMap + ```yaml + parameters: { + "QueueName": "dks-testing-queue", + "Attributes": { + "DelaySeconds": "0", + "MessageRetentionPeriod": "86400" + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + - In the action input, at least one of the AWS credentials (short, long, role) should be provided, where the role takes precedence over the others. + - In the action input, if `awsAccessKeyId` and `awsSecretAccessKey` are to be provided, make sure they are static credentials of an IAM user. + - If session credentials are to be used, `awsAccessKeyId`, `awsSecretAccessKey` and `awsSessionToken` must be passed to the action input. + - Refer to [AWS credentials](/docs/workflow-automation/set-up-aws-credentials/) for instructions. + - Use selectors to get only the specified parameters as output. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object`{"response":` + }} each service and api have different response for example https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/query.html.
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "User does not have permission to query DynamoDB"`
+
+ + + + ### Example 1: Send a message to an SQS queue + + This example demonstrates how to send a message to an Amazon SQS queue using the `aws.execute.api` action with IAM role authentication. + + ```yaml + name: sqs_send_message_example + + workflowInputs: + awsRoleArn: + type: String + description: "ARN of the IAM role to assume (e.g., arn:aws:iam::123456789012:role/workflow-sqs-role)" + awsRegion: + type: String + defaultValue: us-east-2 + awsQueueUrl: + type: String + defaultValue: "https://sqs.us-east-2.amazonaws.com//" + + steps: + - name: sendSqsMessage + type: action + action: aws.execute.api + version: 1 + inputs: + awsRoleArn: ${{ .workflowInputs.awsRoleArn }} + region: ${{ .workflowInputs.awsRegion }} + service: sqs + api: send_message + parameters: + QueueUrl: ${{ .workflowInputs.awsQueueUrl }} + MessageBody: | + { + "message": "deployment is bad", + "status": "not good" + } + selectors: + - name: success + expression: '.success' + - name: messageId + expression: '.response.MessageId' + - name: errorMessage + expression: '.errorMessage' + + - name: logResult + type: action + action: newrelic.ingest.sendLogs + version: 1 + inputs: + message: 'SQS message sent. Success: ${{ .steps.sendSqsMessage.outputs.success }}, MessageId: ${{ .steps.sendSqsMessage.outputs.messageId }}' + licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' + ``` + + **Required IAM policy for this example:** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "sqs:SendMessage", + "Resource": "arn:aws:sqs:us-east-2::" + } + ] + } + ``` + + **Expected outputs:** + - `success`: Boolean indicating whether the message was sent successfully + - `messageId`: The unique ID assigned by SQS to the sent message + - `errorMessage`: Error message if the operation failed + + ### Example 2: Query a DynamoDB table + + This example demonstrates how to query a DynamoDB table using the `aws.execute.api` action with session credentials. + + ```yaml + name: dynamodb_query_example + + workflowInputs: + awsAccessKeyId: + type: String + defaultValue: "${{ :secrets:AWS_ACCESS_KEY_ID }}" + awsSecretAccessKey: + type: String + defaultValue: "${{ :secrets:AWS_SECRET_ACCESS_KEY }}" + awsSessionToken: + type: String + defaultValue: "${{ :secrets:AWS_SESSION_TOKEN }}" + awsRegion: + type: String + defaultValue: us-east-2 + tableName: + type: String + defaultValue: workflow-definitions-prod + scopedName: + type: String + description: "The scoped name to query" + version: + type: String + defaultValue: "1" + + steps: + - name: queryDynamoDB + type: action + action: aws.execute.api + version: 1 + inputs: + awsAccessKeyId: ${{ .workflowInputs.awsAccessKeyId }} + awsSecretAccessKey: ${{ .workflowInputs.awsSecretAccessKey }} + awsSessionToken: ${{ .workflowInputs.awsSessionToken }} + region: ${{ .workflowInputs.awsRegion }} + service: dynamodb + api: query + parameters: + TableName: ${{ .workflowInputs.tableName }} + KeyConditionExpression: "ScopedName = :scopedNameValue AND Version = :versionValue" + ExpressionAttributeValues: + ":scopedNameValue": + S: ${{ .workflowInputs.scopedName }} + ":versionValue": + N: ${{ .workflowInputs.version }} + selectors: + - name: success + expression: '.success' + - name: response + expression: '.response' + - name: errorMessage + expression: '.errorMessage' + + - name: logResult + type: action + action: newrelic.ingest.sendLogs + version: 1 + inputs: + message: 'DynamoDB query result: ${{ .steps.queryDynamoDB.outputs.response.Items }}' + licenseKey: '${{ :secrets:NEW_RELIC_LICENSE_KEY }}' + ``` + + **Required IAM policy for this example:** + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "dynamodb:Query", + "Resource": "arn:aws:dynamodb:us-east-2::table/workflow-definitions-prod" + } + ] + } + ``` + + **Expected outputs:** + - `success`: Boolean indicating whether the query was successful + - `response`: The DynamoDB query response containing the matching items + - `errorMessage`: Error message if the operation failed + +
+
+
+
+ +## CloudWatch actions + + + + + This action retrieves a batch of log events from a specified log stream in AWS CloudWatch Logs. It's essential for monitoring, auditing, and troubleshooting applications by programmatically fetching log data. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**logStreamName**RequiredString`"2023/10/27/[$LATEST]abcdef123456"`
**logGroupName**OptionalString`"/aws/lambda/my-function"`
**logGroupIdentifier**OptionalString`“arn:partition:service:region:account-id:resource”`
**startTime**OptionalInt`1759296000000`
**endTime**OptionalInt`1759296000000`
**limit**OptionalInt`50`
**startFromHead**OptionalBoolean`true`
**unmask**OptionalBoolean`false`
**nextToken**OptionalString`“f/39218833627378687642013305455131706539523449361490509828/s”`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + { + 'events': [ + { + 'timestamp': 123, + 'message': 'string', + 'ingestionTime': 123 + }, + ], + 'nextForwardToken': 'string', + 'nextBackwardToken': 'string' +} + ``` +
**success**Boolean`success: true | false`
**errorMessage**String`“An error occurred (ExpiredTokenException) when calling the GetLogEvents operation: The security token included in the request is expired”`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: get-lambda-logs + description: 'Retrieve log events from an AWS Lambda function' + workflowInputs: + region: + type: String + defaultValue: us-east-2 + logGroupName: + type: String + defaultValue: /aws/lambda/my-function + logStreamName: + type: String + defaultValue: 2023/10/27/[$LATEST]abcdef123456 + steps: + name: get_events_step + type: action + action: aws.cloudwatch.get_log_events + version: '1' + inputs: + region: ${{ .workflowInputs.region }} + logGroupName: ${{ .workflowInputs.logGroupName }} + logStreamName: ${{ .workflowInputs.logStreamName }} + limit: 100 + ``` +
+
+
+
+
+ + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**logGroupName**RequiredString`"/aws/lambda/hello-you"`
**logStreamName**RequiredString`"2025/09/24/[$LATEST]09f7ca9e9ab044f389419ce60305f594"`
**logEvents**RequiredList + ```yaml + [ + +{ "timestamp": 1698384000000, "message": "Workflow task started." }, + + { "timestamp": 1698384000015, "message": "Data validated successfully." } ] + ``` +
**entity**OptionalDict`{ "entity": { "keyAttributes": { "ResourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer", "Identifier": "app/my-web-lb/12345", "Environment": "Production" }, "attributes": { "MonitoringTier": "Gold", "OwnerTeam": "Networking", "MaintenanceWindow": "Sat: 0200-0400" } } }`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + ```yaml + { + 'events': [ + { + 'timestamp': 123, + 'message': 'string', + 'ingestionTime': 123 + }, + ], + 'nextForwardToken': 'string', + 'nextBackwardToken': 'string' + } +``` +
**success**Boolean`success: true | false`
**errorMessage**String`“An error occurred (ExpiredTokenException) when calling the GetLogEvents operation: The security token included in the request is expired”`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: get-lambda-logs + description: 'Retrieve log events from an AWS Lambda function' + workflowInputs: + region: + type: String + defaultValue: us-east-2 + logGroupName: + type: String + defaultValue: /aws/lambda/my-function + logStreamName: + type: String + defaultValue: 2023/10/27/[$LATEST]abcdef123456 + steps: + name: get_events_step + type: action + action: aws.cloudwatch.get_log_events + version: '1' + inputs: + region: ${{ .workflowInputs.region }} + logGroupName: ${{ .workflowInputs.logGroupName }} + logStreamName: ${{ .workflowInputs.logStreamName }} + limit: 100 + ``` +
+
+
+
+
+
+ +## S3 actions + + + + + The `listObjectsV2` method returns some or all (up to 1,000) of the objects in a bucket. It is a more modern and recommended version of `list_objects`. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**prefix**OptionalString"`path/to/folder/`"
**maxKeys**OptionalInteger`100`
**continuationToken**OptionalString`some-token`
**parameters**OptionalMap + ```graphql + { + "Delimiter": "/" + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
EncodingTypeString
FetchOwnerBoolean
StartAfterString
RequestPayerString
ExpectedBucketOwnerString
OptionalObjectAttributesList
DelimiterString
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'IsTruncated': True|False, + 'Contents': [ + { + 'Key': 'string', + 'LastModified': datetime(2015, 1, 1), + 'ETag': 'string', + 'ChecksumAlgorithm': [ + 'CRC32'|'CRC32C'|'SHA1'|'SHA256'|'CRC64NVME', + ], + 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', + 'Size': 123, + 'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'GLACIER'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'DEEP_ARCHIVE'|'OUTPOSTS'|'GLACIER_IR'|'SNOW'|'EXPRESS_ONEZONE'|'FSX_OPENZFS', + 'Owner': { + 'DisplayName': 'string', + 'ID': 'string' + }, + 'RestoreStatus': { + 'IsRestoreInProgress': True|False, + 'RestoreExpiryDate': datetime(2015, 1, 1) + } + }, + ], + 'Name': 'string', + 'Prefix': 'string', + 'Delimiter': 'string', + 'MaxKeys': 123, + 'CommonPrefixes': [ + { + 'Prefix': 'string' + }, + ], + 'EncodingType': 'url', + 'KeyCount': 123, + 'ContinuationToken': 'string', + 'NextContinuationToken': 'string', + 'StartAfter': 'string', + 'RequestCharged': 'requester' + } + ``` +

+ Response syntax can be referred to in the [list_objects_v2 - Boto3 1.40.52 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/list_objects_v2.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Parameter validation failed:\nInvalid bucket name \"s3-activity-test \": Bucket name must match the regex \"^[a-zA-Z0-9.\\-_]{1,255}$\" or be an ARN matching the regex \"^arn:(aws).:(s3|s3-object-lambda):[a-z\\-0-9]:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\\-]{1,63}$\""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: aws-s3-list-objects-v2 + description: 'List Objects in an AWS S3 Bucket' + + steps: + - name: aws_s3_listObjectsV2_1 + type: action + action: aws.s3.listObjectsV2 + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-east-2" + bucket: "examplebucket" + prefix: "path/to/folder/" + maxKeys: 100 + continuationToken: "some-token" + next: end + ``` +
+
+
+
+
+ + + + The `deleteObject` method permanently removes a single object from a bucket. For versioned buckets, this operation inserts a **delete marker**, which hides the object without permanently deleting it unless a `VersionId` is specified. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**parameters**OptionalMap + ```yaml + { + "RequestPayer": "test", + "BypassGovernanceRetention": false + "VersionId":"testVersion", + "MFA":"Test" + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
RequestPayerString
BypassGovernanceRetentionBoolean
ExpectedBucketOwnerString
IfMatchString
IfMatchLastModifiedTimeMap
IfMatchSizeInt
VersionIdString
MFAString
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'DeleteMarker': True|False, + 'VersionId': 'string', + 'RequestCharged': 'requester' + } + ``` +

+ Response syntax can be referred [delete_object - Boto3 1.40.55 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/delete_object.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "Parameter validation failed:\nInvalid bucket name \"s3-activity-test \": Bucket name must match the regex \"^[a-zA-Z0-9.\\-_]{1,255}$\" or be an ARN matching the regex \"^arn:(aws).:(s3|s3-object-lambda):[a-z\\-0-9]:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\\-]{1,63}$\""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: aws-s3-delete-object + description: 'Delete an AWS S3 Object' + + steps: + - name: aws_s3_deleteObject_1 + type: action + action: aws.s3.deleteObject + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-west-2" + bucket: "my-bucket" + key: "path/to/object.txt" + next: end + ``` +
+
+
+
+
+ + + + Adds an object to a bucket. Amazon S3 is a distributed system. If it receives multiple write requests for the same object simultaneously, it overwrites all but the last object written. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**body**RequiredString`file content`
**contentType**RequiredString"`plain/text`"
**tagging**OptionalString`“key1=value1"`
**parameters**OptionalMap + ```yaml + { + "ServerSideEncryption": "AES256", + "Metadata": { + 'metadata1': 'value1', + 'metadata2': 'value2', + } + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
RequestPayerString
ACLString
CacheControlString
ContentDispositionString
ContentEncodingString
ContentLanguageString
ContentLengthInt
ContentMD5String
ChecksumAlgorithmString
ChecksumCRC32String
ChecksumCRC32CString
ChecksumCRC64NVMEString
ChecksumSHA1String
ChecksumSHA256String
ExpiresMap
IfMatchString
IfNoneMatchString
GrantFullControlString
GrantReadString
GrantReadACPString
GrantWriteACPString
WriteOffsetBytesInt
ServerSideEncryptionString
StorageClassString
WebsiteRedirectLocationString
SSECustomerAlgorithmString
SSECustomerKeyString
SSEKMSKeyIdString
SSEKMSEncryptionContextString
BucketKeyEnabledBoolean
RequestPayerString
ObjectLockModeString
ObjectLockRetainUntilDateMap
ObjectLockLegalHoldStatusString
ExpectedBucketOwnerString
MetadataMap
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'Expiration': 'string', + 'ETag': 'string', + 'ChecksumCRC32': 'string', + 'ChecksumCRC32C': 'string', + 'ChecksumCRC64NVME': 'string', + 'ChecksumSHA1': 'string', + 'ChecksumSHA256': 'string', + 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', + 'ServerSideEncryption': 'AES256'|'aws:fsx'|'aws:kms'|'aws:kms:dsse', + 'VersionId': 'string', + 'SSECustomerAlgorithm': 'string', + 'SSECustomerKeyMD5': 'string', + 'SSEKMSKeyId': 'string', + 'SSEKMSEncryptionContext': 'string', + 'BucketKeyEnabled': True|False, + 'Size': 123, + 'RequestCharged': 'requester' + } + ``` +

+ Response syntax can be referred [put_object - Boto3 1.40.59 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/put_object.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: s3-put-object + description: 'Put an AWS S3 Object' + + steps: + - name: aws_s3_putObject_1 + type: action + action: aws.s3.putObject + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-east-2" + bucket: "examplebucket" + key: "path/to/object.txt" + body: "Hello world" + contentType: "plain/text" + tagging: "key1=value1" + next: end + ``` +
+
+
+
+
+ + + + In the `GetObject` request, specify the full key name for the object. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**bucket**RequiredString"`examplebucket`"
**key**RequiredString"`path/to/object.txt`"
**versionId**OptionalString`"some-version-id"`
**range**OptionalString`bytes=0-99`
**parameters**OptionalMap + ```yaml + { + "ChecksumMode": "ENABLED", + "ExpectedBucketOwner": "test-user" + } + ``` +
**selectors**OptionalList`[{\"name\": \"response\", \"expression\": \".response\"}, {\"name\": \"success\", \"expression\": \".success\"}, {\"name\": \"errorMessage\", \"expression\": \".errorMessage\"}]`
+ + + The action will fail if the object is more than 100kb. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldType
IfMatchString
IfModifiedSinceMap
IfNoneMatchString
IfUnmodifiedSinceMap
ResponseCacheControlString
ResponseContentDispositionString
ResponseContentEncodingString
ResponseContentLanguageString
ResponseContentTypeString
ResponseExpiresMap
SSECustomerAlgorithmString
SSECustomerKeyString
RequestPayerString
PartNumberInt
ExpectedBucketOwnerString
ChecksumModeString
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + + + ```yaml + { + 'Body': StreamingBody(), + 'DeleteMarker': True|False, + 'AcceptRanges': 'string', + 'Expiration': 'string', + 'Restore': 'string', + 'LastModified': datetime(2015, 1, 1), + 'ContentLength': 123, + 'ETag': 'string', + 'ChecksumCRC32': 'string', + 'ChecksumCRC32C': 'string', + 'ChecksumCRC64NVME': 'string', + 'ChecksumSHA1': 'string', + 'ChecksumSHA256': 'string', + 'ChecksumType': 'COMPOSITE'|'FULL_OBJECT', + 'MissingMeta': 123, + 'VersionId': 'string', + 'CacheControl': 'string', + 'ContentDisposition': 'string', + 'ContentEncoding': 'string', + 'ContentLanguage': 'string', + 'ContentRange': 'string', + 'ContentType': 'string', + 'Expires': datetime(2015, 1, 1), + 'ExpiresString': 'string', + 'WebsiteRedirectLocation': 'string', + 'ServerSideEncryption': 'AES256'|'aws:fsx'|'aws:kms'|'aws:kms:dsse', + 'Metadata': { + 'string': 'string' + }, + 'SSECustomerAlgorithm': 'string', + 'SSECustomerKeyMD5': 'string', + 'SSEKMSKeyId': 'string', + 'BucketKeyEnabled': True|False, + 'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'GLACIER'|'DEEP_ARCHIVE'|'OUTPOSTS'|'GLACIER_IR'|'SNOW'|'EXPRESS_ONEZONE'|'FSX_OPENZFS', + 'RequestCharged': 'requester', + 'ReplicationStatus': 'COMPLETE'|'PENDING'|'FAILED'|'REPLICA'|'COMPLETED', + 'PartsCount': 123, + 'TagCount': 123, + 'ObjectLockMode': 'GOVERNANCE'|'COMPLIANCE', + 'ObjectLockRetainUntilDate': datetime(2015, 1, 1), + 'ObjectLockLegalHoldStatus': 'ON'|'OFF' + } + ``` +

+ Response syntax can be referred to in the [get_object - Boto3 1.40.59 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/get_object.html) +

+
+
+
**success**Boolean`success: true | false`
**errorMessage**String`errorMessage: "An error occurred (InvalidArgument) when calling the GetObject operation: Invalid version id specified"`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: s3-get-object + description: 'Get an AWS S3 Object' + + steps: + - name: aws_s3_getObject_1 + type: action + action: aws.s3.getObject + version: '1' + inputs: + awsRoleArn: "arn:aws:iam::123456789012:role/my-workflow-role" + region: "us-east-2" + bucket: "examplebucket" + key: "path/to/object.txt" + next: end + ``` +
+
+
+
+
+
+ +## SNS actions + + + + + Sends a message to an Amazon SNS topic. All subscribers to the topic will receive the message. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**message**RequiredString + Messages must be UTF-8 encoded strings and at most 256 KB in size +

+ `'Workflow failed at step 3'` +

+
**topicArn**OptionalString + If you don’t specify a value for the topicArn parameter, Must specify a value for the targetArn parameters. +

+ `“arn:aws:sns:us-east-2:123456789012:my-topic”` +

+
**targetArn**OptionalString + If you don’t specify a value for the topicArn parameter, Must specify a value for the targetArn parameters. +

+ `"arn:aws:sns:us-east-2:123456789012:MySNSTopic"` +

+
**subject**OptionalString`"Workflow Update"`
**MessageStructure**OptionalString`MessageStructure`
**messageAttributes**OptionalMap + ```json + { + 'string': { + 'DataType': 'string', + 'StringValue': 'string', + 'BinaryValue': b'bytes' + } + }, + ``` +
**messageDeduplicationId**OptionalString`“abc123deduplicationId5678”`
**messageGroupId**OptionalString`“order-processing-group-2023_A”`
+ + + + + + + + + + + + + + + + + + +
Input FieldTypeExample
PhoneNumberStringWe do not include PhoneNumber as it is considered Personally Identifiable Information (PII).
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + `[{"success":true,"response":{"MessageId":"2333ededwedwed-52f5-a716-e10355e3e2ff"}}]` +

+ Response syntax can be referred to sns-publish- Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns/client/publish.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`[{"errorMessage":"An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: TopicArn or TargetArn Reason: no value for required parameter","success":false,"response":null}]`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: sns-publish-test + description: Publishes a notification to an SNS topic + workflowInputs: + arnRole: + type: String + steps: + - name: aws_sns_publish_1 + type: action + action: aws.sns.publish + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-1 + topicArn: arn:aws:sns:us-east-1:123456789012:workflow-test-topic + subject: "Workflow Update" + message: "The data processing workflow has completed successfully." + next: end + ``` +
+
+
+
+
+
+ +## SQS actions + + + + + Sends a message to a specified Amazon SQS queue. + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**queueUrl**RequiredString"`https://sqs.us-east-2.amazonaws.com/123456789012/my-queue`"
**messageBody**RequiredString`“This is a test message”`
**messageDeduplicationId**OptionalString`“abc123deduplicationId5678”`
**messageGroupId**OptionalString`“group1”`
**messageAttributes**OptionalMap +

+ `{ "my_attribute_name_1": { "DataType": "String", "StringValue":"my_attribute_value_1"},` +

+ +

+ `"my_attribute_name_2": { "DataType": "String", "StringValue":"my_attribute_value_2"}}` +

+
**delaySeconds**OptionalInt`123`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + `{"statusCode":200, "payload":{"status":"success","data":{"MessageId":"e9b73a52-d018-4a73-9fcd-8efb682fba43","MD5OfMessageBody":"fae535c7f7c5687a1c3d8bc52288e33a","MD5OfMessageAttributes":"3ae3c4f59958e031d0d53af2d157e834", }, "message":"Message sent successfully to the SQS queue." }}` +

+ Response syntax can be referred to [SQS send_message - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/client/send_message.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "SQS.Client.exceptions.QueueDoesNotExist: "The specified queue does not exist.""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: sqs-send-message-test + description: Sends a message to an SQS queue + workflowInputs: + arnRole: + type: String + steps: + - name: aws_sqs_sendMessage_1 + type: action + action: aws.sqs.sendMessage + version: '1' + inputs: + awsRoleArn: ${{ .workflowInputs.arnRole }} + region: us-east-2 + queueUrl: https://sqs.us-east-2.amazonaws.com/123456789012/workflow-test-queue + messageBody: "This is a test message" + messageAttributes: + my_attribute_name_1: + DataType: "String" + StringValue: "my_attribute_value_1" + my_attribute_name_2: + DataType: "String" + StringValue: "my_attribute_value_2" + next: end + ``` +
+
+
+
+
+
+ + + + + Retrieves one or more messages, from the specified queue + + + + + Inputs + + + Outputs + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldOptionalityTypeExample
**awsRoleArn**OptionalString`arn:aws:iam::123456789012:role/my-workflow-role`
**awsAccessKeyId**OptionalString`${{ :secrets: }}`
**awsSecretAccessKey**OptionalString`${{ :secrets: }}`
**awsSessionToken**OptionalString`${{ :secrets: }}`
**region**RequiredString`"us-east-2"`
**queueUrl**RequiredString"`https://sqs.us-east-2.amazonaws.com/123456789012/my-queue`"
**maxNumberOfMessages**OptionalInt`10`
**waitTimeSeconds**OptionalInt`5`
**VisibilityTimeout**OptionalInt`123`
**AttributeNames**OptionalList + ```yaml + [ + 'All'|'Policy'|'VisibilityTimeout'|'MaximumMessageSize'|'MessageRetentionPeriod'|'ApproximateNumberOfMessages'|'ApproximateNumberOfMessagesNotVisible'|'CreatedTimestamp'|'LastModifiedTimestamp'|'QueueArn'|'ApproximateNumberOfMessagesDelayed'|'DelaySeconds'|'ReceiveMessageWaitTimeSeconds'|'RedrivePolicy'|'FifoQueue'|'ContentBasedDeduplication'|'KmsMasterKeyId'|'KmsDataKeyReusePeriodSeconds'|'DeduplicationScope'|'FifoThroughputLimit'|'RedriveAllowPolicy'|'SqsManagedSseEnabled', + ] + ``` +
**messageAttributeNames**OptionalList + ```yaml + [ + 'message_attribute_name', + ], + ``` +
**messageSystemAttributeNames**OptionalList`['SenderId', 'SentTimestamp']`
**receiveRequestAttemptId**OptionalString`“req-1234abcd”`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Output FieldTypeExample
**response**object + `{"response": }
` +

+ Response syntax can be referred to receive_message - Boto3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/client/receive_message.html) +

+
**success**Boolean`success: true | false`
**errorMessage**String`"errorMessage": "SQS.Client.exceptions.QueueDoesNotExist: "The specified queue does not exist.""`
+
+ + + + + + + + + + + + + +
Workflow example
+ ```yaml + name: sqs-receive-message-test + description: 'Receives a message from an SQS queue' + steps: + - name: aws_sqs_receiveMessage_1 + type: action + action: aws.sqs.receiveMessage + version: '1' + inputs: + awsRoleArn: ${{ :secrets:awsRoleArn }} + region: us-east-1 + queueUrl: https://sqs.us-east-1.amazonaws.com/123456789012/workflow-test-queue + waitTimeSeconds: 5 + maxNumberOfMessages: 10 + messageAttributeNames: ['message_attribute_name'], + ``` +
+
+
+
+
+
\ No newline at end of file diff --git a/src/content/docs/workflow-automation/workflow-automation-apis/definition-schema.mdx b/src/content/docs/workflow-automation/workflow-automation-apis/definition-schema.mdx index 1e9dabe889f..f2e23534476 100644 --- a/src/content/docs/workflow-automation/workflow-automation-apis/definition-schema.mdx +++ b/src/content/docs/workflow-automation/workflow-automation-apis/definition-schema.mdx @@ -2,7 +2,7 @@ title: Workflow definition schema tags: - workflow automation - - workflow schems + - workflow schemas - workflow automation API metaDescription: "Workflow definitions are written in YAML. Keys use a camelCase naming convention." freshnessValidatedDate: never @@ -109,19 +109,19 @@ Workflow definitions are written in YAML. Keys use a `camelCase` naming conventi - **Type**: Map of values (includes [expressions]()) - **Description**: - The inputs to pass to the action function. The specific inputs accepted are defined by each action. - - Inputs can use expressions. See the [Expressions Strings]() section for details. + - Inputs can use expressions. See the [Expression Strings]() section for details. No sensitive data (no API keys or secrets, no PII, PHI or any personally identifiable data) should be passed-in as arguments. - **`steps[*].inputs.selectors`** (Optional) - - **Type**: list of map in the form of `name` with `expression`. + - **Type**: list of maps in the form of `name` with `expression`. - **Description**: - - The `selectors` input allows to redefine the output to only return the specified elements. - - Expression can be used. See the [Expressions Strings]() section for details. + - The `selectors` input allows you to redefine the output to only return the specified elements. + - Expressions can be used. See the [Expression Strings]() section for details. - **Example** - - In the given example we are getting the `pageUrl` and `statusDescription` as response of http.get action. + - In the given example we are getting the `pageUrl` and `statusDescription` as the response from the http.get action. ```yaml name: status @@ -196,9 +196,9 @@ For more details see below: - `element` and `index` are automatically assigned as part of the loop. - - `Index` is a zero-based. + - `Index` is zero-based. - The `element` can be a complex type if you have a collection of complex elements. - - All loop variables and outputs from steps within the loop have loop-level scope. These variables are cleared after exiting the loop and accessing them outside of the loop will result in null value. Loop can access variables that are outside of the loop if it’s previously defined. + - All loop variables and outputs from steps within the loop have loop-level scope. These variables are cleared after exiting the loop and accessing them outside of the loop will result in a null value. A loop can access variables that are outside of the loop if they are previously defined. **Simple for loop on integers** @@ -341,7 +341,7 @@ For more details see below: - name: loopStep type: loop for: - in: "${{ [range(1; 5)] }}"" + in: "${{ [range(1; 5)] }}" steps: - name: step1 type: action @@ -382,7 +382,7 @@ For more details see below: ### wait - A step that causes the workflow run to wait a certain number of seconds before continuing. It can also listen for one or more signals. If no signal is received during the wait, it will proceed as normal. The signals are defined in a list. Each signal must have a corresponding next step defined. The first signal to be received is the one that will be processed. The value received for the signal will be stored in the step output for the wait step and can be used for logic our processing in later steps. + A step that causes the workflow run to wait a certain number of seconds before continuing. It can also listen for one or more signals. If no signal is received during the wait, it will proceed as normal. The signals are defined in a list. Each signal must have a corresponding next step defined. The first signal to be received is the one that will be processed. The value received for the signal will be stored in the step output for the wait step and can be used for logic or processing in later steps. - Example: @@ -436,7 +436,7 @@ Several properties accept string values with embedded expressions that are evalu jq provides the ability to access and operate on values in many ways. For example, the length of a workflow input string could be achieved with the following: `${{ .workflowInputs.myString | length }}` -To build and [test JQ](https://play.jqlang.org/) expression this tool can be used. +To validate and test your JQ expressions, use the [JQ Playground](https://play.jqlang.org/). ### Expression properties @@ -500,12 +500,12 @@ For the following examples, assume myArray has a value of [1, 2, 3].
-### Expression-Safe Pattern [#expression-safe-pattern] +### Expression-safe pattern [#expression-safe-pattern] Properties that can be used in expressions must conform to the following regex: `^[A-Za-z_][A-Za-z0-9_]*$` -### Secret References +### Secret references Secret values can be used in actions via reference strings that specify the name of a secret to look up in the Secrets Service. To reference a secret in a workflow definition, use the syntax: - `${{ :secrets: }}` for a secret not in a `namespace` @@ -513,7 +513,7 @@ Secret values can be used in actions via reference strings that specify the name An expression string can contain a mix of secret references and JQ expressions and/or multiple secret references. -Examples: +### Examples: ```yaml steps: @@ -525,8 +525,6 @@ Examples: Authorization: Bearer ${{ :secrets: }} ``` -## Examples - - Hello World ```yaml