144 lines
3.5 KiB
Markdown
144 lines
3.5 KiB
Markdown
# AWS CLI & SDK Setup
|
|
|
|
Floci accepts any non-empty credentials — no real AWS account is needed.
|
|
|
|
## Environment Variables
|
|
|
|
The simplest approach for local development:
|
|
|
|
```bash
|
|
export AWS_ENDPOINT_URL=http://localhost:4566
|
|
export AWS_DEFAULT_REGION=us-east-1
|
|
export AWS_ACCESS_KEY_ID=test
|
|
export AWS_SECRET_ACCESS_KEY=test
|
|
```
|
|
|
|
## AWS CLI Profile
|
|
|
|
Add a dedicated profile to `~/.aws/config` and `~/.aws/credentials`:
|
|
|
|
```ini title="~/.aws/config"
|
|
[profile floci]
|
|
region = us-east-1
|
|
output = json
|
|
```
|
|
|
|
```ini title="~/.aws/credentials"
|
|
[floci]
|
|
aws_access_key_id = test
|
|
aws_secret_access_key = test
|
|
```
|
|
|
|
Then use it with every command:
|
|
|
|
```bash
|
|
aws s3 ls --profile floci --endpoint-url http://localhost:4566
|
|
```
|
|
|
|
Or set it as the default for your shell session:
|
|
|
|
```bash
|
|
export AWS_PROFILE=floci
|
|
export AWS_ENDPOINT_URL=http://localhost:4566
|
|
```
|
|
|
|
## SDK Configuration
|
|
|
|
### Java (AWS SDK v2)
|
|
|
|
```java
|
|
// Reusable endpoint override
|
|
URI endpoint = URI.create("http://localhost:4566");
|
|
AwsCredentialsProvider creds = StaticCredentialsProvider.create(
|
|
AwsBasicCredentials.create("test", "test"));
|
|
Region region = Region.US_EAST_1;
|
|
|
|
// Build any client the same way
|
|
DynamoDbClient dynamo = DynamoDbClient.builder()
|
|
.endpointOverride(endpoint)
|
|
.region(region)
|
|
.credentialsProvider(creds)
|
|
.build();
|
|
|
|
SqsClient sqs = SqsClient.builder()
|
|
.endpointOverride(endpoint)
|
|
.region(region)
|
|
.credentialsProvider(creds)
|
|
.build();
|
|
```
|
|
|
|
### Python (boto3)
|
|
|
|
```python
|
|
import boto3
|
|
|
|
def floci_client(service):
|
|
return boto3.client(
|
|
service,
|
|
endpoint_url="http://localhost:4566",
|
|
region_name="us-east-1",
|
|
aws_access_key_id="test",
|
|
aws_secret_access_key="test",
|
|
)
|
|
|
|
s3 = floci_client("s3")
|
|
sqs = floci_client("sqs")
|
|
dynamo = floci_client("dynamodb")
|
|
```
|
|
|
|
### Node.js / TypeScript
|
|
|
|
```typescript
|
|
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
|
|
import { SQSClient } from "@aws-sdk/client-sqs";
|
|
|
|
const config = {
|
|
endpoint: "http://localhost:4566",
|
|
region: "us-east-1",
|
|
credentials: { accessKeyId: "test", secretAccessKey: "test" },
|
|
};
|
|
|
|
const dynamo = new DynamoDBClient(config);
|
|
const sqs = new SQSClient(config);
|
|
```
|
|
|
|
!!! tip "S3 path-style URLs"
|
|
When using S3 with the AWS SDK v3 (Node.js), add `forcePathStyle: true` to the config object. Floci serves S3 in path-style mode (`http://localhost:4566/bucket-name`).
|
|
|
|
### Go
|
|
|
|
```go
|
|
import (
|
|
"github.com/aws/aws-sdk-go-v2/config"
|
|
"github.com/aws/aws-sdk-go-v2/credentials"
|
|
)
|
|
|
|
cfg, err := config.LoadDefaultConfig(context.TODO(),
|
|
config.WithRegion("us-east-1"),
|
|
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("test", "test", "")),
|
|
config.WithEndpointResolverWithOptions(
|
|
aws.EndpointResolverWithOptionsFunc(
|
|
func(service, region string, opts ...interface{}) (aws.Endpoint, error) {
|
|
return aws.Endpoint{URL: "http://localhost:4566"}, nil
|
|
},
|
|
),
|
|
),
|
|
)
|
|
```
|
|
|
|
## Account ID
|
|
|
|
Floci uses account ID `000000000000` in all ARNs and queue URLs by default:
|
|
|
|
```
|
|
arn:aws:sqs:us-east-1:000000000000:my-queue
|
|
http://localhost:4566/000000000000/my-queue
|
|
```
|
|
|
|
Change the default with `FLOCI_DEFAULT_ACCOUNT_ID`:
|
|
|
|
```bash
|
|
FLOCI_DEFAULT_ACCOUNT_ID=123456789012
|
|
```
|
|
|
|
**Multi-account isolation** is also supported: if your access key ID is exactly 12 digits, Floci uses it directly as the account ID and fully isolates that account's resources from all others. See [Multi-Account Isolation](../configuration/multi-account.md) for details. |