awslib

package module
v0.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 12, 2026 License: AGPL-3.0 Imports: 27 Imported by: 0

README

AWS Library

This library provides a set of tools to interact with AWS services. The library also integrates with Prometheus for monitoring AWS API requests and errors.

Installation

To install the library, use the following command:

go get github.com/imunhatep/awslib

AWS Service list

List of AWS Services that have normalized interface EntityInterface{}

  • athena
  • autoscaling
  • batch
  • cloudcontrol
  • cloudtrail
  • cloudwatchlogs
  • dynamodb
  • ec2
  • ecs
  • efs
  • eks
  • elb
  • emr
  • emrserverless
  • health
  • lambda
  • pricing
  • rds
  • s3
  • secretmanager
  • sns
  • sqs

Code Generation

The library provides code generation tools to bootstrap AWS service clients and repositories:

# Generate cached repositories for all services
go run cmd/generate-cached/main.go

# Generate service options and configurations
go run cmd/generate-options/main.go

Usage

There are 2 distinct approaches provided by this library:

  1. AWS Provider v3: Direct access to AWS services, allowing connection to multiple regions and accounts simultaneously.
  2. Service Repositories: High-level abstraction for fetching AWS resources with built-in caching.
Approach 1: AWS Provider v3

The v3 provider focuses on managing clients across multiple accounts and regions efficiently.

Basic Usage (Single Region/Account)
package main

import (
    "context"
    "fmt"
    "log"

    "github.com/imunhatep/awslib/provider/v3"
    "github.com/imunhatep/awslib/provider/v3/clients/ec2"
)

