Lapis Lazuli

technical blog for web developer

2020-01-01から1年間の記事一覧

2021年の抱負

今年も終わりに近づいてきたので、去年に続き抱負の記事を書きます。 こうして振り返ってみるとブログも1年半くらい続いているんですよね・・・すぐ書かなくなるかなと思いましたが、習慣にすると続けられるものです。 この調子で2年、3年と続けていきたいで…

【Go】エラー処理にxerrorsを使う

GO

Goでエラー処理する事は頻繁に出てくると思います。 使われるのは大体標準パッケージのerrorsを使う事が多いと思いますが、Goには準標準パッケージとしてxerrorsがあります。 最近使ってみたら良かったので、今回はxerrorsについて書いていきます。 何がメリ…

MySQLのB-Treeインデックスを理解する

MySQLのインデックスには一般的にB-Treeインデックスというものが使われています。 BTreeはインデックスのアルゴリズムなのですが、今回は何故これが一般的なのかについてです。 B-Treeとは インデックスは実テーブルのデータを素早く探す為の索引ですが、ア…

terraformのベストプラクティスとは

terraformは手軽にファイルに書いて実行できますが、しばらくするとある事で悩む事になります。 それは・・・terraform自体の構成をどうするかという事です。最初は同じファイルにどんどんリソースを定義していくと思います。それで数が増えたら種類毎にファ…

RESTfulAPIの冪等性について考える

RESTAPIの各メソッドの処理には冪等性であるべきものと、そうでないものがあります。 冪等性とは。についてはwikiさんによるとこういう事だそうです。 冪等 - Wikipedia詳しく書いてありますが、要するに「何度同じ事をしても同じ結果になるということ」です…

【AWS】DynamoDBの仕組みを理解する

AWS

最近NoSQLであるDynamoDBを使用したので、そのとき学んだことをまとめていきたいと思います。 DynamoDBの仕組み DynamoDBキーバリュー型のNoSQLになります。なのでキーを元にレコードの情報を引っ張ってくる形式になります。 比較的構造としてはシンプルなの…

【AWS】APIGatewayとlambdaをプロキシ統合で連携する

AWS

APIGatewayからlambdaを統合するときに、プロキシ統合でバックエンドに渡す方法があります。 確か去年あたりに新しくできた方法で、これのおかげでかなり楽にマッピングができるようになりました。 今回、業務でAPIGatewayを使用したのでその事を書いていき…

エンジニアのググり方

エラーとの遭遇 エンジニアとして開発をしていると、エラーなどにハマる事があります。 そのとき大半の解決方法としては、同じチームの人に聞くか、目の前のパソコンでググるか。という解決方法をとる事が多いと思います。 チームメンバーに聞いて解決するの…

APIGatewayのIAM認証

AWS

lambdaのAPI化としてよく使われるAPIGatewayですが、APIの認証を入れたいときがあると思います。 特にAWS内部への処理をする場合、誰でも叩かれたらマズいですしね。 なのでAPIGatewayには認証機能が実装されています。 一番簡単なのはAPIキーを設定して、そ…

【Terraform】DataSourceの使いどころ

インフラのコード化に使われるTerraformですが、クラウド上のリソースを管理するresource以外にもdataという属性があります。 これはデータソースというもので、簡単に説明すると実際のクラウド上には存在しないけど、Terraform内で完結するように作られるリ…

CodeBuildのキャッシュ効果がすごかった

CodeBuildのキャッシュの種類 最近CodeBuildを導入して使っていますが、ビルド時に使用するリソースをキャッシュしておく機能があります。 主に2種類のタイプがあって、S3に保存するタイプとローカルに保存するタイプがあります。 それぞれ特徴があって、利…

AWSのデプロイサービス

AWS

Fargate運用するとなると、真っ先に整備しないといけないのがデプロイ周りです。 EC2のようにローカルから送ってデプロイという訳にはいかないので、導入するのならセットで導入する必要があります。 もし現状全くCIとか使ってない環境でしたら、導入する絶…

サーバーレス設計の鉄則〜メリットを最大限に活かす〜

AWS

はじめに サーバーレスを進めるにあたって、既存のサーバーとの設計の違いで悩む事があると思います。 私も最初は「通常のサーバーだったら簡単にできるのに・・・」と思った事があります(特にログ周りとか) が、これはサーバーレスアーキテクチャに慣れて…

Fargateを使ってみた

AWS

最近のサーバーレスの流れに乗り、Fargateを導入したので、その時に気がついたことを残しておきます。 まず従来使っていたECSonEC2と比較しての違いを挙げてみます。 ネットワークモードがawsvpcのみ EC2タイプでしたらbridgeでインスタンスから接続できたの…

転職ドラフト体験記

こちらの記事は転職ドラフト体験談投稿キャンペーンに参加していますjob-draft.jp 今回は私が上記の転職ドラフトさんを利用して転職活動したときの体験記を書こうと思います。 転職ドラフトを使ったきっかけ とあるWebサイトで広告バナーを見かけたので登録…

