Skip to content

test

test #8

## Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
## SPDX-License-Identifier: Apache-2.0
# This is a reusable workflow for running the Java Enablement Canary test for Application Signals on Lambda.
# It is meant to be called from another workflow.
# Read more about reusable workflows: https://docs.github.com/en/actions/using-workflows/reusing-workflows#overview
name: Java Lambda Default Use Case
on:
workflow_call:
inputs:
aws-region:
required: true
type: string
caller-workflow-name:
required: true
type: string
outputs:
job-started:
value: ${{ jobs.java-lambda-default.outputs.job-started }}
validation-result:
value: ${{ jobs.java-lambda-default.outputs.validation-result }}
push:
branches:
- lambda-layer/v2-test
permissions:
id-token: write
contents: read
env:
E2E_TEST_AWS_REGION: us-east-1
CALLER_WORKFLOW_NAME: ${{ inputs.caller-workflow-name }}
E2E_TEST_ACCOUNT_ID: ${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ACCOUNT_ID }}
E2E_TEST_ROLE_NAME: ${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ROLE_NAME }}
METRIC_NAMESPACE: ApplicationSignals
LOG_GROUP_NAME: /aws/application-signals/data
SAMPLE_APP_ZIP: s3://aws-appsignals-sample-app-prod-us-east-1/java-lambda-function.zip
TEST_RESOURCES_FOLDER: ${GITHUB_WORKSPACE}
STAGING_S3_BUCKET: ${{ secrets.STAGING_BUCKET_NAME }}
IS_CANARY: false
jobs:
java-lambda-default:
runs-on: ubuntu-latest
timeout-minutes: 30
outputs:
job-started: ${{ steps.job-started.outputs.job-started }}
validation-result: ${{ steps.validation-result.outputs.validation-result }}
steps:
- name: Check if the job started
id: job-started
run: echo "job-started=true" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
with:
repository: 'aws-observability/aws-application-signals-test-framework'
ref: ${{ env.CALLER_WORKFLOW_NAME == 'main-build' && 'main' || github.ref }}
fetch-depth: 0
# We initialize Gradlew Daemon early on during the workflow because sometimes initialization
# fails due to transient issues. If it fails here, then we will try again later before the validators
- name: Initiate Gradlew Daemon
id: initiate-gradlew
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: 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: us-east-1
- name: Retrieve account
uses: aws-actions/aws-secretsmanager-get-secrets@v1
with:
secret-ids:
ACCOUNT_ID, region-account/${{ env.E2E_TEST_AWS_REGION }}
- name: Configure AWS Credentials
if: ${{ github.event.repository.name == 'aws-application-signals-test-framework' }}
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.E2E_TEST_ROLE_NAME }}
aws-region: ${{ env.E2E_TEST_AWS_REGION }}
- name: Set Lambda Layer artifact directory path
run: echo ARTIFACTS_DIR="${{ github.workspace }}/lambda_artifacts" >> $GITHUB_ENV
- name: Download Lambda Layer artifact for E2E Test
if: ${{ env.CALLER_WORKFLOW_NAME != 'appsignals-java-e2e-lambda-canary-test' }}
run: |
aws s3 cp s3://lambdav2-test1/aws-opentelemetry-java-layer.zip ${{ env.ARTIFACTS_DIR }}/layer.zip
- name: Download the lambda function artifact for E2E test
run: aws s3 cp ${{ env.SAMPLE_APP_ZIP }} ${{ env.ARTIFACTS_DIR }}/java-function.zip
- name: Set Canary Environment Variable
if: ${{ env.CALLER_WORKFLOW_NAME == 'appsignals-java-e2e-lambda-canary-test' }}
run: |
echo IS_CANARY=true >> $GITHUB_ENV
- 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'
sleep_time: 60
- name: Initiate Terraform
uses: ./.github/workflows/actions/execute_and_retry
with:
command: "cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && terraform init && terraform validate"
cleanup: "rm -rf .terraform && rm -rf .terraform.lock.hcl"
max_retry: 6
sleep_time: 60
- name: Get terraform Lambda function name
shell: bash
run: |
echo TERRAFORM_LAMBDA_FUNCTION_NAME="AdotLambdaJavaSampleApp-${{ github.run_id }}"|
tee --append $GITHUB_ENV
- name: Apply terraform
uses: ./.github/workflows/actions/execute_and_retry
with:
command: 'cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && terraform apply -auto-approve
-var="sdk_layer_name=AWSOpenTelemetryDistroJava-${{ github.run_id }}"
-var="function_name=${{env.TERRAFORM_LAMBDA_FUNCTION_NAME}}"
-var="layer_artifacts_directory=${{ env.ARTIFACTS_DIR }}"
-var="region=${{ env.E2E_TEST_AWS_REGION }}\"
-var="is_canary=${{ env.IS_CANARY }}"'
max_retry: 6
sleep_time: 60
- name: Extract endpoint
id: extract-endpoint
shell: bash
run: cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && echo API_GATEWAY_URL=$(terraform output -raw api-gateway-url) >> $GITHUB_ENV
- name: Send request to endpoint
shell: bash
run: sleep 30s; curl -sS ${{ env.API_GATEWAY_URL }}
- name: Initiate Gradlew Daemon
if: steps.initiate-gradlew == 'failure'
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: Validate generated traces
id: trace-validation
# will be removed after data quality bug fixed
continue-on-error: true
run: ./gradlew validator:run --args='-c java/lambda/trace-validation.yml
--testing-id ${{ env.TESTING_ID }}
--endpoint http://${{ env.API_GATEWAY_URL }}
--region ${{ env.E2E_TEST_AWS_REGION }}
--account-id ${{ env.ACCOUNT_ID }}
--metric-namespace ${{ env.METRIC_NAMESPACE }}
--log-group ${{ env.LOG_GROUP_NAME }}
--service-name ${{ env.TERRAFORM_LAMBDA_FUNCTION_NAME }}
--rollup'
# Validation for pulse telemetry data
- name: Validate generated EMF logs
id: log-validation
if: (success() || steps.trace-validation.outcome == 'failure') && !cancelled()
# will be removed after data quality bug fixed
continue-on-error: true
run: ./gradlew validator:run --args='-c java/lambda/log-validation.yml
--testing-id ${{ env.TESTING_ID }}
--endpoint http://${{ env.API_GATEWAY_URL }}
--region ${{ env.E2E_TEST_AWS_REGION }}
--account-id ${{ env.ACCOUNT_ID }}
--metric-namespace ${{ env.METRIC_NAMESPACE }}
--log-group ${{ env.LOG_GROUP_NAME }}
--service-name ${{ env.TERRAFORM_LAMBDA_FUNCTION_NAME }}
--rollup'
- name: Validate generated metrics
id: metric-validation
# will be removed after data quality bug fixed
continue-on-error: true
if: (success() || steps.trace-validation.outcome == 'failure' || steps.log-validation.outcome == 'failure') && !cancelled()
run: ./gradlew validator:run --args='-c java/lambda/metric-validation.yml
--testing-id ${{ env.TESTING_ID }}
--endpoint http://${{ env.API_GATEWAY_URL }}
--region ${{ env.E2E_TEST_AWS_REGION }}
--account-id ${{ env.ACCOUNT_ID }}
--metric-namespace ${{ env.METRIC_NAMESPACE }}
--log-group ${{ env.LOG_GROUP_NAME }}
--service-name ${{ env.TERRAFORM_LAMBDA_FUNCTION_NAME }}
--rollup'
- name: Refresh AWS Credentials
if: ${{ github.event.repository.name == 'aws-application-signals-test-framework' }}
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.E2E_TEST_ROLE_NAME }}
aws-region: ${{ env.E2E_TEST_AWS_REGION }}
- name: Save test results
if: always()
id: validation-result
run: |
if [ "${{ steps.log-validation.outcome }}" = "success" ] && [ "${{ steps.metric-validation.outcome }}" = "success" ] && [ "${{ steps.trace-validation.outcome }}" = "success" ]; then
echo "validation-result=success" >> $GITHUB_OUTPUT
else
echo "validation-result=failure" >> $GITHUB_OUTPUT
fi
# Clean up Procedures
- name: Terraform destroy
if: always()
continue-on-error: true
run: |
cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && terraform destroy -auto-approve \
-var="sdk_layer_name=AWSOpenTelemetryDistroJava-${{ github.run_id }}" \
-var="function_name=${{env.TERRAFORM_LAMBDA_FUNCTION_NAME}}" \
-var="layer_artifacts_directory=${{ env.ARTIFACTS_DIR }}" \
-var="region=${{ env.E2E_TEST_AWS_REGION }}" \
-var="is_canary=${{ env.IS_CANARY }}"