ksaitoの日記

日々試したことの覚え書き

サーバ証明書を取得する方法

自己署名を使っていたりProxy環境の場合、HTTPSのアクセスでSSL certificate problem: self signed certificate in certificate chainという感じのエラーに遭遇することがあります。 サーバが既知のものであるとわかっている場合、下記のコマンドで証明書を…

Windowsのパッケージ管理をChocoletyからscoopに変更

Windowsのパッケージ管理としてChocoletyを使ってきました。 今日から、scoopに切り替えます。 PowerShellで、下記のコマンドでインストールできます。 Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') iwr -u…

terraformでキーペアを作る

terraformで普段使っている公開鍵でキーペアを作ります。 $ cat -n provider.tf variable.tf local.tf main.tf 1 provider "aws" { 2 profile = "terraform" 3 region = "ap-northeast-1" 4 } 5 variable "key_name" { 6 default = "mykey" 7 } 8 variable "…

terraformでデフォルトVPCを扱う

ちょっとした、検証をする場合に、都度、VPCを作りたくないので、デフォルトVPCを使いたいことがよくあります。 terraformでデフォルトVPCのVPCIDを参照するには、dataを使うのが良さそうです。 コードの取得 下記のコマンドでサンプルコードを取得します。 …

シェルの未定義変数

bashで未定義な変数があった場合、下記のように処理していました。 $ cat test1.sh #! /bin/bash VAR1=$1 if [ -z "$VAR1" ] then echo needs arg1 exit 1 fi echo ok $VAR1 下記のように動作します。 $ ./test1.sh needs arg1 $ echo $? 1 $ ./test1.sh aaa…

画面ショットを取る

画面ショットを取る方法をいつも忘れてしまうのでメモしておきます。 範囲 Mac OS Windows 10 範囲指定 Shift + Command + 4 Win + Shift + S 指定のウィンドウ N/A Alt + Print 全画面 Shift + Command + 3 Shift + Print Mac OSは、controlキーを追加する…

既存のVPCをterraformで扱う方法について考えました。 既存のVPCの情報をインポートしてterraform管理下に置く方法は、たくさん見つかりましたがVPCを扱う権限がなかったり、管理されたVPCを使うだけというケースでは、dataを使うのが良さそうです。 使い方 …

terraformのtfファイル

terraformのtfファイルのお作法について考えました。 ファイルの分割 terraformは、カレントディレクトリのtfファイルを読み込みます。 ファイルの分割やファイル名の付け方は、開発者に委ねられているので、下記のようにすることで、どこに何があるか見通し…

docker cp の代替え

docker cp でコンテナからファイルを取り出す場合、パスやファイルパーミッション、オーナによって失敗することがあります。 取り出す場合は、下記のようなdocker exec と tar を使ったほうがいいかもしれません。 対象を下記のコマンドで確認します。 TARGE…

Makefileで複数の必須パラメータをチェックする方法

やりたいこと 下記のようなMakefileがあります。 target: @echo PARAM1=$(P1) @echo PARAM2=$(P2) 実行するとパラメータのP1とP2を処理に組み込むことができます。 $ make PARAM1= PARAM2= $ make P1=aaa PARAM1=aaa PARAM2= 2つのパラメータが指定されなか…

AWS EKSへのアクセス

EKSのクラスタにアクセスするには、VPCの中にあるEC2からIAMロールで権限を付与するのが安全です。 どうしてもVPCの外からアクセスする必要がある場合は、下記のようにします。 EKS用のIAMユーザを作成 IAMでEKS専用のグループを作成しEKSの操作に必要な権限…

mavenでpomの依存関係を調べる

pomに設定したライブラリの依存関係を調べます。 mvn dependency:tree

bashの定義済み関数を確認する

下記のコマンドでbashの定義済みの関数を確認します。 declare -f 実行するとこんな感じです。 $ declare -f | head __docker_append_to_completions () { COMPREPLY=(${COMPREPLY[@]/%/"$1"}) } __docker_client_is_experimental () { __docker_fetch_info;…

コンテナ起動時にシェルだけで、環境変数でファイルを書き換える

コンテナ起動時にシェルだけで、環境変数でファイルを書き換える方法です。 下記のようなファイルを準備します。 ${VAL1}の部分を環境変数で書き換えます。 $ cat test.tmpl aaa bbb {${VAL1}} ccc $ 下記のように、コンテナ起動時に-eオプションでVAL1に書…

eksctlをコンパイルする

eksctlのソースをコンパイルしました。 golang 1.12以上の環境がなかったので、コンテナでやりました。 コンテナの準備 コンテナは、下記の通り準備しました。 golangのオフシャルコンテナには、makeやgitがインストールされているので、ほとんど手を加える…

yamlの書き換え

設定ファイルの雛形がyamlで提供されることが多くなりました。 これまでは、提供される雛形の書き換えが必要な箇所をsedで書き換えていましたが、yqを使ったほうが良さそうです。 例 aws-auth-cm.yaml AWS EKSのワーカーノードをAWSマネージメントコンソール…

jsonとyaml

jsonを使う機会が増えました。 jsonファイルから情報を取得するときに、jqコマンドが便利ですが、yamlのほうが見た目がわかりやすいのです。 jqコマンドと同じように操作できて、yamlとjsonに相互変換できるyqコマンドが便利です。 インストール 下記のコマ…

CRDのコントローラ

githubで公開されているサンプルのコントローラを動かしてみます。 sample-controllerの手順通りです。 sample-controllerのコンパイルと実行 下記のように実行します。 実行するとapi-version(v1alpha1)が見つからないとエラーが出ますが、気にせず進みま…

CustomResourceDefinitions

KubernetesのCustomResourceDefinitionsを調べました。 公式ドキュメントのCRDを、そのままデプロイしました。 $ cat resourcedefinition.yaml apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: # name must match the s…

kanikoでコンテナをビルドする

kanokoを使ってコンテナをdocker hubにpushします。 kanikoは、kubernetes上で動かしている例が多いのですが、コンテナなのでローカルのdocker環境でお手軽に動くのでは、と思ったのですが、いろいろ落とし穴がありました。 dockerhubへの認証情報 docker lo…

aws cliのTips

VPC 取得するデータ コマンド デフォルトVPCのVPCIDを取得 aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text デフォルトVPCのサブネットIDを取得 aws ec2 describe-subnets --query 'Subnets[?VpcId==`'$VPCID'`].SubnetId' -…

kubeにdockerhubの認証情報を安全に保管する

Kubernetesで認証が必要なdocker registoryを操作するためにdocker registoryの認証情報を安全に保管する方法を検討しました。 kubernetesでdocker registoryの認証情報を設定する方法は、下記の2つがあります。 kubernetes.io/basic-authにbase64エンコー…

k8sのREST API

k8sのREST APIにアクセスしてみました。 環境は、k3sを使っています。 defaultネームスペースのserviceaccountのトークンを取得してREST APIにアクセスします。 k3sは、Basic認証なのでエラーになりました。 $ TOKEN=$(kubectl describe secrets $(kubectl g…

k3sの認証

k3sの認証は、下記のようにStatic Token Fileが使われているようです。 設定ファイルは、下記のように/var/lib/rancher/k3s/serverにありました。 $ docker-compose exec server cat /var/lib/rancher/k3s/server/cred/passwd | grep $(grep password ~/.kub…

git configで複数のユーザを切り替える

これまでの方法 gitで複数のユーザを切り替えるのにgit config --localを使って設定していました。 この方法は、切り替え忘れはないのですが、新規にリポジトリをcloneする毎にgit configを実行する必要がありました。 includeIfを使う方法 ghqと~/.gitconfi…

CodeBuildのローカル実行

CodeBuildのローカル実行がうまく動きませんでした。 AWS CodeBuild がローカルのテストとデバッグをサポート 手順に従ってビルドコンテナをビルドして、ヘルパーシェルをダウンロードして、実行してみると下記のエラーがでます。 $ ./codebuild_build.sh -i…

カレントのソースコードをzipに固める

AWSのCodeシリーズは、S3のバケットにzipで固めたソースをアップロードが基本のようです。 カレントディレクトリのソース一式をsrc.zipにします。 zip -r src.zip . -x .git/\* -x \*~

VPCエンドポイントの性能

S3のVPCエンドポイントとNAT Gateway経由の性能差です。 1つ目がVPCエンドポイント経由で0.664ms、NAT Gateway経由が3.097msと圧倒的にVPCエンドポイントが早かった。 [ec2-user@ip-10-0-10-188 ~]$ sudo tcptraceroute s3.ap-northeast-1.amazonaws.com 44…

テンプレートに環境変数を埋め込む。

Dockerコンテナを作るときに環境変数を使ってテンプレートから設定ファイルを作成します。 やりたいことは、次の2つなのですが、手軽な方法が見つかりません。 環境変数が設定されていたら、それを使う 環境変数がなければ、デフォルト値を使う 結局、ansibl…

kubectlのデフォルト環境

kubernetesで複数のクラスタを作成すると、kubectlコマンドで操作対象にするクラスタやネームスペースを選択するのが煩雑になります。 kubectl config set-contextでコンテキストにクラスタとネームスペースの組み合わせに名前をつけて切り替えられるように…