Skip to content

Replace Elasticsearch Fargate with AWS OpenSearch #8

Replace Elasticsearch Fargate with AWS OpenSearch

Replace Elasticsearch Fargate with AWS OpenSearch #8

Workflow file for this run

name: Deploy Complete Elasticsearch Infrastructure
on:
push:
branches:
- main
workflow_dispatch:
permissions:
id-token: write
contents: read
env:
AWS_REGION: eu-central-1
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
cache: 'maven'
- name: Build webhook-receiver Lambda
working-directory: lambda/webhook-receiver
run: mvn clean package -DskipTests
- name: Build es-indexer-worker Lambda
working-directory: lambda/es-indexer-worker
run: mvn clean package -DskipTests
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ env.AWS_REGION }}
role-to-assume: ${{ secrets.AWS_OIDC }}
- name: Assume CDK Deploy Role
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ env.AWS_REGION }}
role-to-assume: arn:aws:iam::553637109631:role/cdk-hnb659fds-deploy-role-553637109631-eu-central-1
role-chaining: true
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.6.0
terraform_wrapper: false
- name: Terraform Init
working-directory: terraform
run: terraform init -reconfigure
- name: Terraform Plan
working-directory: terraform
run: terraform plan -input=false
env:
TF_VAR_vpc_id: ${{ secrets.VPC_ID }}
TF_VAR_es_subnet_ids: ${{ secrets.ES_SUBNET_IDS }}
TF_VAR_assign_public_ip: false
TF_VAR_allowed_cidr_blocks: ${{ secrets.VPC_CIDR_BLOCKS }}
TF_VAR_elasticsearch_password: ${{ secrets.ELASTICSEARCH_PASSWORD }}
TF_VAR_webhook_secret: ${{ secrets.WEBHOOK_SECRET }}
TF_VAR_moresleep_url: ${{ secrets.MORESLEEP_URL }}
TF_VAR_moresleep_username: ${{ secrets.MORESLEEP_USERNAME }}
TF_VAR_moresleep_password: ${{ secrets.MORESLEEP_PASSWORD }}
- name: Terraform Apply
working-directory: terraform
run: terraform apply -auto-approve -input=false
env:
TF_VAR_vpc_id: ${{ secrets.VPC_ID }}
TF_VAR_es_subnet_ids: ${{ secrets.ES_SUBNET_IDS }}
TF_VAR_assign_public_ip: false
TF_VAR_allowed_cidr_blocks: ${{ secrets.VPC_CIDR_BLOCKS }}
TF_VAR_elasticsearch_password: ${{ secrets.ELASTICSEARCH_PASSWORD }}
TF_VAR_elasticsearch_url: http://elasticsearch.javazone.internal:9200
TF_VAR_task_cpu: 1024
TF_VAR_task_memory: 2048
TF_VAR_heap_size: 1024
TF_VAR_webhook_secret: ${{ secrets.WEBHOOK_SECRET }}
TF_VAR_moresleep_url: ${{ secrets.MORESLEEP_URL }}
TF_VAR_moresleep_username: ${{ secrets.MORESLEEP_USERNAME }}
TF_VAR_moresleep_password: ${{ secrets.MORESLEEP_PASSWORD }}
- name: Show Outputs
working-directory: terraform
run: |
echo "================================================"
echo "✅ Deployment Complete!"
echo "================================================"
echo ""
echo "🔗 Webhook URL for moresleep:"
terraform output -raw webhook_url
echo ""
echo ""
echo "📊 OpenSearch:"
terraform output -raw opensearch_endpoint
echo ""
echo ""
echo "📦 SQS Queue:"
terraform output -raw sqs_queue_url
echo ""
echo "================================================"
- name: Wait for OpenSearch to be ready
run: |
echo "Waiting 5 minutes for OpenSearch domain to be active..."
sleep 300
- name: Create OpenSearch Index
working-directory: terraform
run: |
OS_URL=$(terraform output -raw opensearch_endpoint)
curl -X PUT "$OS_URL/javazone_talks" \
-u elastic:${{ secrets.ELASTICSEARCH_PASSWORD }} \
-H "Content-Type: application/json" \
-d @../config/index-mapping.json || echo "Index may already exist"