【PHP】8.0で名前付き引数が使えるようになるかも

PHP

PHPの次のバージョンである8.0で遂に名前付き引数が使えるようになるみたいです。(まだ確定ではありませんが) これはかなり強力なアップデートなのではないでしょうか。開発効率が爆上がりです(個人差あり) そもそも名前付き引数って? かなりざっくりと…

ブログ書き始めて1年経ちました

このブログを書き始めて約1年経ったので、振り返りを兼ねて今回は記事にしてみます。 1年を振り返って ブログ開設したのが去年の7月7日でした。 最初は「エンジニアとしてアウトプットって大事だしブログでもやるかー」という気持ちで始めたのは今でも覚えて…

【Terraform】tfstateをs3で管理する

前回に引き続きterraformの話題です。 terraformにはリソースの状態を管理しているtfstateというファイルがあります。 これはtfファイルとの差分を見て、 terraform plan したときに追加や変更、削除などの判断をしています。 なのでこれを消してしまうと管…

Terraformはじめました

はじめに 最近terraformを会社で導入しました。 インフラをVPCから新規で一式用意することになって、せっかくなのでインフラのコード化をしてみようかなと思いました。 しばらくしか使わない可能性がありますし、コードで管理していたほうが後々便利だなと思…

【AWS】ECSの動的ポートマッピングを使う

AWS

どうもこんにちは。 最近はECSを使って本番構築しているので、しばらくはその時に学んだ内容を書いていきます。 今回は動的ポートマッピングについてです。 動的ポートマッピングとは ECSのサービスがホスト側のポートを動的に割当する機能です。 何故これが…

【AWS】SSMパラメータストアに格納した環境変数をEC2で利用する

AWS

前回に引き続き、SSMを利用して実際に使用した事を書き記しておきます。 今回はEC2の環境変数をパラメータストアから取得しようという話です。 EC2で何故SSMを使うのか ECSでは普通にSSMを参照出来るのに、EC2だけサーバー内に直置きだからです。 せっかくAW…

【AWS】パラメータストアを使いこなす

AWS

SSMにはインスタンスを管理する他にパラメータを管理するパラメータストアがあります。 Fargateとか使用するのだったらほぼ必須となってくると思いますが・・・ 最近EC2で使用する機会があったので今回はパラメータストアについて書きます。 パラメータスト…

【Go】ロジックより型から読み取れるようにする

GO

最近、コードレビューで突っ込まれて「なるほどな〜」と思った事があります。 今まであまり意識したことは無かったのですが・・・型からコードの意味を読み取れるようにする。ということです。 熟練のエンジニアの方からしたら「当然だろ」と思われるかもし…

【AWS】FargateがEFSに対応

AWS

最近、Fargateに大きなアップデートがありました。 プラットフォームver1.4というものですが、この中で特に重要なのがEFSに対応したことです。aws.amazon.com今まではFargateはタスクやサービス間でファイル共有するときは少し面倒でした。 EC2タイプで起動…

【AWS】ECSを検討する際に必要なこと

AWS

ちょうど機会があったので、今回はECSについて書きたいと思います。 ECSのタイプの違い ECSは超ざっくりと言うと、EC2上でコンテナを動かしているサービスになります。 「それだったらEC2上で動かせばいいのでは?」という疑問が生まれてくるかと思いますが…

【AWS】CloudWatchAgentをSSMで設定する

AWS

CloudWatchメトリクスを使用する為に必須のエージェントのインストール。 今までは設定をEC2に入ってやってましたが、さすがに辛いので今回はSSMを利用してやることに変えました。 せっかくAWS使っているので、使えるものは使って効率化しないと損ですよね。…

【DB】トランザクション分離レベルには気をつける

DBのパフォーマンスが問題になり、かつトランザクションを使用している時には、トランザクション分離レベルがパフォーマンスを落としている可能性があります。 普段はここを意識する事は少ないと思いますが、最近パフォーマンス調査で触れる機会があったので…

【DB】DB負荷はフラグメンテーションを疑え

最近インフラDevOpsしかやってないので今回もそっち方面のネタで・・・DBが高負荷になってサービスのパフォーマンスが著しく落ちるというのは、Webサービスを運用しているとよくある事だと思います。Webサーバーがボトルネックになることもあるのですが、大…

【Go】newは(ほぼ)構造体にしか使わない

GO

goでmakeと並んで使うnew。 makeは参照型のみでしたが、makeと違ってあらゆる型に使えます。 対象のポインタを取得するのに使う訳ですが、実際の開発用途としては構造体にしか使いません。理由としては、構造体を値型のまま宣言して使う事がないからです。 n…

DevOpsインフラエンジニアになりました

4月から新職場で仕事始めましたが、結構以前とはやってる事がガラリと変わりました。 まずPLっぽいポジションになりました。 サービス運用の責任者として、アーキテクト全般を手掛けていきます。 具体的にはDevOpsエンジニアということになるのでしょうか。…