理系学生日記

おまえはいつまで学生気分なのか

デスク周りの仕事環境を整える

新型コロナの影響で、基本的に仕事は家で行うことになりました。 これまで平日は家で過ごす時間が少なかったため自宅での PC 環境をかなり蔑ろにしていたのですが、もはやそんなことは言っていられない。 ようやく重い腰をあげて、自宅の PC 環境を整えるこ…

Bash で endsWith (文字列が特定の文字列が終わるかを確認する)

Bash において、変数が特定の文字列で終わるかを確認したいケースがあります。 これ Bash のみで実現が可能です。 [[ ${user_arn} == *Terraformer ]] Bash における [ と [[ シェルスクリプトで使用される [ がコマンドである事実はよく知られていますが、[…

THIS IS LEAN (1) リソース効率とフロー効率

最近"アジャイル"について人に教えることが要求されていて、人に教える以上はきちんと学ばないといけないということで、改めていくつかの内容を振り返っています。 その中で、どうしてもきちんとした理解をしておく必要がある、と思ったのが「リソース効率」…

set -u した状態で変数に値が定義されているか否かの分岐を表現する

一般にシェルスクリプトでは set -eu しておけということを言われます。 -e はコマンド実行でエラーが発生した場合にそこでスクリプトの実行を終了する。 -u は誤って未定義変数を使用しようとしたときにエラーとする、という振る舞いになります。 shebang …

プレゼンテーション用スライドを作るときに気をつけていること

最近は研修用の資料をチームでいろいろ作っています。 研修はある程度の部分をスライドで伝える形になるのですが、チームでどのようなスライドを作るのかを考えるにあたり、自分の「スライドを作り方」を言語化する必要がありました。 自分がどういうことに…

Blogsync v0.12.0 で API キーが環境変数で指定できるようになっていた

本 Blog は Github 上で管理し、PUSH したら投稿されるようになっています。 ここで課題になっていたのは、はてな Blog 投稿用の API キーの管理でした。というのも、Blogsync は API キーを YAML に直書きする必要があったためです。 v0.12.0 の Release No…

VS Code で特定ディレクトリを検索対象から除外する

様々なところで terraform init しまくっていたら、.terraform ディレクトリが散在するようになり、VS Code での検索に支障を来すようになりました。 このため、.terraform ディレクトリ配下を検索対象から除外したい。 VS Code では、search.exclude を設定…

git log で特定日時以降に変更したファイル一覧を取得する

git

Git を用いて、特定日時以降に更新されたファイルの一覧を取得したい要件がありました。 これを素直に取得する方法がなさそうだったので、以下のようにして代用しています。 $ git log --after 2020/07/01 --name-only --pretty=oneline --full-index | grep…

特定の順序で Terraform を実行したい

Terraform で State を分割すると、たくさんの root module ができます。 ある root module が別 module の remote state 参照を持つとき、module 間に依存関係が生じます。 僕たちはこの依存順に terraform を apply しなければなりませんし、その逆順に de…

配下の全ディレクトリで同じ操作を行いたい

カレントディレクト配下にある全ディレクトリで同じ操作をする時って多いのではないでしょうか。 例えば作っている terraform 群が要求する Provider のバージョンをあげて、全部 terraform init して回らないといけなくなったりとか。 find と xargs を組み…

Alpine ベースのコンテナイメージで AWS CLI v2 を使う

CI/CD で以下のコマンドを実行したかっただけでした。 $ aws ecr get-login-password | docker login --username AWS --password-stdin [AWS Account ID].dkr.ecr.ap-northeast-1.amazonaws.com/my-repository このコマンドラインには 2 つの実行バイナリが…

ECR への PUSH を行うための最低限のIAM Policy

Cointaner Image の CD 用に ECR へ PUSH するための最低限の IAM Policy がどうなるのかを検証してまいりました。おそらくは以下が最低限の IAM Policy になりそうです。 このうちのどの action を許可しない場合であっても、イメージの PUSH はエラーにな…

CodePipeline 失敗時のトラブルシュートのノウハウ

CodePipeline + CodeDeploy で ECS へのデプロイメントパイプラインを組んでいたんですが、このパイプラインが様々な理由で失敗します。 マネジメントコンソールで確認しても、Internal error 的な文言しか表示されず、とにかくデバッグがしんどいです。 つ…

CodePipeline から別アカウントの ECR ソースを参照する

CodePipeline から別アカウント上の ECR を Source Action から指定したい。 これはそれなりに存在するユースケースではないでしょうか。 この実現にマジで苦しんだので、葛藤の記録を残しておきます。 概観 バケットポリシー CodePipelie からクロスアカウ…

AWSクロスアカウントでTerraformを実行する

以下のエントリで記載したように、AWS 上においてはマルチアカウントで環境を構成することがベストプラクティスとされています。 このエントリでは、Custodian アカウントという概念が登場しました。これは結局 IAM ユーザやグループを 1 つのアカウントにの…

GitLab CI/CD で textlint を実行する

きちんとしたガイドを書く、そしてそのガイドを多人数で変更するというケースでは、文章の揺れ等をで きるだけ防ぎたい。 このため、GitLab CI/CD で textlint を導入したい。 textlint 用 Docker Image の作成 フィルタ ルール Docker Image の build、push…

markdown を lint する

様々なドキュメントが Markdown で表現される今日このごろです。 多数の人が関わりつつドキュメントを成長させるのであれば、 Markdown ドキュメントについてもフォーマットを統一させたいものですね。 Markdown についても当然のように linter があるので、…

module に対する terraform validate が "The argument "region" is required, but was not set." エラーで失敗する

GitLab CI/CD を使い、自作の AWS 用 terraform モジュールに対して terraform validate をかけようとすると、以下のエラーメッセージが出て失敗しました。 Error: Missing required argument The argument "region" is required, but was not set. 原因 対…

GitLab CI/CD で terraform ファイルに tflint をかける

Terraform のスクリプトにも lint を自動で実行できるようにします。 lint ツール TFlint 設定の渡し方 GitLab CI/CD への組み込み 今後 lint ツール Terraform には terraform validate コマンドがあり、設定上のかなりの問題を検知してくれます。 一方で t…

AWS におけるマルチアカウント構成の動向

aws

AWS で環境を構築する際はマルチアカウントになることが多い、これは理解していたつもりでした。 stg 環境と prod 環境は AWS アカウントごと分ける。dev 環境も分ける。 しかし、世の中のベストプラクティスはもっと先を行っていました。 なぜアカウントを…

AWS Organizations を使って AWS アカウントを自動で作成する

AWS においてはマルチアカウント戦略が重要とされています。 たとえば、開発環境/ステージング環境/本番環境といった各環境は、セキュリティ、ガバナンス面で分離すべきです。 メンバーの権限管理がすっきりする 特定の環境の作業が他環境に影響しない この…

Terraform の S3 backend の構築と locking (排他制御) の有効化

前提 その前に state とは何か state の S3 管理 backend となる S3 を Terraform 管理のインフラと一緒に管理して良いのか backend の構築 backend の適用 (locking なし) backend の適用 (locking あり) 前提 Terraform によってインフラをチームで管理し…

Terraform の型と面白そうな Tips

Terraform の型 Primitive Types Complex Types Collection Types Structural Types null 興味深い機能 map の key に参照が使える パスの参照 Python の内包表記的な for splat expression String Template: if 文/for 文 Terraform の型 全部で 7 種類あり…

「実践Terraform AWSにおけるシステム設計とベストプラクティス」を読んだ

ぼくは新しい技術を学ぶときは、たいてい以下の戦略を取ります。 公式ドキュメントを読む 当該技術に対する書籍を読む 仕様があれば、その仕様 (RFC 等)に目を通す。ただし心が折れない程度に。 目的は以下 2 つの要素の獲得です。 体系だった技術知識の獲得…

Terraform + AWS ことはじめ

Terraform については 2 年前に触ってから完全に放置してしまいました。 いろいろあって、まずは AWS 上で色々構築していくことになるので、今日から頑張っていきたいです…。 aws-cli terraform とにかくローカル PC に aws-cli、terraform を入れたくない。…

「GitLab 実践ガイド」を読んだ

GitLab 実践ガイドを読みました。 GitLab実践ガイド impress top gearシリーズ作者:北山 晋吾発売日: 2018/02/01メディア: Kindle版 全体を通して プロダクトの長所 オールインワン CI/CD SaaS でもオンプレでも 最後に 全体を通して GitLab はこれまで使っ…

「AWS IAM のマニアックな話」を呼んだ

AWS 初心者なんですが、今後 AWS とガチで向き合う必要が出てきました。 AWS といえば、まず押さえるべきは IAM でしょうということで、「AWS IAM のマニアックな話」を読みました。 全体的な感想 IAM の運用 踏み台アカウントという概念 今後 全体的な感想 …

curl で telnet を代替する

TCP レベルの疎通確認のときにはよく telnet を使っていたのですが、最近いろいろな OS で telnet が入っていません。 こういうときに、実は curl で telnet を代替できます。 telnet をプロトコルとして指定するだけです。 以下の例では、google に 80 番ポ…

jq を使って CSV を出力する

jq

Qiita は API を提供しており、そこで抽出できるデータを Excel 化したかった。 これは jq の @csv を使うと容易に実現できます。 たとえば、ぼくの 9 月から今までの投稿のうち、興味がある部分を JSON Array として引き抜いたとします。 $ curl -sH "Autho…

なぜ仮想プレスリリースを書くのか、何を書くのか

新しいことを始めようとしていて、仮想プレスリリースを書くことを求められています。なにぶん初めての経験ではあるので、なぜ仮想プレスリリースが必要なのか、今後の自分のためにきちんと明文化しておきます。 仮想プレスリリースを書く目的 仮想プレスリ…