# Configure S3-compatible access for Quarkus

## Summary
Object storage client for a Quarkus app on Ample. Verified on Quarkus: bucket credentials delivered as encrypted S3_* environment variables and a validated PutObject/GetObject round-trip linked to a database row (upload=ok linked=ok). Build and start:

```bash
./mvnw -q -DskipTests package producing one uber-jar (quarkus.package.jar.type=uber-jar), then java -jar on the jvm-21 template (Temurin JDK 21) with quarkus.http.port read from PORT.
```

## Resource Requirements
- **Primitive Compute**
- **Primitive S3-compatible Object Storage**

## Workflow Steps
1. **Build and start**  
   - `./mvnw -q -DskipTests package producing one uber-jar (quarkus.package.jar.type=uber-jar), then java -jar on the jvm-21 template (Temurin JDK 21) with quarkus.http.port read from PORT; the server must bind 0.0.0.0 on PORT.`

2. **Create the bucket and pass its credentials**  
   - Create it once with `ample bucket create`, then pass endpoint, region, bucket and keys with --env; use path-style addressing.
   - Command:  
     ```bash
     ample deploy . --name  --public --env S3_ENDPOINT=... --env S3_REGION=... --env S3_BUCKET=... --env S3_ACCESS_KEY_ID=... --env S3_SECRET_ACCESS_KEY=...
     ```

3. **Verify**  
   - Fetch the live URL and /p/browser-file-uploads on the example; on failure read the build and runtime logs.
   - Command:  
     ```bash
     ample logs  --kind build
     ```

## Examples
- **Quarkus pattern fixture**: Verified object storage client on Quarkus.  
  Source Ref: `tests/deploy-canaries/quarkus-patterns`

## Success Checks
- **App responds on its public URL**  
  Path: `/`  
  Expect: `ample canary quarkus patterns`  
- **Browser-file-uploads check from the example**  
  Path: `/p/browser-file-uploads`  
  Expect: `see the pattern fixture checks`

## Limitations
- Verified on the jvm-21 template at s-1vcpu-2gb; other sizes and Quarkus major versions are not verified.
- Region, compliance attestations and request-duration limits are unknown and not claimed.
- PutObject and GetObject with path-style addressing are verified; other S3 operations are not.

## Cost Estimate
- **Currency**: USD  
- **Monthly Amount**: 5.0  
- **Basis**: Size prices from pricing.toml (loaded by the API) at build revision 1ac5595375130d45290090e82ed0f554ccd45405-dirty.
  
### Components
- **App Server**:  
  - Size: s-1vcpu-1gb  
  - Quantity: 1.0  
  - Monthly Amount: 5.0

### Note
Always-on monthly price of the tested sizes; apps auto-pause when idle. Buckets are allocation-priced per quota and not included.
