Replace Elasticsearch Fargate with AWS OpenSearch #8
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
| 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" |