direnvでAWSの名前付きプロファイル($HOME/.aws/config)をディレクトリに沿って自動的に指定する

1.この記事で達成したいこと $HOME/.aws/configに書かれた名前付きプロファイルをイイ感じに使いたい ディレクトリごとに指定できるようにしたい AWS_DEFAULT_PROFILEを都度exportするのは面倒なので避けたい $ export AWS_DEFAULT_PROFILE=user1 2.前提/環境情報 $ grep VERSION= /etc/os-release VERSION="20.04.3 LTS (Focal Fossa)" $ direnv --version 2.21.2 3. どうやるか? direnvを使う direnvとは、ディレクトリに移動した際、自動で記載されている環境変数を読み込んでくれるもの direnvを使うことでできること ディレクトリ/環境に適したAWS_PROFILEを指定すること 前提として、$HOME/.aws/configに以下のように書かれていること [default] region=us-west-2 output=json [profile user1] region=us-east-1 output=text 出所:名前付きプロファイル - AWS Command Line Interface 4.使い方 aptでdirenvをインストール ※Installation | direnv では紹介されていなかった。。 Setup | direnv に従って ~/.bashrc を編集 $ apt search direnv | tail WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Full Text Search... direnv/focal,now 2.21.2-1 amd64 [installed] ## <-- direnvがあった Utility to set directory specific environment variables extrace/focal 0.7-1 amd64 trace exec() calls system-wide ondir/focal 0.2.3+git0.55279f03-1 amd64 Automate tasks specific to certain directories in the shell $ sudo apt install direnv $ tail -n 1 ~/.bashrc eval "$(direnv hook bash) direnvを使いたいディレクトリ直下で、direnv edit . を実行し、使いたいプロファイルを書く $EDITORの値がないとエラーを引いたら、export $EDITOR=vimなどと$EDITORの値をセットすればok $ direnv edit . $ cat .envrc export AWS_PROFILE=user1 $ direnv edit . direnv: $EDITOR not found. direnv: error exit status 1 $ echo "export $EDITOR=vim" >> ~/.bashrc && source ~/.bashrc direnv allow で読み込みができるようにする $ direnv allow direnv: loading /path/to/.envrc direnv: export +AWS_PROFILE 動作確認 $ cd /path/to direnv: loading /path/to/.envrc direnv: export +AWS_PROFILE ## ディレクトリを離れると $ cd .. direnv: unloading 5.参考 名前付きプロファイル - AWS Command Line Interface Installation | direnv Setup | direnv

January 12, 2022 · 1 min · gkzz

sensitve=true な値を terraform output で確認する方法

