ジョギング
- 昨日購入したナイキのマラソンシューズで走り初め
- まだ, 左足のかかと周りが痛い
日課
- お休み
夕飯
- セブンイレブンのおでんをたらふく食べた
- 今度は, 鍋を持って買いに行こうと思う
Github で 俺のツールズの Organizations を作った.
今まで作ったクソコードの数々はこちらに移行していこうかなと考えている.
前職で貸与されていた PC 等を返送した.
朝から応援. 走りたいけど走れないので応援頑張った. 母校は残念ながら苦戦している. 青山学院大学も五連覇が掛かっているけど, 往路は 6 位と苦戦している.
履きこなせるか心配.
久しぶりに「てんや」で天丼を食べた. 500 円で大満足だった. 強いて注文をつけるとすれば, お手拭きが欲しかった.
2018 年をざっくりと振り返りたいと思う. そして, 2019 年の目標も書いてみたい.
2018 年冒頭に, 2017 年の目標を踏襲すると書いていたので, 基本的に 2018 年の目標は上記の通り.
AWS 各資格のプロフェッショナルレベルについては, 来年, ボチボチ頑張ろうと思う.
目標は達成出来たけど, 後半の足の攣りとか課題だし, 現在は故障でまったく走れていない.
2 月 3 日に別府大分毎日マラソンに走るんだけど... 大丈夫かな.
主に業務の効率改善を目的として, 雑なコマンドラインツールを思いの外たくさん作ってリリースした.
主に Ruby と Golang で作ったが, なかなかこれらの言語について上達することは無かった...のは反省ポイント. しかし, 何かしらの課題に対して, コードで解決するという選択肢があるというちょっとした自信が付いた気がする. あと, 先人達のコードを読むことが本当にすごく勉強になることを実感出来た.
来年も, サンデープログラマーとして, 業務改善を目的としてたくさんのツールをリリースしていきたいと思う.
技術的な内容の記事をなかなか書くことが出来なかった. 書くネタはあるんだが, 下調べをするうちに情報の鮮度とモチベーションが落ちるということを繰り返していたような気がする. あと, これは永遠の課題なんだけど, どうやったら記事の質を上げられるのか, 未だに試行錯誤している. 2019 年もきっと試行錯誤するんじゃないかなと思っているが, できるだけ, こまめに記事を書いていくことで質自体も上げられるのではと考えているので, 2018 年の記事数を超えられるように頑張りたい.
登壇, んー, 登壇は得意ではないし, そんな人様の前に立ってなにかを話すほどネタがあるわけではないけど, 登壇することによって得られることがあるというのも事実. 機会があれば, 各種勉強会に参加して LT を積み重ねて, そこから得られるなにかを糧にできればと考えている.
コアメンバーをやらせて頂いている, JAWS-UG 福岡. なんの飲み会がきっかけだったか忘れたけど, もくもく会を毎週やろうみたいな話になって夏くらいから出来るだけ毎週開催した. 他のコアメンバーの方の協力や場所を提供して下さる企業様には感謝しかない. 本当にありがとうございました. 来年も引き続き続けていければなーと考えている.
まずは, 定量的な目標のみを掲げておく. その都度, その都度, 適当な間隔で振り返りを行い目標を補正していこうかなと考えている.
この歳で転職することになった. 1 月 4 日から新しい職場である. まずは, 新しい職場に慣れること, 4 年半リモートワークだったが, 次の職場はオフィスに通勤することになるので, 通勤の感覚やオフィスで他のメンバーとともに仕事をする感覚を取り戻す必要があると考えている. 業務の内容としては, サービスのインフラ構築, 運用がメインとなるが, それと合わせてバックエンドサービスにも関わらせてもらいつつ, 単に技術にフォーカスするだけではなく, もっと広い視点でサービスの質や信頼性をより高めるような仕事が出来るようになりたいと考えている.
エンジニアとして定年はとっくに超えてしまっている年齢なのかもしれないけど, せっかくこの業界で仕事しているので, 技術者の端くれとして勉強は欠かさないようにしたい. 特に 2018 年に全くキャッチアップ出来ていなかった Kubernetes を始めとするコンテナオーケストレーション実装やコンテナランタイム等のコンテナ技術について, 1 から勉強して業務に活かせるようになりたい. また, コードを書くことを止めないようにしたい. Ruby や Golang については業務レベルで使えるように研鑽を重ねたい. また, よりコンピュータと仲良くなりたいので C 言語を勉強したいと考えている.
出来るだけ故障はしないように, フルマラソンはサブスリーをキープ出来ればと考えている. 今年こそ, 夏場に阿蘇合宿をしたいと思っている.
いつも支えてくれている奥さんに感謝.
明けましておめでとうございます。今年も夫婦共々宜しくお願い致します。
2019 年で結婚 8 年目に突入するけど, この写真のようにいつも明るく馬鹿が言い合えるような夫婦で過ごせたらいいなと思っている.
風邪気味で体調イマイチな年明けとなりましたが, 今年もよろしくお願いいたします.
Docker のコンテナイメージを AWS の CodePipeline や CodeBuild を介して, コンテナレジストリ (ECR) に push する流れを実装したくて, 色々と調査していましたが, とりあえず, CircleCI で実施してみたらどうなるだろうと思ってドキュメントなどを参考にハンズオンしてみました.
コンテナレジストリにコンテナイメージを push するにあたって, 以下のような流れを実装したいなと考えています.
今回, 三番目のステップであるビルドイメージのテストは goss と goss を Docker コンテナイメージに対してテストをする為のラッパーである dgoss を利用してテストするように実装しようと思います.
以下にやったことをまとめてあります.
超シンプルな Apache が起動するだけの Docker イメージを作成するものです. ファイルの一覧は以下の通りです.
$ tree . . ├── Dockerfile ├── README.md ├── goss.yaml └── terraform ├── Makefile ├── main.tf └── provider.tf 1 directory, 6 files
前述の通り, Amazon Linux コンテナを利用して, Apache をインストールしているだけのコンテナが作成されます.
FROM amazonlinux RUN yum install -y httpd && echo 'circleci-docker-test-and-build' > /var/www/html/index.html
goss の詳しい説明については, Github のリポジトリをご一読いただければと思います. テストケースが YAML で書くことができるインフラ構成のテストツールとなります. 類似したツールでは Serverspec が挙げられます. 以下は YAML で書かれたテストケースです.
$ cat goss.yaml package: httpd: installed: true process: httpd: running: true port: tcp:80: listening: true file: /var/www/html/index.html: exists: true filetype: file contains: - "circleci-docker-test-and-build"
Rspec DSL でテストケースを記載する Serverspec とは異なり, Ansible などで馴染み深い YAML でテストケースを記述できるという点が異なりますが, Serverspec との決定的な違いは goss はリモートホストのテストには対応していないという点です. これをネガティブポイントと捉えるかどうかはユースケース次第なので, 必要に応じて使い分けることができればと考えています.
上記のテストケースは実にシンプルで, 以下のような点をテストします.
circleci-docker-test-and-build
という文字列が含まれていることgoss は CircleCI では, 以下のように実行します. ${FULL_IMAGE_NAME}
には, 前段階で docker build した際のコンテナイメージ名が入ります.
dgoss run ${FULL_IMAGE_NAME} /usr/sbin/httpd -DFOREGROUND
例えば, コンテナイメージを test:httpd
でビルドした場合, 以下のように実行してテストを走らせることが出来ます.
$ dgoss run test:httpd /usr/sbin/httpd -DFOREGROUND INFO: Starting docker container INFO: Container ID: 101827da INFO: Sleeping for 0.2 INFO: Container health PID USER TIME COMMAND 2888 root 0:00 /usr/sbin/httpd -DFOREGROUND 2939 48 0:00 /usr/sbin/httpd -DFOREGROUND 2940 48 0:00 /usr/sbin/httpd -DFOREGROUND 2942 48 0:00 /usr/sbin/httpd -DFOREGROUND 2944 48 0:00 /usr/sbin/httpd -DFOREGROUND 2972 48 0:00 /usr/sbin/httpd -DFOREGROUND INFO: Running Tests Process: httpd: running: matches expectation: [true] File: /var/www/html/index.html: exists: matches expectation: [true] File: /var/www/html/index.html: filetype: matches expectation: ["file"] File: /var/www/html/index.html: contains: matches expectation: [circleci-docker-test-and-build] Port: tcp:80: listening: matches expectation: [true] Package: httpd: installed: matches expectation: [true] Total Duration: 0.039s Count: 6, Failed: 0, Skipped: 0 INFO: Deleting container
Docker ビルドして, テストして, ECR にログインして, コンテナイメージを push するまでの操作をまとめると以下のような感じになりました.
version: 2 jobs: build: machine: true steps: - checkout - run: name: Setup common environment variables command: | echo 'export ECR_REPOSITORY_NAME="${AWS_RESOURCE_NAME_PREFIX}"' >> $BASH_ENV echo 'export FULL_IMAGE_NAME="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${ECR_REPOSITORY_NAME}:${CIRCLE_SHA1}"' >> $BASH_ENV - run: name: Setup AWS CLI command: | curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" unzip awscli-bundle.zip sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws - run: name: Setup goss & dgoss command: | curl -L https://github.com/aelsabbahy/goss/releases/download/v0.3.6/goss-linux-amd64 -o ${HOME}/bin/goss chmod +x ${HOME}/bin/goss export GOSS_PATH=${HOME}/bin/goss curl -L https://raw.githubusercontent.com/aelsabbahy/goss/master/extras/dgoss/dgoss -o ${HOME}/bin/dgoss chmod +x ${HOME}/bin/dgoss - run: name: Build Image command: | docker build -t ${FULL_IMAGE_NAME} . - run: name: Run Tests command: | dgoss run ${FULL_IMAGE_NAME} /usr/sbin/httpd -DFOREGROUND - run: name: Login to AWS ECR command: eval $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email) - run: name: Push Docker Image command: | docker push ${FULL_IMAGE_NAME}
事前に以下のような環境変数を CircleCI のプロジェクトに登録しておく必要があります.
リポジトリに対して push すると CircleCI によるビルドとテスト, ECR への push が行われます.
いい感じです.
ECR にも意図した通りにコンテナイメージが push されていることが判ります.
$ aws ecr describe-images --repository-name=httpd { "imageDetails": [ { "registryId": "123456789012", "repositoryName": "httpd", "imageDigest": "sha256:ae7cefb61f88f132eadc4eb98fa545a0054dd3a2888be26c9da48f29ab21c0b0", "imageTags": [ "40f82524001fe52644c2cee1ab9b7895572aa94f" ], "imageSizeInBytes": 142276848, "imagePushedAt": 1546063334.0 }, { "registryId": "123456789012", "repositoryName": "httpd", "imageDigest": "sha256:9afcd192b4e9c51fc43706d00c755747e890811c367422cb53e69f2071df42d2", "imageTags": [ "7c92bdaac1c92f0f317f4e5692f5c6833642be48" ], "imageSizeInBytes": 142276745, "imagePushedAt": 1545953477.0 }, { "registryId": "123456789012", "repositoryName": "httpd", "imageDigest": "sha256:7ba84149310e448739a2f91e06641a63e8ed37bf9cf3b9991cc8860ba54d25f2", "imageTags": [ "79697d588b9efb809cc07621f403a63744079e66" ], "imageSizeInBytes": 142276832, "imagePushedAt": 1546065921.0 } ] }
今回は, コンテナイメージをテストしてイメージを push するところまでをハンズオンしましたが, 次回は, もう少し複雑なアプリケーションを使って, ECS や Fargate にデプロイするところまでやってみたいと思います.
スターダストレビューが歌う「今夜だけきっと」良い歌ですよね. 「今夜だけきっと」を聞きながら作ってみました. 「今夜だけ git (ぎっと)」
インストールはリリースページがダウンロードして頂いて, パスの通ったディレクトリにバイナリを放置して下さい. 強いて言えば, 念の為, 実行権限を付与して下さい.
chmod +x ~/bin/konyadake
https://github.com/inokappa/circleci-docker-test-and-build を clone する場合.
ssh 経由で clone する場合.
$ konyadake -repo=git@github.com:inokappa/circleci-docker-test-and-build.git ✅ 対象リポジトリ git@github.com:inokappa/circleci-docker-test-and-build.git を circleci-docker-test-and-build に clone します. Enumerating objects: 70, done. Counting objects: 100% (70/70), done. Compressing objects: 100% (34/34), done. Total 70 (delta 24), reused 64 (delta 18), pack-reused 0 ✅ 対象リポジトリの clone に成功しました.
https 経由で clone する場合.
$ konyadake -repo=https://github.com/inokappa/circleci-docker-test-and-build.git -dir=myrepo ✅ 対象リポジトリ https://github.com/inokappa/circleci-docker-test-and-build.git を myrepo に clone します. Enumerating objects: 70, done. Counting objects: 100% (70/70), done. Compressing objects: 100% (34/34), done. Total 70 (delta 24), reused 64 (delta 18), pack-reused 0 ✅ 対象リポジトリの clone に成功しました.
-dir
オプションで clone 先のディレクトリを設定出来ます.
https://user.git.backlog.jp/YOUR-PJ/example.git を clone する場合.
みんな大好き Backlog の Git リポジトリにも対応しています.
$ konyadake -repo=user@user.git.backlog.jp:/YOUR-PJ/example.git ✅ 対象リポジトリ user@user.git.backlog.jp:/YOUR-PJ/example.git を example に clone します. Counting objects: 11, done. Compressing objects: 100% (10/10), done. Total 11 (delta 1), reused 0 (delta 0) ✅ 対象リポジトリの clone に成功しました.
いい感じです.
https://github.com/inokappa/circleci-docker-test-and-build を clone して, develop ブランチを checkout する場合.
$ konyadake -repo=git@github.com:inokappa/circleci-docker-test-and-build.git -branch=develop ✅ 対象リポジトリ git@github.com:inokappa/circleci-docker-test-and-build.git を circleci-docker-test-and-build に clone します. Enumerating objects: 70, done. Counting objects: 100% (70/70), done. Compressing objects: 100% (34/34), done. Total 70 (delta 24), reused 64 (delta 18), pack-reused 0 ✅ 対象リポジトリの clone に成功しました. ✅ 対象ブランチの checkout に成功しました. $ cd circleci-docker-test-and-build/ (develop)$ git branch * develop master
いい感じです.
俺のクソコードシリーズ, 第 N 弾である, konyadake-git をご紹介しました. 普通に git コマンドでええやんって感じになりますので, 本当に, 本当に, よろしければ, お手元にダウンロード頂きましてお試し頂ければ幸いです. 尚, 今回, 以下のような点が学びになりました.