2020-01-01から1年間の記事一覧
先日、新しいECS ClusterをTerraformで作った。EC2インスタンスは1台のみだが、Launch Configurationを用意してAutoscaling Groupを作成した。 resource "aws_launch_configuration" "ecs_cluster" { name = "ecs_cluster" image_id = data.aws_ami.aws_opti…
普段xargsをよく使っているが、いつも -I オプションで引数をループさせる用途であることがほとんどなので、xargsはループ用のコマンドだと思いこんでいた。そのため先日、別の人のシェルスクリプトを読んだときに混乱してしまったのでまとめておく。 オプシ…
本番システムで使われているAWS Lambda functionが失敗した際にPagerDutyでアラート通知を受けたいと思い、開発用のLambda functionにdead_letter_queueを設定し、そのSNS queueにPagerDutyのエンドポイントをsubscribeさせた。 しかし、Lambda functionを失…
ArgoCDをローカルで動かしてみたいと思い、以前使ったKubernetes講座のmanifestファイルでやってみた。 github.com まず、以下のチュートリアルのステップ4まで行い、 argocd namespaceでArgoCDのサーバを起動させる。 argoproj.github.io その後、 argocd n…
10月末にCKAD (Certified Kubernetes Application Developer) を受けて合格した。試験に受かるのは久しぶり。 受験の経緯 仕事で扱っているシステムがKubernetes上で動いており、自身のKubernetesの知識不足に危機感を持っていたのがきっかけ。今まではその…
Cluster内にIngressを立てたがうまく動作しないことがあり、デバッグのためPod内のアプリケーションにアクセスしたいと思った。今までは、テスト用のPodを立ててその中からcurl等でリクエストを送っていた。 kubectl run test-pod --image nginx -- /bin/sh …
KubernetesのPod内の環境変数が正しく設定されているかを確認しようとして、以下のようにしたところ、何も出力されなかった。 $ kubectl exec -it pod_name -- /bin/sh -c "echo $VAR_NAME" Podの中に入って確認すると正しく出る。 $ kubectl exec -it pod_n…
疎通確認をする際はcurlかwgetを使うことが多かったが、CKADの講座で講師がnetcatを使っているのを見て調べてみた。 netcatはサービスとの通信を確認できるコマンドであり、たいていのLinuxディストリビューションに同梱されている。KubernetesのPodに入って…
最近システムのリリースフローの自動化を進めることが多い。先日はLambda関数の更新の自動化を行った。この関数は環境変数を持っており、これを頻繁に更新する必要があった。 新しい環境変数をどのように渡すかが最も難しいポイントだったが、この環境変数は…
CKAD対策で学んだtips。 Kubernetes上のリソースを作る際、複雑な設定の場合はmanifestファイルを書かなければいけない。しかしYAML形式で記述を行うのはとても時間がかかるうえ、それぞれのリソース種別ごとの記法を全部は覚えられない。公式ドキュメントか…
先日いつものようにプルリクエストを作ったら、GitHub Actionsのworkflowが全く動いてくれなかった。GitHub ActionsのSpending limitやGitHub自体の障害も疑ったが、原因はもっと単純なものだった。 yamlファイルでは、 on 節を以下のように記述していた。 o…
GitHub Actionsでworkflowを書くとき、imageをビルドしてECRにpushする処理を書く機会が多い。今までは以下の様に書いていた。 jobs: build: name: Build and push Docker image runs-on: ubuntu-latest env: IMAGE_NAME: ${{ secrets.CONTAINER_REGISTRY_PA…
KubernetesのJobのうち、backOffLimit を超えてしまい失敗したもののみを抽出して削除したいときがあった。Jobの結果は type フィールドに入っており、値は Complete か Failed のいずれか。また、Jobが実行中の場合 type フィールド自体が存在しない。 kube…
AWSでロールを扱う際、iam:PassRole と sts:AssumeRole の両方が説明に出てくることが多い。どちらもロールを使えるようにするために必要なアクションだが、いまいち違いがわからなかったので改めて調べてみた。 iam:PassRole まず iam:PassRole は、ユーザ…
AWSのポリシーを作るとき、 Condition 句を使って特定のプリンシパルをポリシー適用の例外として指定したい時がある。 Condition 句の中で指定した条件は、リクエストに含まれるGlobal Condition Keyと照らし合わせて確認され、リクエストが許可されるかどう…
先日リモート環境から、terraformで管理しているAWSのresourceを更新する作業を始めようとして terraform init したところ、アクセスができずに詰まってしまった。 $ terraform init Initializing modules... Initializing the backend... Error refreshing …
kubectlを使っていると、current-contextの確認やnamespaceの切り替えなどでコマンドを打つのが面倒になってくる。こんなときはプラグインをインストールするのが一般的だが、その前に素の状態でできることはないか探してみたところ、kubectl自体に補完機能…
業務ではAWS Lambda FunctionをTerraformのModuleで管理しているが、先日Lambda Functionの1つに失敗時のアラートをつけるべく、dead letter queueを設定したいと思い立った。Terraformでは dead_letter_config Argumentを使うことで設定することができる。 …
www.cncf.io CKADを受験しようと思い練習をしているが、YAMLファイルを扱うのが面倒になってきた。特にインデント調整にかなり精神力を削られる。 時間が足りないことで有名な試験なので何か便利な拡張ライブラリを探したいところだが、CKADの場合実行環境が…
先日、localstackの存在を知った。このライブラリはAWSの各サービスをローカルで再現できるもので、AWSを使った機能を開発環境下でテストするのに役立つ。 github.com 一部のサービスは有料版でないと使えないが、今回は無料で使えるS3の機能を試してみた。 …
他の人が書いたスクリプトの中で、 git clone git@ssh.github.com:user/repo.git のように ssh.github.com からcloneする処理があったが、なぜかこれに失敗して困った。 error: couldn't make loader for git@ssh.github.com:user/repo.git: trouble cloning…
社内勉強会で教えてもらった内容。 Terraformで既存のresourceの名前を変えたいとき、普通にtfファイル内でresourceの名前を変更するだけだと、resource全体が作り直し(destory->create)されてしまう。 例えば以前の記事で使った aws_internet_gateway resou…
先日MySQLにログインしたとき、付与されているはずの権限がなくクエリを投げられなかったことがある。ユーザ名は確かに合っていたのだが、問題はログイン元のホストにあった。 MySQLのユーザに権限を付与するとき、以下のようにユーザ名だけではなくホストも…
「コンテナ時代のWebサービスの作り方」を読みながらTerraformを触ってみている。 booth.pm その中で、Terraformを使う例としてVPCとEC2を作成する項目があった。本ではまず1つのtfファイルに両方のリソースをまとめて記述した後、ec2とvpcでモジュールを分…
bashのスクリプトを書くとき、直前のコマンドの戻り値を見て条件分岐させたいことがよくある。戻り値は $? で取得できるのだが、このコマンドはいかなる場合でも直前のコマンドしか考慮してくれない。 例えば、以下は $? の誤った使い方である。 which aws |…
Kafka Dockerを使ってKafkaの実行環境を作っていたが、コンテナに接続してtopic一覧を表示しようとした際に、チュートリアルにある環境変数 $KAFKA_HOME と $ZK がどこで設定できるのかわからず詰まってしまった。 $KAFKA_HOME/bin/kafka-topics.sh --descri…
Javaで特定のクラスに強く紐づく小さなクラスがあるとき、それをネストさせている書き方と、ネストさせずに1ファイル内に並列して置く書き方の両方をよくみる。どちらを使うと良いのか迷うことが多かったので、Effective Javaの項目24にあたってみた。 www.a…
コマンドラインでCSVファイルを出力し、パイプで渡して処理を行うことが多いのだが、その際ヘッダ行が邪魔になることが多い。例えば以下のようなCSVファイルの場合、データ集計をする際にヘッダ行は必要ない。 $ cat filename.csv 会員番号,職業,スコア 1000…
Dockerのcontainer上にS3等の外部サービスからファイルをダウンロードできないか考えたが、そもそもVolumeを使わない場合にContainer上で書き込みを行うとどこに保存されるのかよくわかっていなかったので、ドキュメントに当たり直してみた。 まずimageとcon…
普段からエディタとしてVimを使っているが、ショートカットがなかなか身につかない。不便だと思ったときはその都度調べているので断片的な知識はあるが、もっとテクニックを体系的に身に着けて編集作業の効率を上げたいと思い、この本を読んでみた。 www.ama…