カテゴリー: tech

  • 【解決法】go1.16でビルドエラー「no required module provides package github.com」が発生する場合

    【解決法】go1.16でビルドエラー「no required module provides package github.com」が発生する場合

    go1.16 で golang を書いて build すると、タイトル通りのエラーが表示された。

    調べてみると go 1.15 までは go buildgo test などのコマンドを実行すると、 go.modgo.sum の内容をよしなに更新されていたが、go 1.16 からは自動では更新されなくなったようだ。

    これを解決するには

    $ go mod tidy

    とすることで、go のモジュールに書かれている不足分のパッケージを go.mod に書き込んでくれる

    % go build -o hoge.go
    main.go:7:2: no required module provides package github.com/hackebrot/turtle; to add it:
            go get github.com/hackebrot/turtle
    
    
    % go mod tidy
    go: finding module for package github.com/hackebrot/turtle
    go: downloading github.com/hackebrot/turtle v0.1.0
    go: found github.com/hackebrot/turtle in github.com/hackebrot/turtle v0.1.0
    go: finding module for package github.com/hackebrot/go-repr/repr
    go: finding module for package github.com/google/go-cmp/cmp
    go: downloading github.com/google/go-cmp v0.5.5
    go: downloading github.com/hackebrot/go-repr v0.1.0
    go: found github.com/google/go-cmp/cmp in github.com/google/go-cmp v0.5.5
    go: found github.com/hackebrot/go-repr/repr in github.com/hackebrot/go-repr v0.1.0
    
    % go build -o hoge.go
    

    参考情報

    https://golang.org/ref/mod#go-mod-tidy

  • bashで入力の冗長を減らす

    bashで入力の冗長を減らす

    何かと bash/zsh で作業していると、直近の引数を再度入力したくなることがある。
    たとえば、ディレクトリを作って、その中に移動する場合などだ。

    実は bash や zsh には直前の引数を再度入力する特殊変数が存在する。

    % pwd   
    /tmp

    この /tmp ディレクトリから新規ディレクトリを作成し、そこに移動する場合、
    このように表現することで移動することができる。

    % mkdir hoge; cd $_ 
    % pwd
    /tmp/hoge

    $_ という変数が特殊変数という扱いになり、直前の引数を再度入力することができる。

  • fargate platform 1.4 で service を起動できない

    fargate platform 1.4 で service を起動できない

    今まで fargate で service を動かせていたが、platform 1.4 では動かせないことがあった。その対処法を紹介。

    pseudoTerminal option があるが、falase だと起動した後に停止してしまう。解決策としては、

    pseudoTerminal を false から true にすること。

    そもそも pseudoTerminal とは擬似ターミナル。

    Docker Remote API の コンテナを作成する際、セッションの TTy にマッピングして docker run にマッピングするオプション。

    1.3 まではこの設定が false でも動かすことができたが、1.4 ではこれを true にしないと動かすことができないようだ。

  • ECS(fargate) 起動時間をスケジュール設定する

    ECS(fargate) 起動時間をスケジュール設定する

    はじめに

    fargate でサービスを運用していて、夜間サービスを停止したい時がある。オートスケールの設定を流用することで、夜間停止を行うことができる。

    オートスケール設定

    aws application-autoscaling  \
    register-scalable-target  \
    --service-namespace ecs  \
    --resource-id service/{cluster-name}/{service-name}  \
    --scalable-dimension ecs:service:DesiredCount  \
    --min-capacity 0  \
    --max-capacity 1

    停止スケジュール
    (スケジューリング機能を使い、MinCapacity を 0 にする)

    起動スケジュール

  • AWS Directory Service  について

    AWS Directory Service について

    AWS では Active Directory / LDAP アプリケーションは大きく3つ存在している。全ての説明は Classmethod 社の記事がわかりやすかったので引用する。

  • ALB の設定を aws cli で確認する

    ALB の設定を aws cli で確認する

    1コマンドで確認することができる。

    aws --profile stg elbv2 describe-load-balancers --load-balancer-arns arn:aws:elasticloadbalancing:ap-northeast-1:01234567:loadbalancer/net/tsukadanlb/a1b2c3d4e5

    結果は以下の通り

    {
        "LoadBalancers": [
            {
                "LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:708179590705:loadbalancer/net/tsukadanlb/a1b2c3d4e5",
                "DNSName": "tsukada-nlb-a1b2c3d4e5.elb.ap-northeast-1.amazonaws.com",
                "CanonicalHostedZoneId": "a1b2c3d4e5",
                "CreatedTime": "2019-06-06T11:01:01.615000+00:00",
                "LoadBalancerName": "tsukada-nlb",
                "Scheme": "internal",
                "VpcId": "vpc-a1b2c3d4e5",
                "State": {
                    "Code": "active"
                },
                "Type": "network",
                "AvailabilityZones": [
                    {
                        "ZoneName": "ap-northeast-1c",
                        "SubnetId": "subnet-a1b2c3d4e5",
                        "LoadBalancerAddresses": []
                    },
                    {
                        "ZoneName": "ap-northeast-1a",
                        "SubnetId": "subnet-a1b2c3d4e5",
                        "LoadBalancerAddresses": []
                    }
                ],
                "IpAddressType": "ipv4"
            }
        ]
    }
  • cannot be deleted because it is currently associated with another service

    NLB を削除できない場合、

    API Gateway に VPC links の設定が残っている場合が多い。

    API Gateway で VPC links で NLB を登録していたが、先にその設定を解除(削除)する必要がある。

  • The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems.

    The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems.

    CodeDeploy で Step 3 で失敗することがある。

    The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems.

    上記エラーの対処をまとめる。

    原因を探っていくと、AllowTraffic で 1時間以上も時間がかかって失敗していた。

    この処理の Script の中身を確認するものの何も書かれていない。

    この原因について調査し、原因がわかったので備忘録として記載すると、

    これは LoadBalancer から新しくDeploy されたインスタンスへのトラフィックが流れない事が原因だった。

    具体的に言うと LoadBalancer から新インスタンスへの health check が通っていない状況。

    LoadBalancer の health check を修正する事で deploy が成功するようになった。

  • 機械学習などで使われる p50, p90, p95 (パーセンタイル)とは

    機械学習などで使われる p50, p90, p95 (パーセンタイル)とは

    パーセンタイル

    パーセントと、パーセンタイルを比べるとわかりやすい。

    一般的な パーセントの場合は、率をあらわす。
    50パーセントは全体に対し、半分がという意味になる。

    一方でパーセンタイルは似たようでちょっと違う。
    全体を 100個に区切り、
    小さい方順にソートして 何番目にあるかを表現されている。

    p50 (50パーセンタイ)ルの場合は、
    下から 50/100に位置しているデータ。

    p90 (90パーセンタイル)の場合は、
    下から 90/100に位置しているデータ。

    p95 (95パーセンタイル)の場合は、
    下から 95/100に位置しているデータ。

    となる。

    機械学習ではなく xray でもこのパーセンタイルを採用しているが、おそらく理由は、

    それより遅い異常値を弾くことで精度の高い統計情報にするためだと考える。

  • CloudWatch の Dimensions を確認する

    CloudWatch の Dimensions を確認する

    概要

    CloudWatch の Dimensions を知りたいが、

    ブラウザで AWS のコンソール画面に入っても、Dimensions を見ることはできない。

    この時の確認の仕方を紹介。

    確認方法

    コンソールからNamespaces を調べる。

    今回 API gateway 。

    クリックしていくと、 Metric Name を選ぶので任意のものを選ぶ。

    今回は Count 

    上記メモとしてひかえ、aws cli を投げる

    aws cloudwatch list-metrics 
    --namespace AWS/ApiGateway
    --metric-name Count

    以下のようなレスポンスが返ってくる

    {
        "Metrics": [
            {
                "Namespace": "AWS/ApiGateway",
                "MetricName": "Count",
                "Dimensions": [
                    {
                        "Name": "ApiName",
                        "Value": "Tsukada API"
                    },
                    {
                        "Name": "Resource",
                        "Value": "/info/name/_search"
                    },

    Dimensions を確認することができる