func main() {
    ctx := context.Background()

    // Create a basic v3 client
    client, err := v3.NewClient(ctx)
    if err != nil {
        log.Fatal(err)
    }

    // Use EC2 service
    ec2Client := ec2.GetClient(client)
    instances, err := ec2Client.DescribeInstances(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("EC2 instances found: %d\n", len(instances.Reservations))
}
Multiple Regions and Accounts

To work with multiple accounts, you typically assume roles. The ClientPool manages these clients for you.

package main

import (
    "context"
    "fmt"

    ptypes "github.com/imunhatep/awslib/provider/types"
    v3 "github.com/imunhatep/awslib/provider/v3"
    "github.com/imunhatep/awslib/provider/v3/clients/ec2"
)

func ExampleMultiRegionAccount() error {
    ctx := context.Background()

    // 1. Create client builder
    clientBuilder := v3.NewClientBuilder(ctx)

    // 2. Define assumable roles for cross-account access
    assumableRoles := map[ptypes.AwsAccountID]ptypes.RoleArn{
        "123456789012": "arn:aws:iam::123456789012:role/awslib-assumed1",
        "987654321098": "arn:aws:iam::987654321098:role/awslib-assumed2",
    }

    // 3. Create client pool
    clientPool := v3.NewClientPool(ctx, clientBuilder, assumableRoles)

    // 4. Get clients for specific regions
    awsRegions := []ptypes.AwsRegion{"us-east-1", "eu-central-1"}
    clients, err := clientPool.GetClients(awsRegions...)
    if err != nil {
        return err
    }

    // 5. Iterate over clients (each represents a unique account+region combination)
    for _, client := range clients {
        fmt.Printf("Client for account %s in region %s\n",
            client.GetAccountID(), client.GetRegion())

        // Use services with this client
        ec2Client := ec2.GetClient(client)
        instances, err := ec2Client.DescribeInstances(ctx, nil)
        if err != nil {
            return err
        }
        fmt.Printf("Found %d reservations\n", len(instances.Reservations))
    }

    return nil
}
Approach 2: Service Repositories

Service repositories provide a higher-level interface ResourceInterface and EntityInterface to interact with AWS resources, along with caching capabilities.

AWS Resources Interface

The common interface for all resources:

package service

import (
    "github.com/aws/aws-sdk-go-v2/aws/arn"
    cfg "github.com/aws/aws-sdk-go-v2/service/configservice/types"
    ptypes "github.com/imunhatep/awslib/provider/types"
    "time"
)

type ResourceInterface interface {
    GetAccountID() ptypes.AwsAccountID
    GetRegion() ptypes.AwsRegion
    GetCreatedAt() time.Time
    GetArn() string
    GetId() string
    GetIdOrArn() string
    GetType() cfg.ResourceType
    GetTags() map[string]string
}
Fetching Resources with Caching

The repositories support pluggable caching (e.g., in-memory, file-based).

package main

import (
    "context"
    "fmt"
    "time"

    "github.com/allegro/bigcache/v3"
    "github.com/imunhatep/awslib/cache"
    "github.com/imunhatep/awslib/cache/handlers"
    "github.com/imunhatep/awslib/service/ec2"
    v3 "github.com/imunhatep/awslib/provider/v3"
)

func ExampleRepositoryUsage() error {
    ctx := context.Background()

    // Setup caching (optional)
    cacheTtl := 300 * time.Second
    bigCache, _ := bigcache.New(ctx, bigcache.DefaultConfig(cacheTtl))
    inMem := handlers.NewInMemory(bigCache)
    dataCache := cache.NewDataCache().WithHandlers(inMem)

    // Create client
    client, err := v3.NewClient(ctx)
    if err != nil {
        return err
    }

    // Create cached repository
    // This wrapper handles caching logic automatically
    repo := ec2.NewCachedEc2Repository(ctx, client, dataCache)

    // Fetch instances (returns []ec2.Entity)
    // First call hits AWS API, subsequent calls within TTL hit cache
    instances, err := repo.ListInstancesAll()
    if err != nil {
        return err
    }

    for _, instance := range instances {
        fmt.Printf("Instance: %s (ID: %s)\n", instance.GetName(), instance.GetId())
    }

    return nil
}
Using RepoProxy for Cross-Account Fetching

RepoProxy combines ClientPool and Repositories to fetch resources across multiple accounts and regions in waiting structure.

package main

import (
    "context"
    "fmt"
    "time"

    "github.com/aws/aws-sdk-go-v2/service/configservice/types"
    "github.com/imunhatep/awslib/proxy"
    "github.com/imunhatep/awslib/resources"
    // ... imports for v3, cache, etc.
)

func ExampleRepoProxy(ctx context.Context, clients []*v3.Client, dataCache *cache.DataCache) {

  // Create proxy pool
  proxyPool := proxy.NewRepoProxyPool(ctx, clients)
  
  // Attach cache
  proxyPool.WithCache(dataCache)

  // Fetch specific resource type across all configured accounts/regions
  resourceType := types.ResourceTypeInstance
  
  // The Provider runs the fetchers in parallel
  awsProvider := resources.NewProvider(resourceType, proxyPool.List(resourceType)...)
  reader := awsProvider.Run()

  for _, resource := range reader.Read() {
    fmt.Printf("Resource: %s | Account: %s | Region: %s\n", 
        resource.GetId(), resource.GetAccountID(), resource.GetRegion())
  }
}
Logging verbosity

Use this func example to set logging verbosity

package internal

import (
	"github.com/imunhatep/awslib/provider/types"
	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
	"os"
	"time"
)

func setLogLevel(level int) {
	log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.DateTime})

	switch level {
	case 0:
		zerolog.SetGlobalLevel(zerolog.FatalLevel)
	case 1:
		zerolog.SetGlobalLevel(zerolog.ErrorLevel)
	case 2:
		zerolog.SetGlobalLevel(zerolog.WarnLevel)
	case 3:
		zerolog.SetGlobalLevel(zerolog.InfoLevel)
	case 4:
		zerolog.SetGlobalLevel(zerolog.DebugLevel)
	default:
		zerolog.SetGlobalLevel(zerolog.TraceLevel)
	}
}

Monitoring

