地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

AWS LocalStackのメモ

AWS LocalStackは、AWSクラウドサービスをローカル環境でエミュレートするためのオープンソースツール。AWSの機能を利用するアプリケーションやマイクロサービスを開発する際に、クラウド上でのテストやデバッグを容易にすることができるようになる。実際のAWS環境と同じAPI呼び出しを使用して、ローカルでサービスを起動およびテストできたりサービスの設定やリソースの作成もローカルで行うことができる。

パラメータストアの作成/取得をCLIからやってみる

$ aws ssm put-parameter \
    --name sample-param \
    --value sample-value \
    --type String \
    --endpoint-url=http://localhost:4566 \
    --profile default

$ aws ssm get-parameter \
    --name sample-param \
    --endpoint-url=http://localhost:4566 \
    --profile default
{
    "Parameter": {
        "Name": "sample-param",
        "Type": "String",
        "Value": "sample-value",
        "Version": 1,
        "LastModifiedDate": "2023-07-09T01:00:12.696000+09:00",
        "ARN": "arn:aws:ssm:ap-northeast-1:000000000000:parameter/sample-param",
        "DataType": "text"
    }
}

LocalStackをGoから使用するには

docs.localstack.cloud

package main

import (
    "fmt"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func main() {
    // LocalStackのエンドポイントURLを指定してセッションを作成
    sess := session.Must(session.NewSession(&aws.Config{
        Endpoint: aws.String("http://localhost:4566"),
    }))

    // LocalStackのセッションを使用してS3クライアントを作成
    s3Client := s3.New(sess)

    // バケット名
    bucketName := "my-test-bucket"

    // S3バケットを作成
    _, err := s3Client.CreateBucket(&s3.CreateBucketInput{
        Bucket: aws.String(bucketName),
    })
    if err != nil {
        fmt.Println("Error creating bucket:", err)
        return
    }

    fmt.Println("Bucket created successfully!")
}

料金体系とか

localstack.cloud

無料版(Free)では一部の機能で制限がある模様。以下でProとついていないものは使える

docs.localstack.cloud

カバレッジも公開されているが"Feature fully supported by LocalStack maintainers; feature is guaranteed to pass all or the majority of tests"となっているのはSQSのみで他は完全エミュレートには対応していないとのこと。とはいえ今も進化の早いAWSの全機能サポートってどんな速度で開発しているのだろうというのは気になる。