1.この記事で達成したいこと sensitve=trueな値をterraform outputで確認したい 1-1.お悩みポイント そもそもsensitve=trueとしている理由は、terraform applyやterraform outputする際にはCLI(ターミナル)上では出力させたくないから なので、terraform applyやterraform outputする際には表示されないのが正しい! とはいえ、確認したいときはある。さて、どうするか、、??? $ terraform output aws_iam_smtp_password_v4 = <sensitive> sensitive=trueの技術的仕様はterraform.tfstateに記載されている値のうち、出力させないそれらを指定するというもの なので以下のように確認することはできるが、チョット煩わしい。シュッとやりたい。 $ cat terraform.tfstate | jq -r .outputs { "aws_iam_smtp_password_v4": { "value": "xxxxxxxxxxxxxxxxxxxxxx", "type": "string", "sensitive": true } } このような都合のいい、「ワガママ」な事情をよしなに汲み取ってterraform outputで確認するというのが本記事の目的 2.前提 Terraformのインストール方法を始めとする初期設定は終えているものとして話を進める 今回出力したくないセキュアな値は ses_smtp_password_v4 とする サンプルコードは以下のとおり $ cat main.tf resource "aws_iam_user" "dummy" { name = "dummy" path = "/dummy/" } resource "aws_iam_access_key" "dummy" { user = aws_iam_user.dummy.name } output "aws_iam_smtp_password_v4" { value = aws_iam_access_key.dummy.ses_smtp_password_v4 sensitive = true } 3.環境情報 Terraform実行環境 $ grep VERSION= /etc/os-release VERSION="20.04.3 LTS (Focal Fossa)" $ terraform version Terraform v1.1.0 on linux_amd64 + provider registry.terraform.io/hashicorp/aws v3.70.0 4.sensitive=trueとしてterraform applyするとマスクされることを確認 $ terraform apply Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_iam_access_key.dummy will be created + resource "aws_iam_access_key" "dummy" { + create_date = (known after apply) + encrypted_secret = (known after apply) + encrypted_ses_smtp_password_v4 = (known after apply) + id = (known after apply) + key_fingerprint = (known after apply) + secret = (sensitive value) + ses_smtp_password_v4 = (sensitive value) + status = "Active" + user = "dummy" } # aws_iam_user.dummy will be created + resource "aws_iam_user" "dummy" { + arn = (known after apply) + force_destroy = false + id = (known after apply) + name = "dummy" + path = "/dummy/" + tags_all = (known after apply) + unique_id = (known after apply) } Plan: 2 to add, 0 to change, 0 to destroy. Changes to Outputs: + aws_iam_smtp_password_v4 = (sensitive value) Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes 略 Apply complete! Resources: 2 added, 0 changed, 0 destroyed. Outputs: aws_iam_smtp_password_v4 = <sensitive> # <-- マスクされている!(これでいいんだけど実際ちゃんと入っているか確認したい!!) 4-1.terraform outputコマンドを実行すると・・・(再掲) sensitve=trueと指定しているのでマスクされている $ terraform output aws_iam_smtp_password_v4 = <sensitive> 5.sensitve=trueな値をシュッと確認する(cat terraform.tfstateしない) terraform outputコマンドに -json オプションを付与すればok $ terraform output -json { "aws_iam_smtp_password_v4": { "sensitive": true, "type": "string", "value": "xxxxxxxxxxxxxxxxxxxxxx" } } もちろんjqで加工することもできる $ terraform output -json | \ > jq -r '.aws_iam_smtp_password_v4 | { aws_iam_smtp_password_v4: .value }' { "aws_iam_smtp_password_v4": "xxxxxxxxxxxxxxxxxxxxxx" } もっとシンプルにterraform output -jsonの結果を絞る方法として、terraform output -json ${KEY} もある ${KEY}はoutputで指定しているもの $ terraform output -json aws_iam_smtp_password_v4 "xxxxxxxxxxxxxxxxxxxxxx $ grep output main.tf output "aws_iam_smtp_password_v4" { 6.参考 sensitive=trueな値を出力させる方法について Note: When using the -json or -raw command-line flag, any sensitive values in Terraform state will be displayed in plain text. ...

January 7, 2022 · 2 min · gkzz

【InvalidParameterValue: The same permission must not appear multiple times】aws_security_group リソースを terraform apply したときのエラーの原因と解決策

1.この記事で達成したいこと aws_security_groupリソースを使って複数のインバウンドルールを追加しようとして引いたエラーを解決する $ terraform apply 略 │ Error: error updating Security Group (sg-000000000000): error authorizing Security Group (ingress) rules: InvalidParameterValue: The same permission must not appear multiple times │ status code: 400, request id: 000000000000000000 │ │ with aws_security_group.dummy-sg, │ on main.tf line 23, in resource "aws_security_group" "dummy-sg": │ 23: resource "aws_security_group" "dummy-sg" { エラーメッセージが指す23行目付近で書いていること $ view main.tf 略 23 resource "aws_security_group" "dummy-sg" { 24 name = "dummy-sg" 25 description = "dummy security group" 26 vpc_id = aws_vpc.dummy-vpc.id 27 28 ingress { 29 description = "Allow 80 from anywhere for redirection" 30 from_port = 80 31 to_port = 80 32 protocol = "all" 33 cidr_blocks = ["0.0.0.0/0"] 34 } 35 36 ingress { 37 description = "Allow 8080 from anywhere for redirection" 38 from_port = 8080 39 to_port = 8080 40 protocol = "all" 41 cidr_blocks = ["0.0.0.0/0"] 42 } 2.前提 Terraformのインストール方法を始めとする初期設定は終えているものとして話を進める 3.環境情報 Terraform実行環境 $ grep VERSION= /etc/os-release VERSION="20.04.3 LTS (Focal Fossa)" $ terraform version Terraform v1.1.0 on linux_amd64 + provider registry.terraform.io/hashicorp/aws v3.70.0 ※ terraform applyで使う要件については、後述するaws_security_groupリソースくらい。なので、ここでは割愛。 ...

January 4, 2022 · 3 min · gkzz

【読書メモ】「走ることについて語るときに僕の語ること」

1.この記事で達成したいこと 以下の本を読んだので感想や学びを残す 走ることについて語るときに僕の語ること (文春文庫) | 村上 春樹 2.本書の内容を三行で 優れた小説家には才能があるが、自分にはそういったものはなく、凡人といっていい では、凡人がどうやって小説を書き続けようか?(そもそもなぜ書くことになったのか?も触れている) それは小説を書き続ける集中力とそれを支える体力を養おうと考え、試行錯誤していく、、 3.感想 本書は、特に秀でたわけではないが続けなければならないこととの付き合い方 という普遍的な問いに対して示唆を与えてくれる。自分は先天的な才能を持ち合わせていないという境遇が分かったとしても、集中力や持続力は後天的に身につけることができる。また集中力や持続力は肉体的な衰えと抗うためにも必要だという。そういった集中力や持続力を獲得するためになんとかランニングを始め、トレーニングを続けているが、その難しさと続けるコツ、考え方のヒントが本書では散りばめられている。ぼくにとって胸に響いた箇所は以下の 2 箇所だ。 Pain is inevitable, Suffering is optional. それが彼のマントラだった。正確なニュアンスは日本語に訳しにくいのだが、あえてごく簡単に訳せば、「痛みは避けがたいが、苦しみはオプショナル(こちら次第)」ということになる。 たとえば走っていて「ああ、きつい、もう駄目だ」と思ったとして、「きつい」というのは避けようのない事実だが、「もう駄目」かどうかはあくまで本人の裁量に委ねられていることである。 走り続けるための理由はほんの少ししかないけれど、走るのをやめるための理由なら大型トラックいっぱいぶんはあるからだ。 僕らにできるのは、その「ほんの少しの理由」をひとつひとつ大事に磨き続けることだけだ。 また、本書は継続する勇気と活力を与えてくれる。文体はみずみずしく、景色が目に浮かぶよう。自己啓発書というより小説を読んでいるかのような気持ちになる。それで何かを続ける難しさと大切さを自身の経験談になぞらえて語られている。ぼくはいわゆるソフトウェア・エンジニアとしてお仕事しているのだけど、本書を読み進めていくうちに、走って、自分をシステムに見立ててパフォーマンスチューニングしたい気持ちに駆られる。(実際やったがなかなか続かない笑。) このようにぼくは本書から何かを続けること、とりわけ自分がそこまで得意ではないことを粘り強く続けることのエッセンスを学んだと思っている。とはいえ、これだけが本書から学ぶことができることではないはず。なんども読み返したい一冊である。

December 30, 2021 · 1 min · gkzz

【学び直し】ほんとうに社会人学生になってよかったのか? feat. ハッカー飯

こんにちは。gkzz (@gkzvoice) / Twitterです。本記事は社会人学生 Advent Calendar 2021の 24 日目の記事です。 実は先日、学生生活のふりかえり記事を書いています笑。 帝京大学理工学部(通信教育課程)の社会人大学生 1 年目をふりかえる | gkzz.dev せっかくなので自分の社会人学生生活について改めて向き合うこととし、表題のとおり「ほんとうに社会人学生になってよかったのか?」と批判的に捉え直すことにしました。多くの社会人学生のふりかえり記事では、社会人学生になることに対して大変など苦労する声を聞くことはありますが、結論としてはポジティブな内容が多いです。ところが、ぼくの場合はそんなことはなくて悩みながら勉強しているというのが正直なところです。社会人学生生活のネガティブな一面にもっとフォーカスした記事を読んで自分の考えを反芻させようとするも、そのような記事はなかなか見つかりません。そこで現時点での考えを後々思い出すことが出来るように、自分のために「結局自分は何を決めかねているのか?」書き留めておくことにしました。 想定読者 本記事の想定読者として以下の 2 点を挙げている。 社会人学生になろうと入学書類を集めている、社会人学生になる前の自分 晴れて大学を卒業した、社会人学生を終えた後の(、大学での学びを活かす決断をするときの)自分 というのも、「そうだ、社会人学生になろう!」と準備を進めているころに読んでいたらまた違った展開になっていたかもしれない。また「卒業してから何をするか?」について少しでも今の考えを書き留めておくことで実際にそうなったときに考える助けになるように思うからである。 後者については、後述するハッカー飯さんという Web サービスをきっかけにいただいたフィードバックであり、かつなくてはならない観点だった。他にもたくさんの方からご指摘いただいたので改めて感謝の気持をお伝えしたい。ありがとうございました! さて、はじめに本記事を書いているぼくの背景について軽く触れておきたい。というのも、ここで取り上げる話題に対する考え方は読者によって千差万別だと思うし、またそうあるべきだと思うので、あくまでもぼく個人の場合という前置きをおくためにも書いておきたい。 自己紹介 もともと経済学部卒、営業寄りの仕事をしていたが、プログラミングをする機会があり、エンジニアに転職してはや 4 年。 先日サイボウズに転職。 今年 2021 年 12 月、帝京大学理工学部の通信教育課程の 2 学年に編入学。 予想はしていたが、仕事と勉強の両立はたいへん。 またそれとは別に「ほんとうに社会人学生になってよかったのか?」とやや考えがゆらいでいる。(今回の主題はココ!) 「大事なことは卒業することではなく、卒業してから何をするか?そのために今後の自分の人生に置いてどこに専門性を置くか?決めて進むこと」であるが、それが決まらない。 卒業するという手段が目的化している。 どうして悩んでいるのか? 仕事と勉強でてんやわんや。 このままでは単位を取るだけで終わってしまうという危機感は募る。 とはいえ、微々たるではあるが、できなかったことができるようになっていく感覚はある。 「ほんとうに社会人学生になってよかったのか?」と問われるとなってよかった 「わざわざ学生にならなくても勉強はできるけれども、どうして学生をするのか?」それは勉強そのものが好きだからというのと、学歴をゲットして第三者に勉強した結果を評価してもらいたかったから。 社会人学生になって迷いはあるけど社会人学生にならなかったらまた別の迷いが出てきそう、、。 で、答えは出ていないけど「卒業してから何をするか?そのために今後の自分の人生に置いてどこに専門性を置くか?」決めるためのヒントはみつかった これまで選んできた選択が実は関連性があった。 Steve Jobs’ 2005 Stanford Commencement Address もともと経済学部に在籍していたせいか、株式投資、企業価値評価は興味がある。 理転した、しないは関係ないという見方もできるのか 「古きは潔く捨てよ」“アンラーニング”がベテランエンジニアの価値を左右する【GMO ペパボ・栗林健太郎】 - エンジニア type | 転職 type 入学する前の自分に伝えたいことを五月雨に 一般の技術書や記事、YouTube の動画など学習教材は玉石混交ではあるがあふれており、学習の機会はいくらでもある。 単位駆動でインプットが進む。 時間の使い方に制約が入ると集中できるというか集中せざるを得ない環境に追い込まれる。 関心の対象が広がった。 単位を取るために食わず嫌い精神を捨てて勉強するため、以前まで興味がなかったことに対しても関心を持つことが出来るようになり、自分の可能性を広げることができた。 勉強も学校にとらわれることなくやりたい。 勉強以外の活動もしてもいい。 たとえば、[【読書メモ】『HIGH OUTPUT MANAGEMENT(ハイアウトプット マネジメント) 人を育て、成果を最大にするマネジメント』 | gkzz.dev より。 マネージャー業務に関心・興味がないわけではなく、むしろチャレンジしてみたいなというお気持ち 興味が湧いたきっかけは以下のポッドキャストを聞いたこと 良いマネジメントとは?良いミーティングとは? w/ konifar | fukabori.fm 着地点のない内容ですが、書かない後悔よりは書くめんどくささを選び、記事にしたためました。これからもがんばるぞ〜!! ...

December 20, 2021 · 1 min · gkzz