The library integrates with Prometheus to monitor AWS API requests and errors. Metrics are collected and can be visualized using Prometheus-compatible tools.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GobRegisterAwsServices

func GobRegisterAwsServices()

func GobRegisterAwsServicesAll

func GobRegisterAwsServicesAll()

GobRegisterAwsServicesAll is deprecated and now just an alias for GobRegisterAwsServices. The registration is handled automatically via generated code in gob_register_gen.go.

Types

This section is empty.

Directories

Path Synopsis
v2
v3
v3/clients/accessanalyzer
Package accessanalyzer provides AccessAnalyzer service access for v3 client This file is auto-generated.
Package accessanalyzer provides AccessAnalyzer service access for v3 client This file is auto-generated.
v3/clients/acm
Package acm provides ACM service access for v3 client This file is auto-generated.
Package acm provides ACM service access for v3 client This file is auto-generated.
v3/clients/apigateway
Package apigateway provides APIGateway service access for v3 client This file is auto-generated.
Package apigateway provides APIGateway service access for v3 client This file is auto-generated.
v3/clients/athena
Package athena provides Athena service access for v3 client This file is auto-generated.
Package athena provides Athena service access for v3 client This file is auto-generated.
v3/clients/autoscaling
Package autoscaling provides AutoScaling service access for v3 client This file is auto-generated.
Package autoscaling provides AutoScaling service access for v3 client This file is auto-generated.
v3/clients/batch
Package batch provides Batch service access for v3 client This file is auto-generated.
Package batch provides Batch service access for v3 client This file is auto-generated.
v3/clients/cloudcontrol
Package cloudcontrol provides CloudControl service access for v3 client This file is auto-generated.
Package cloudcontrol provides CloudControl service access for v3 client This file is auto-generated.
v3/clients/cloudformation
Package cloudformation provides CloudFormation service access for v3 client This file is auto-generated.
Package cloudformation provides CloudFormation service access for v3 client This file is auto-generated.
v3/clients/cloudtrail
Package cloudtrail provides CloudTrail service access for v3 client This file is auto-generated.
Package cloudtrail provides CloudTrail service access for v3 client This file is auto-generated.
v3/clients/cloudwatch
Package cloudwatch provides CloudWatch service access for v3 client This file is auto-generated.
Package cloudwatch provides CloudWatch service access for v3 client This file is auto-generated.
v3/clients/cloudwatchlogs
Package cloudwatchlogs provides CloudWatchLogs service access for v3 client This file is auto-generated.
Package cloudwatchlogs provides CloudWatchLogs service access for v3 client This file is auto-generated.
v3/clients/configservice
Package configservice provides ConfigService service access for v3 client This file is auto-generated.
Package configservice provides ConfigService service access for v3 client This file is auto-generated.
v3/clients/costexplorer
Package costexplorer provides CostExplorer service access for v3 client This file is auto-generated.
Package costexplorer provides CostExplorer service access for v3 client This file is auto-generated.
v3/clients/dynamodb
Package dynamodb provides DynamoDB service access for v3 client This file is auto-generated.
Package dynamodb provides DynamoDB service access for v3 client This file is auto-generated.
v3/clients/ec2
Package ec2 provides EC2 service access for v3 client This file is auto-generated.
Package ec2 provides EC2 service access for v3 client This file is auto-generated.
v3/clients/ecs
Package ecs provides ECS service access for v3 client This file is auto-generated.
Package ecs provides ECS service access for v3 client This file is auto-generated.
v3/clients/efs
Package efs provides EFS service access for v3 client This file is auto-generated.
Package efs provides EFS service access for v3 client This file is auto-generated.
v3/clients/eks
Package eks provides EKS service access for v3 client This file is auto-generated.
Package eks provides EKS service access for v3 client This file is auto-generated.
v3/clients/elasticache
Package elasticache provides ElastiCache service access for v3 client This file is auto-generated.
Package elasticache provides ElastiCache service access for v3 client This file is auto-generated.
v3/clients/elasticloadbalancingv2
Package elasticloadbalancingv2 provides ElasticLoadBalancingV2 service access for v3 client This file is auto-generated.
Package elasticloadbalancingv2 provides ElasticLoadBalancingV2 service access for v3 client This file is auto-generated.
v3/clients/emr
Package emr provides EMR service access for v3 client This file is auto-generated.
Package emr provides EMR service access for v3 client This file is auto-generated.
v3/clients/emrserverless
Package emrserverless provides EMRServerless service access for v3 client This file is auto-generated.
Package emrserverless provides EMRServerless service access for v3 client This file is auto-generated.
v3/clients/glue
Package glue provides Glue service access for v3 client This file is auto-generated.
Package glue provides Glue service access for v3 client This file is auto-generated.
v3/clients/health
Package health provides Health service access for v3 client This file is auto-generated.
Package health provides Health service access for v3 client This file is auto-generated.
v3/clients/iam
Package iam provides IAM service access for v3 client This file is auto-generated.
Package iam provides IAM service access for v3 client This file is auto-generated.
v3/clients/lambda
Package lambda provides Lambda service access for v3 client This file is auto-generated.
Package lambda provides Lambda service access for v3 client This file is auto-generated.
v3/clients/pricing
Package pricing provides Pricing service access for v3 client This file is auto-generated.
Package pricing provides Pricing service access for v3 client This file is auto-generated.
v3/clients/rds
Package rds provides RDS service access for v3 client This file is auto-generated.
Package rds provides RDS service access for v3 client This file is auto-generated.
v3/clients/route53
Package route53 provides Route53 service access for v3 client This file is auto-generated.
Package route53 provides Route53 service access for v3 client This file is auto-generated.
v3/clients/route53domains
Package route53domains provides Route53Domains service access for v3 client This file is auto-generated.
Package route53domains provides Route53Domains service access for v3 client This file is auto-generated.
v3/clients/s3
Package s3 provides S3 service access for v3 client This file is auto-generated.
Package s3 provides S3 service access for v3 client This file is auto-generated.
v3/clients/s3control
Package s3control provides S3Control service access for v3 client This file is auto-generated.
Package s3control provides S3Control service access for v3 client This file is auto-generated.
v3/clients/s3outposts
Package s3outposts provides S3Outposts service access for v3 client This file is auto-generated.
Package s3outposts provides S3Outposts service access for v3 client This file is auto-generated.
v3/clients/savingsplans
Package savingsplans provides SavingsPlans service access for v3 client This file is auto-generated.
Package savingsplans provides SavingsPlans service access for v3 client This file is auto-generated.
v3/clients/secretsmanager
Package secretsmanager provides SecretsManager service access for v3 client This file is auto-generated.
Package secretsmanager provides SecretsManager service access for v3 client This file is auto-generated.
v3/clients/securityhub
Package securityhub provides SecurityHub service access for v3 client This file is auto-generated.
Package securityhub provides SecurityHub service access for v3 client This file is auto-generated.
v3/clients/servicecatalog
Package servicecatalog provides ServiceCatalog service access for v3 client This file is auto-generated.
Package servicecatalog provides ServiceCatalog service access for v3 client This file is auto-generated.
v3/clients/servicediscovery
Package servicediscovery provides ServiceDiscovery service access for v3 client This file is auto-generated.
Package servicediscovery provides ServiceDiscovery service access for v3 client This file is auto-generated.
v3/clients/servicequotas
Package servicequotas provides ServiceQuotas service access for v3 client This file is auto-generated.
Package servicequotas provides ServiceQuotas service access for v3 client This file is auto-generated.
v3/clients/ses
Package ses provides SES service access for v3 client This file is auto-generated.
Package ses provides SES service access for v3 client This file is auto-generated.
v3/clients/sfn
Package sfn provides StepFunctions service access for v3 client This file is auto-generated.
Package sfn provides StepFunctions service access for v3 client This file is auto-generated.
v3/clients/shield
Package shield provides Shield service access for v3 client This file is auto-generated.
Package shield provides Shield service access for v3 client This file is auto-generated.
v3/clients/signer
Package signer provides Signer service access for v3 client This file is auto-generated.
Package signer provides Signer service access for v3 client This file is auto-generated.
v3/clients/sns
Package sns provides SNS service access for v3 client This file is auto-generated.
Package sns provides SNS service access for v3 client This file is auto-generated.
v3/clients/sqs
Package sqs provides SQS service access for v3 client This file is auto-generated.
Package sqs provides SQS service access for v3 client This file is auto-generated.
v3/clients/ssm
Package ssm provides SSM service access for v3 client This file is auto-generated.
Package ssm provides SSM service access for v3 client This file is auto-generated.
v3/clients/storagegateway
Package storagegateway provides StorageGateway service access for v3 client This file is auto-generated.
Package storagegateway provides StorageGateway service access for v3 client This file is auto-generated.
v3/clients/swf
Package swf provides SWF service access for v3 client This file is auto-generated.
Package swf provides SWF service access for v3 client This file is auto-generated.
v3/clients/synthetics
Package synthetics provides Synthetics service access for v3 client This file is auto-generated.
Package synthetics provides Synthetics service access for v3 client This file is auto-generated.
v3/clients/timestreamwrite
Package timestreamwrite provides TimestreamWrite service access for v3 client This file is auto-generated.
Package timestreamwrite provides TimestreamWrite service access for v3 client This file is auto-generated.
v3/clients/transfer
Package transfer provides Transfer service access for v3 client This file is auto-generated.
Package transfer provides Transfer service access for v3 client This file is auto-generated.
v3/clients/waf
Package waf provides WAF service access for v3 client This file is auto-generated.
Package waf provides WAF service access for v3 client This file is auto-generated.
v3/clients/wafregional
Package wafregional provides WAFRegional service access for v3 client This file is auto-generated.
Package wafregional provides WAFRegional service access for v3 client This file is auto-generated.
v3/clients/wafv2
Package wafv2 provides WAFv2 service access for v3 client This file is auto-generated.
Package wafv2 provides WAFv2 service access for v3 client This file is auto-generated.
athena
Code generated by generate-cached.
Code generated by generate-cached.
autoscaling
Code generated by generate-cached.
Code generated by generate-cached.
batch
Code generated by generate-cached.
Code generated by generate-cached.
cfg
cloudcontrol
Code generated by generate-cached.
Code generated by generate-cached.
cloudtrail
Code generated by generate-cached.
Code generated by generate-cached.
cloudwatchlogs
Code generated by generate-cached.
Code generated by generate-cached.
dynamodb
Code generated by generate-cached.
Code generated by generate-cached.
ec2
Code generated by generate-cached.
Code generated by generate-cached.
ecs
Code generated by generate-cached.
Code generated by generate-cached.
efs
Code generated by generate-cached.
Code generated by generate-cached.
eks
Code generated by generate-cached.
Code generated by generate-cached.
elb
Code generated by generate-cached.
Code generated by generate-cached.
emr
Code generated by generate-cached.
Code generated by generate-cached.
emrserverless
Code generated by generate-cached.
Code generated by generate-cached.
glue
Code generated by generate-cached.
Code generated by generate-cached.
health
Code generated by generate-cached.
Code generated by generate-cached.
iam
Code generated by generate-cached.
Code generated by generate-cached.
lambda
Code generated by generate-cached.
Code generated by generate-cached.
pricing
Code generated by generate-cached.
Code generated by generate-cached.
rds
Code generated by generate-cached.
Code generated by generate-cached.
route53
Code generated by generate-cached.
Code generated by generate-cached.
s3
Code generated by generate-cached.
Code generated by generate-cached.
secretmanager
Code generated by generate-cached.
Code generated by generate-cached.
sns
Code generated by generate-cached.
Code generated by generate-cached.
sqs
Code generated by generate-cached.
Code generated by generate-cached.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL