This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ## Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | |
| ## SPDX-License-Identifier: Apache-2.0 | |
| name: Node EC2 Genesis Use Case | |
| on: | |
| workflow_dispatch: # be able to run the workflow on demand | |
| push: | |
| branches: | |
| - genesis-js-release-test | |
| workflow_call: | |
| inputs: | |
| caller-workflow-name: | |
| required: true | |
| type: string | |
| staging-wheel-name: | |
| required: false | |
| default: '@aws/aws-distro-opentelemetry-node-autoinstrumentation' | |
| type: string | |
| permissions: | |
| id-token: write | |
| contents: read | |
| env: | |
| E2E_TEST_AWS_REGION: 'us-west-2' | |
| E2E_TEST_ACCOUNT_ID: ${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ACCOUNT_ID }} | |
| E2E_TEST_ROLE_NAME: ${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ROLE_NAME }} | |
| ADOT_WHEEL_NAME: ${{ inputs.staging-wheel-name }} | |
| METRIC_NAMESPACE: genesis | |
| LOG_GROUP_NAME: test/genesis | |
| TEST_RESOURCES_FOLDER: ${GITHUB_WORKSPACE} | |
| SAMPLE_APP_ZIP: s3://aws-appsignals-sample-app-prod-us-east-1/node-sample-app.zip | |
| jobs: | |
| node-ec2-adot-genesis: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: 'aws-observability/aws-application-signals-test-framework' | |
| ref: ${{ inputs.caller-workflow-name == 'main-build' && 'main' || github.ref }} | |
| fetch-depth: 0 | |
| - name: Set Get ADOT Instrumentation command environment variable | |
| run: echo GET_ADOT_INSTRUMENTATION_COMMAND="aws s3 cp s3://adot-genai-js-test/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.6.0-dev0.tar ./adot-instrumentation.tar --region us-east-1 && npm install ./adot-instrumentation.tar" >> $GITHUB_ENV | |
| # if [ "${{ github.event.repository.name }}" = "aws-otel-js-instrumentation" ]; then | |
| # echo GET_ADOT_INSTRUMENTATION_COMMAND="aws s3 cp s3://adot-autoinstrumentation-node-staging/${{ env.ADOT_INSTRUMENTATION_NAME }} ./${{ env.ADOT_INSTRUMENTATION_NAME }} --region us-east-1 && npm install ${{ env.ADOT_INSTRUMENTATION_NAME }}" >> $GITHUB_ENV | |
| # else | |
| # echo GET_ADOT_INSTRUMENTATION_COMMAND="npm install ${{ env.ADOT_INSTRUMENTATION_NAME }}" >> $GITHUB_ENV | |
| # fi | |
| - name: Initiate Gradlew Daemon | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| continue-on-error: true | |
| with: | |
| command: "./gradlew :validator:build" | |
| cleanup: "./gradlew clean" | |
| max_retry: 3 | |
| sleep_time: 60 | |
| - name: Generate testing id | |
| run: echo TESTING_ID="${{ github.run_id }}-${{ github.run_number }}-${RANDOM}" >> $GITHUB_ENV | |
| - name: Generate XRay and W3C trace ID | |
| run: | | |
| ID_1="$(printf '%08x' $(date +%s))" | |
| ID_2="$(openssl rand -hex 12)" | |
| W3C_TRACE_ID="${ID_1}${ID_2}" | |
| XRAY_TRACE_ID="1-${ID_1}-${ID_2}" | |
| PARENT_ID="$(openssl rand -hex 8)" | |
| TRACE_ID_HEADER="Root=${XRAY_TRACE_ID};Parent=${PARENT_ID};Sampled=1" | |
| echo "XRAY_TRACE_ID=${XRAY_TRACE_ID}" >> $GITHUB_ENV | |
| echo "W3C_TRACE_ID=${W3C_TRACE_ID}" >> $GITHUB_ENV | |
| echo "TRACE_ID_HEADER=${TRACE_ID_HEADER}" >> $GITHUB_ENV | |
| echo "Generated XRay Trace ID: ${XRAY_TRACE_ID}" | |
| echo "Generated W3C Trace ID: ${W3C_TRACE_ID}" | |
| echo "Generated Trace ID Header: ${TRACE_ID_HEADER}" | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: arn:aws:iam::${{ env.E2E_TEST_ACCOUNT_ID }}:role/${{ env.E2E_TEST_ROLE_NAME }} | |
| aws-region: ${{ env.E2E_TEST_AWS_REGION }} | |
| - name: Set up terraform | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| with: | |
| command: "wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg" | |
| post-command: 'echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list | |
| && sudo apt update && sudo apt install terraform' | |
| - name: Initiate Terraform | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| with: | |
| command: "cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/node/ec2/adot-genai && terraform init && terraform validate" | |
| cleanup: "rm -rf .terraform && rm -rf .terraform.lock.hcl" | |
| max_retry: 6 | |
| - name: Deploy service via terraform | |
| working-directory: terraform/node/ec2/adot-genai | |
| run: | | |
| terraform apply -auto-approve \ | |
| -var="aws_region=${{ env.E2E_TEST_AWS_REGION }}" \ | |
| -var="test_id=${{ env.TESTING_ID }}" \ | |
| -var="service_zip_url=${{ env.SAMPLE_APP_ZIP }}" \ | |
| -var="trace_id=${{ env.TRACE_ID_HEADER }}" \ | |
| -var="get_adot_wheel_command=${{ env.GET_ADOT_INSTRUMENTATION_COMMAND }}" \ | |
| - name: Get deployment info | |
| working-directory: terraform/node/ec2/adot-genai | |
| run: | | |
| echo "INSTANCE_IP=$(terraform output langchain_service_public_ip)" >> $GITHUB_ENV | |
| echo "INSTANCE_ID=$(terraform output langchain_service_instance_id)" >> $GITHUB_ENV | |
| - name: Waiting 5 Minutes for Gen AI service to be ready and emit logs, traces, and metrics | |
| run: sleep 300 | |
| - name: Validate generated logs | |
| run: ./gradlew validator:run --args='-c node/ec2/adot-genai/log-validation.yml | |
| --testing-id ${{ env.TESTING_ID }} | |
| --endpoint http://${{ env.INSTANCE_IP }}:8000 | |
| --region ${{ env.E2E_TEST_AWS_REGION }} | |
| --metric-namespace ${{ env.METRIC_NAMESPACE }} | |
| --log-group ${{ env.LOG_GROUP_NAME }} | |
| --service-name langchain-traceloop-app | |
| --instance-id ${{ env.INSTANCE_ID }} | |
| --trace-id ${{ env.W3C_TRACE_ID }}' | |
| - name: Validate generated traces | |
| if: (success() || failure()) && !cancelled() | |
| run: ./gradlew validator:run --args='-c node/ec2/adot-genai/trace-validation.yml | |
| --testing-id ${{ env.TESTING_ID }} | |
| --endpoint http://${{ env.INSTANCE_IP }}:8000 | |
| --region ${{ env.E2E_TEST_AWS_REGION }} | |
| --metric-namespace ${{ env.METRIC_NAMESPACE }} | |
| --service-name langchain-traceloop-app | |
| --instance-id ${{ env.INSTANCE_ID }} | |
| --trace-id ${{ env.XRAY_TRACE_ID }}' | |
| - name: Validate generated metrics | |
| if: (success() || failure()) && !cancelled() | |
| run: ./gradlew validator:run --args='-c node/ec2/adot-genai/metric-validation.yml | |
| --testing-id ${{ env.TESTING_ID }} | |
| --endpoint http://${{ env.INSTANCE_IP }}:8000 | |
| --region ${{ env.E2E_TEST_AWS_REGION }} | |
| --metric-namespace ${{ env.METRIC_NAMESPACE }} | |
| --log-group ${{ env.LOG_GROUP_NAME }} | |
| --service-name langchain-traceloop-app | |
| --instance-id ${{ env.INSTANCE_ID }}' | |
| - name: Cleanup | |
| if: always() | |
| continue-on-error: true | |
| working-directory: terraform/node/ec2/adot-genai | |
| run: | | |
| terraform destroy -auto-approve \ | |
| -var="aws_region=${{ env.E2E_TEST_AWS_REGION }}" \ | |
| -var="test_id=${{ env.TESTING_ID }}" \ | |
| -var="service_zip_url=${{ env.SAMPLE_APP_ZIP }}" \ | |
| -var="trace_id=${{ env.TRACE_ID_HEADER }}" \ | |
| -var="get_adot_wheel_command=${{ env.GET_ADOT_WHEEL_COMMAND }}" |