I've been stuck for hours trying to resolve this 'Invalid endpoint: https://s3..amazonaws.com' error while deploying my application. My workflow YAML file looks like this:
```yaml
name: deploy-container
on:
push:
branches:
- main
paths:
- "packages/container/**"
defaults:
run:
working-directory: packages/container
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: npm run build
- uses: shinyinc/[email protected]
- run: aws s3 sync dist s3://${{ secrets.AWS_S3_BUCKET_NAME }}/container/latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: eu-north-1
```
I've set up my environment variables properly under the 'Secrets and variables' section, but the error still occurs, specifically at 'Run aws s3 sync dist s3://container/latest'. This suggests my AWS_S3_BUCKET_NAME is not being recognized, resulting in the double dots in the endpoint. I've tried multiple solutions from Reddit and Stack Overflow without success. Here's my GitHub repository link for reference: [GitHub Repository](https://github.com/shakuisitive/react-microfrontend-for-marketing-company-with-auth-and-dashboard). I believe all my environment variables are correct, so I'm at a loss for what to do next.
4 Answers
The command line you're running is effectively saying 'sync to an empty endpoint' — 's3:///' with nothing for the bucket name. Make sure you double-check that your variable is indeed filled in before running the command.
You might also be missing the correct environment configuration in your workflow. Be sure to reference the deployment environment properly according to GitHub's documentation. This can sometimes lead to issues if not set up correctly!
It looks like you've got a variable substitution problem. The error ‘s3..amazonaws.com’ indicates that your AWS_S3_BUCKET_NAME isn't being substituted correctly, which leads to the endpoint being malformed. This usually happens when the variable is empty. To debug this, try logging the value of AWS_S3_BUCKET_NAME before you run the sync command. If it's empty or not set correctly, that's where your issue lies!
Aside from the substitution issue, you should think about your security practices. Using long-lived IAM credentials in GitHub secrets isn’t ideal. It's better to utilize OpenID Connect (OIDC) for temporary AWS credentials. Check out the aws-actions configuration for setting this up properly!
Absolutely, using OIDC is a much safer approach. It helps you avoid the risks associated with storing long-lived credentials.

Good point! Logging before the sync command should help identify if the variable is empty. Just use an 'echo' like: `echo ${{ secrets.AWS_S3_BUCKET_NAME }}` to see what's being passed.