電気ひつじ牧場

技術メモ

isucon11予選に参戦してきました

「何もしてないのに壊れました」というふざけたチーム名で会社の同期(kypくん、shikiさん)とisucon11の予選に参戦しました。 使用言語はGo、結果は42525点、93位/約600チームで予選敗退でした。

  • 前日までにやったこと
  • 当日
    • -20分
    • 0分
    • +30分
    • +2時間
    • +4時間
    • +6時間
    • +7時間
    • +8.5時間
  • 競技を終えて
  • 追記
続きを読む

Post: "https://cognito-idp.ap-northeast-1.amazonaws.com/": x509: certificate signed by unknown authority" となるエラー

概要

Post \"https://cognito-idp.ap-northeast-1.amazonaws.com/\": x509: certificate signed by unknown authority"

プログラムからAWSのリソース(今回はcognito)にアクセスしようとしたときにこのようなエラーになった。 利用していたDockerfileは次の通り。Golangのアプリケーションをマルチステージビルドして、実行イメージとしてはDebian slimを利用した。

FROM golang:1.16 AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY app ./app
COPY main.go ./
RUN go build -ldflags="-w -s" -o myapp

FROM debian:10-slim
COPY --from=builder /src/myapp .
EXPOSE 8080
CMD [ "./myapp" ]

原因

なんとなくAWSのロールやポリシー周りのミスかと思いきやそうではなく、証明書にまつわるエラーだった。AWS SDKAPIリクエストを投げるときにTLSを利用するが、debian-slimにはルート証明書が含まれていないため、この通信が失敗していた。

解決方法

ca-certificateパッケージをインストールする。 Dockerfileはこうなる。

FROM golang:1.16 AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY app ./app
COPY main.go ./
RUN go build -ldflags="-w -s" -o myapp

FROM debian:10-slim
RUN apt update && apt install -y ca-certificates   # 追記
COPY --from=builder /src/myapp .
EXPOSE 8080
CMD [ "./myapp" ]

Software Design誌に約半年間連載を書いていました

Twitterなどで散々言っていましたが、今年の1月〜7月号までの7回、技術評論社さんのSoftware Designに連載記事を寄稿していました。自分の中では今年上半期のビッグイベントだったので振り返ってみます。

続きを読む

【Terraform】CIでinitした時にdoesn't match any of the checksums previously recorded in the dependency lock fileとなる

codebuildでterraform initをした時に下記のようなエラーが出力されて落ちた

Initializing provider plugins...
- Reusing previous version of hashicorp/aws from the dependency lock file
- Installing hashicorp/aws v3.42.0...

Error: Failed to install provider

Error while installing hashicorp/aws v3.42.0: the current package for
registry.terraform.io/hashicorp/aws 3.42.0 doesn't match any of the checksums
previously recorded in the dependency lock file
続きを読む

【Elasticsearch】時間経過でインデックスを削除・設定変更

ログデータにはある種の鮮度のようなものがあります。一般的に1年前のログと2日前のログだと、おそらく後者の方が取り出される頻度も重要度も大きいため、より早く、確実に取得したいと考えるでしょう。

そのため、これらのデータを同様のストレージに同様の構成で格納しておくのはコスト面であまり良いとは言えません。1年前のログに対して3日前のログと同様の取得速度と信頼性を求めない場合、より安価なストレージに移動させる、あるいはレプリカ数を減らすなどといった変更を行うことで、インフラのコストを削減することが可能になります。

Elasticsearchにはこのように自動的にインデックスのライフサイクルを管理し、設定を変更する機能が備わっています。

本稿ではAWS Elasticsearch Service(AES)について述べます。AESで利用できるインデックスライフサイクル管理機能にはISMという名前がついています。

続きを読む

シェル色付け対応早見表

ターミナルに文字を出力する際に

$ echo -e "\033[<パラメータ>m <表示する文字> \033[0m"

とすることでパラメータに応じた文字色、背景色をつけることができる。パラメータは;で区切ることで複数種類指定することが可能。

続きを読む