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

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

「やらなければできないが大事なんだ。」というセリフ

gothedistance.hatenadiary.jp

これはいつもオレ自身に言い聞かせていることなんだが、
やらなければできないが大事なんだ。
でも人は知恵がつくと、「できるからやる」になるらしい。
それは結局、「できないことはやらない」だ。
それではその先の走りは引き出せない。
湾岸MIDNIGHT 第37巻

で取り上げられていた。湾岸ミッドナイトのセリフ。この漫画読んだことないけどとても良いなぁとなった。『できるようになってからやる』のではなく『やるからできるようになる』というのが大事。最近仕事でもプライベートでもこの傾向が出てしまっていると再認識した。

湾岸ミッドナイトは高速道路で飛ばしまくる漫画で超安全運転勢の私には合わないなと思っていたけど読んでみようかな。

【Go】go.opentelemetry.io/otel/sdk/traceでサンプリングレートを指定する

otelcollectorがローカルにいればそちらで指定すれば良いがそうじゃないケースでサンプリングしたい場合に使える。

package main

import (
    "context"
    "log"

    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/attribute"
    "go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
    "go.opentelemetry.io/otel/sdk/resource"
    sdktrace "go.opentelemetry.io/otel/sdk/trace"
    semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
)

func main() {
    // トレースエクスポーターの設定
    exporter, err := stdouttrace.New(stdouttrace.WithPrettyPrint())
    if err != nil {
        log.Fatalf("Failed to create stdouttrace exporter: %v", err)
    }

    // サンプリングレートを50%に設定
    sampler := sdktrace.ParentBased(sdktrace.TraceIDRatioBased(0.5))

    tp := sdktrace.NewTracerProvider(
        sdktrace.WithBatcher(exporter),
        // サンプラーを設定
        sdktrace.WithSampler(sampler),
        sdktrace.WithResource(resource.NewWithAttributes(
            semconv.SchemaURL,
            attribute.String("service.name", "your-service-name"),
        )),
    )
    otel.SetTracerProvider(tp)

    // ここからアプリケーションのトレースを開始します
    tracer := otel.Tracer("your-tracer-name")

    ctx, span := tracer.Start(context.Background(), "your-operation-name")
    defer span.End()

    // トレース対象の操作...
}

【ECS】入門する

aws.amazon.com

AWSのECS(Amazon Elastic Container Service)は、AWSが提供するマネージドコンテナオーケストレーションサービスです。Dockerコンテナを使ったアプリケーションのデプロイ、管理、スケーリングを簡単に行うことができます。ECSは、アプリケーションをマイクロサービスアーキテクチャで構築している場合に特に有効となる。

ECSの主な機能と特徴は以下

  • コンテナのオーケストレーション:ECSは、コンテナのデプロイ、スケーリング、ロードバランシングを自動で行います。これにより、高可用性や高性能を持つアプリケーションの運用が容易になります。
  • サービスの統合:ECSは、AWSの他のサービス、例えばElastic Load Balancing(ELB)、Amazon EC2Amazon ECR(Elastic Container Registry)などと緊密に統合されています。これにより、セキュリティ、ネットワーキング、監視などの機能をシームレスに利用することが可能です。
  • 柔軟なスケーリング:ECSは、アプリケーションの負荷に基づいてコンテナインスタンスの数を自動で調整することができます。これにより、リソースの使用効率を最適化し、コストを抑えることができます。
  • セキュリティ:ECSは、AWS Identity and Access Management(IAM)と統合されており、コンテナとリソースへのアクセスを細かく制御することができます。
  • Fargate対応:ECSには、サーバーレスコンピューティングオプションであるAWS Fargateも用意されています。Fargateを使用すると、サーバーの管理を気にすることなく、コンテナを実行することができます。

ECSを使用することで、開発者や企業はインフラストラクチャの管理にかかる手間を減らし、アプリケーションの開発により集中することができます。

AWS Fargateとは

AWS上でコンテナをサーバーレスで実行することが出来るようにする機能を提供してくれるサービス

www.sunnycloud.jp

AWS Fargateは、Amazon Elastic Container Service (ECS) および Amazon Elastic Kubernetes Service (EKS) でのコンテナの実行を簡素化するサーバーレスコンピューティングエンジンです。Fargateを使用すると、コンテナを直接実行するために物理的なサーバーやクラスターをプロビジョニング、構成、スケーリングする必要がなくなります。これにより、アプリケーションのデプロイメントと管理が大幅に簡素化されます。以下はAWS Fargateの主な特徴です:

サーバーレス実行環境: Fargateはコンテナをサーバーレスで実行するため、インフラストラクチャの管理が不要です。ユーザーはコンテナの設定とアプリケーションのコードに集中でき、サーバーのプロビジョニングや管理の手間がかかりません。

簡単なスケーリング: Fargateは、アプリケーションの需要に応じて自動的にスケーリングします。負荷が増加すると追加のコンテナを自動で起動し、需要が減少するとコンテナを削除します。これにより、リソースの使用効率が最適化され、コストを削減できます。

柔軟な料金設定: Fargateでは、実行中のコンテナのCPUとメモリーに基づいて料金が発生します。使用したリソースにのみ料金がかかるため、無駄なコストを削減できます。

セキュリティ: Fargateは各コンテナインスタンスを独自の隔離環境で実行するため、アプリケーション間のセキュリティが強化されます。また、AWSのセキュリティサービスと統合されており、ネットワークセキュリティやIAMポリシーでアクセスを制御できます。

統合と互換性: FargateはECSとEKSの両方で動作するため、DockerとKubernetesの両方のエコシステムと互換性があります。これにより、既存のコンテナベースのアプリケーションを簡単にFargateに移行できます。

Fargateを使用することで、開発者はインフラストラクチャの管理から解放され、アプリケーションの開発とイノベーションにより集中できるようになります。

EKSとの違い

dev.classmethod.jp

参考資料

docs.aws.amazon.com

aws.amazon.com

【MySQL】lock_wait_timeoutとinnodb_lock_wait_timeoutの違い

qiita.com

手元で検証していてハマった。ロック待ちを短くしてmetadata lock待ちを短くしてひたすらALRTERをループさせるとどうなるんだ?というのをやりたくてinnodb_lock_wait_timeoutをずっと変えていたが全然変わらなくてmy.cnfか?globalで設定されていない???という状態になっていた。innodb_lock_wait_timeout は行ロック時にタイムアウトするための設定でした。はい。

dev.mysql.com

というかどんだけタイムアウトあるんだ...

gihyo.jp