sops で localstack の KMS key を使う

sops を使っていて、これ localstack の KMS key を使うことできないかなぁとふと思ってみたので試してみました。

endpont-url を受け取れるように修正すれば一応動かせました。

github.com

特に実用性はないのですけど、備忘録的に残しておきます。 localstack を使ったローカルテストをするときには役に立つかも?

動作確認環境

  • ArchLinux
  • awscli v2.1.13
  • localstack v0.12.4

修正点

対した変更はしていませんが、endpoint-url を環境変数から吸えるようにしました。

   config := aws.Config{
        Region:   aws.String(matches[1]),
        Endpoint: aws.String(os.Getenv("AWS_ENDPOINT_URL")),
    }

sops/keysource.go at localstack · goropikari/sops · GitHub

$ git clone -b localstack --depth 1 https://github.com/goropikari/sops.git
$ docker build -t sops -f Dockerfile-localstack .
$ id=$(docker create sops)
$ docker cp $id:/go/bin/sops sops-localstack
$ docker rm -v $id

$ docker run --rm -p 4566:4566 localstack/localstack:0.12.4
$ export AWS_ENDPOINT_URL=http://localhost:4566
$ alias awsl="aws --endpoint-url $AWS_ENDPOINT_URL"
$ keyarn=$(awsl kms create-key --query KeyMetadata.Arn --output text)
$ export SOPS_KMS_ARN=$keyarn
$ ./sops-localstack foo.json
$ ./sops-localstack -d foo.json
{
        "hello": "localstack"
}

参考

boot2docker - Docker - how can I copy a file from an image to a host? - Stack Overflow

2020年 振り返り

勉強記録を見直すと2020年は低レイヤの勉強と雰囲気で使っていたものをちゃんと学び直した1年だったようだ。

読んだ・受講した

途中まで読んだ

現在取り組んでいる

AWS Lambda をコンテナイメージで動かすときの Terraform の書き方

AWS Lambda がコンテナイメージをサポートするようになりましたが、Terraform で Lambda のリソースを定義するのにてこづったので書き方を残しておきます。

aws.amazon.com

動作確認時のソフトウェア

  • awscli 2.1.11
  • terraform 0.14.2
  • terraform-provider-aws 3.21.0

Terraform の書き方

Lambda のリソースを作るときに ECR にイメージがすでにある必要があるので、Lambda を作る前に ECR のリポジトリと Lambda で使う IAM を作っておきます。 ECR リポジトリができたら Docker image を push しておきます。

resource "aws_lambda_function" "lambda_container" {
  function_name = "lambda_container"
  role          = aws_iam_role.lambda_container.arn
  package_type  = "Image"
  image_uri     = "${aws_ecr_repository.lambda_containter.repository_url}:latest"
  timeout       = 60

  lifecycle {
    ignore_changes = [image_uri]
  }
}

resource "aws_iam_role" "lambda_container" {
...
}

resource "aws_ecr_repository" "lambda_containter" {
...
}

Terraform で Lambda を作るときは package_type = "Image" にし、image_uri に ECR にイメージ URI をタグを含めて指定します。 Lambda 関数を update するとそのたびに Terraform で差分が出てしまうので ignore_changesimage_uri を入れておくと良いです。

Terraform の公式ドキュメントを見ると handler が Required になっていますが、package_typeImage にした場合は不要です。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function

実際に使用したコード github.com

RubyでつくるRuby を読んだ

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

  • 作者:遠藤 侑介
  • 発売日: 2017/03/31
  • メディア: 単行本(ソフトカバー)

nand2tetris が終わってヘビーな本を読むのはちょっと時間をおきたかったので、電子積ん読していた「RubyでつくるRuby」を読みました。 内容的にも難しいことはなく、実装時間含めても5時間ほどで読み終わりました。

この本では字句解析・構文解析は著者が用意したライブラリを使用するのでメインは Parse Tree をどう評価するかという内容となっていました。 大元の Ruby の機能を結構使うので想像以上にさっくり作ることができます。

初めて言語処理系を書くという方でも読みやすいとは思いますが、1冊目としては「Rubyで作る奇妙なプログラミング言語」のほうが個人的にはおすすめです。作るのは brainf*ck や whitespace などの実用性皆無な言語ばかりですが、字句解析や構文解析もちゃんとやるのでブラックボックス感が少ないです。 「RubyでつくるRuby」は字句解析とかの知識をつけてから読むとより楽しめる内容だと思いました。

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

  • 作者:原 悠
  • 発売日: 2008/12/20
  • メディア: 単行本(ソフトカバー)

The Elements of Computing Systems を読んだ

約1ヶ月かけて The Elements of Computing Systems (通称 nand2teris) を読む & 演習のすべてを完遂しました。 約130時間費やしましたが、実に有意義な時間を過ごすことができました。今まで読んだ本の中でトップ10には入る良書と断言できます。

日本語訳はO'Reillyから出版されています。

この本自体は去年末に購入したきりずっと積ん読にしていたのですが、来年の1月に第2版が出ると知り慌てて読み切りました。 無事に第2版が出る前に完遂することができてよかったです。

この本はコンピュータを NAND gate から出発して作っていくという他に類を見ない内容になっていると思います。 この本1冊で

を自分で作るという体験を一気にできるのでこの辺のことに興味がある方にはおすすめできる1冊です。 ただ前半のハードウェアの章に比べて後半のソフトウェア(アセンブラ以降)の章は本に書いてある内容だけをもとに演習をこなしていくのは辛いものがあるかなぁと思いました。 context free grammer や LL(1) parser とかの話はこの本とは別で言語処理系について学んだことがないと理解が難しそうと思いました。

私の場合はこの本で実装する Jack 言語よりも複雑な文法の言語のコンパイラを書いたことがあったので実装の方針が全く立たないということはなかったのですが、そういった言語処理系を書いたことない人にとって後半のソフトウェアの章は難しいと感じると思います。 また本の趣旨として Lex や Yacc のような Lexer Generator や Parser Generator を使わないようにということも書かれているので、なおのこと言語処理系を書いたことない人にとってはハードモードだと思います。 私も Lexer は書いたことありましたが、Parser は自作したことなかったのでなかなか難儀しました。

goropikari.hatenablog.com

著者の方々が coursera に講義を上げておられるので、本を読んでイマイチ理解しきれないなぁというところがあったら講義を視聴して理解を深めました。

www.coursera.org

www.coursera.org

この本を読んだおかげであとは FPGA の使い方を覚えればリアルでコンピュータを自作できるかもという自信がつきました。 以前から東大のCPU実験を私もやってみたいなぁと思っていたのでその目標にまた一歩近づいた気がします。

github.com

アセンブラVMコンパイラは Julia で書きましたが Coursera の講義の課題採点システムでは Julia はサポートされていないので修了証を取りたい場合は C とか Python などのメジャーな言語を使いましょう。 私の場合は修了証には特に興味なかったので一番使い慣れている Julia で書きました。 ぱっと調べた感じだと Julia で書いている人が見当たらなかったのでもしや nand2tetris を Julia でやったのは世界初かも???