Serverless,ECS(Fargate)自動デプロイ環境の構築

Posted 24. May 2021

Infrastructure #AWS #Terraform #Serverless #CICD #Lambda #Laravel

デプロイを自動化するのがMustになりつつありますが、なかなか完璧な自動デプロイ環境を作るのは難しいなーと感じています。

で、最近、所属会社の経営層へのプレゼンのネタとして、中途半端にデプロイ自動化しているプロジェクトを、全リソース自動デプロイ化したら面白いんじゃね?という点で色々検証してみましたので、それについての記事になります。 ...


READ MORE

Time to read 5 min

AWS Cloudwatch LogsのCLIビューワを作った

Posted 23. May 2021

Programming #Rust #AWS #Cloudwatch #CLI

ブログ更新サボってる間に色々ネタがたまってしまったのでちょこちょこ放出していきます。

いくつか作ったツールなどありますので、しばらくはそのあたりの紹介だったり、最近開発リーダー(PLじゃないよ)周りの仕事でアプリ設計だったり新しめのFWを使ったりしてるのでその辺の知見等も書けたらと思います。 ...


READ MORE

Time to read 3 min

Lambdaのローカル開発環境とCI/CD構築(coverageも)

Posted 15. November 2020

Infrastructure #Rust #Github #TravisCI #Codecov #Lambda #AWS #rusoto

Lambdaをサクサク作りたい

最近実務でもプライベートでもLambdaを使う機会が多いのですが、毎回悩むのが開発環境とCI/CD。

ちょっとしたLambdaならブラウザコンソール上のエディタを使って作るとか、zipで固めるとかでいいんですけど、それなりに大きなLambda関数だとやっぱり ...


READ MORE

Time to read 12 min

【Rust】as_bytes()でcannot borrow as mutable(E0596)エラー

Posted 30. October 2020

Programming #Rust #trouble-shooting

cannot borrow data in a `&` reference as mutable

共通鍵関連で、DES暗号化をRustで実装しているんですが、そのときにちょっとハマりかけたのでメモ。

fn main() {
    let mut src = "abc".to_string();
    let mut s = src.as_bytes();

    println!("{:08b}", &s[0]);
    set_bit(&mut s, 0);
    println!("↓");
    println!("{:08b}", &s[0]);
}

fn set_bit(bytes: &mut [u8], bit: usize) {
    bytes[bit / 8 as usize] |= 0x80 >> (bit % 8);
}
Code 1: 問題となったコード

処理自体は単純で、文字列をbyte配列に変換後、指定されたビットを立てるような感じです。

...

READ MORE

Time to read 1 min

Lambciとimg2lambdaとserverlessでLambdaのデプロイフローを構築する

Posted 2. September 2020

Infrastructure #AWS #Lambda #lambci #img2lambda #PHP #CustomRuntime #serverless

Lambdaのローカル環境

これまでLambdaを構築する際には、ソースコードを決め打ちで書いてzipで上げたり、コンソール上のエディタでポチポチ開発していたりしてました。

PythonとかNodejsとかなら、それでも簡単なAPIくらいなら作れるのですが、ちょっと複雑なことになったり、PHPみたいにCustom Runtimeを使いたい場合とかは、何度もデプロイし直してトライアンドエラーするのは効率が悪いです。 ...


READ MORE

Time to read 6 min

【Typescript】axiosのレスポンスはきちんと型チェックしよう

Posted 12. August 2020

Programming #typescript #axios

Axiosでエラー

Axiosで外部APIを叩いてデータを取得したいと思い、下記のコードを書いたとします。

import axios, { AxiosPromise } from "axios";

interface CatApiResponse {
  name: string;
  age: number;
  parents: string[];
}

const client = axios.create({
  baseURL: "https://example.com/api/v2/",
  headers: {
    "Content-Type": "application/json"
  }
});

const fetchAllCat = (): AxiosPromise<CatApiResponse> => client.get("cat");

const hoge = () => {
  const data = fetchAllCat();
  data.then((data) => {
    data.data.parents.map((parent) => {
      console.log(parent);
      return "hoge";
    });
  });
};
Code 1: AxiosでAPIを叩いて情報を取得するコード例

IDEで型推定を確認すると、確かに CatApiResponse になっている。

...

READ MORE

Time to read 1 min

EmacsのLSP-modeの動作を軽くする

Posted 11. July 2020

Editor #Emacs #lspmode #performance

EmacsのLSP-modeは非常に快適で、言語サポートの追加も簡単にできるので重宝しているのですが、動作がカクついたりしてストレスになる場合がありました。ドキュメントを確認したところ、パフォーマンスチューニングの方法があったのでまとめておきます。

いざチューニング

今回対応するチューニングが正常に適用されているかどうかは、 M-x lsp-diagnose で確認できます。

...

READ MORE

Time to read 3 min

Goのhot reloadにgo-taskを使ってみる

Posted 8. July 2020

Programming #go #task #docker

Goでhot reloading

作っているアプリのサーバサイドをGOで書いているので、Realizeでhot reloadを実現しようと思ったのですが、 GO111MODULE=off にしないとgo getできなかったり、いざdocker-composeで realize start --run しようとすると下記のようなエラーが出たりと色々あれだったので、他に使えそうなパッケージが無いか探してみました。

...
[01:09:01][SRC] : Running..
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x4cf2fb]

goroutine 8768 [running]:
os.(*Process).signal(0x0, 0xad7a20, 0xe34878, 0x0, 0x0)
      /usr/local/go/src/os/exec_unix.go:56 +0x3b
os.(*Process).Signal(...)
      /usr/local/go/src/os/exec.go:131
github.com/oxequa/realize/realize.(*Project).run.func1(0xc000175698)
      /go/src/github.com/oxequa/realize/realize/projects.go:581 +0x5c
github.com/oxequa/realize/realize.(*Project).run(0xc0001fa000, 0xc000133ab8, 0x7, 0xc000342300, 0xc000110540, 0xad2c20, 0xc00011c8d0)
      /go/src/github.com/oxequa/realize/realize/projects.go:646 +0xc2d
github.com/oxequa/realize/realize.(*Project).Reload.func3(0xc0001fa000, 0xc000342300, 0xc000110540)
      /go/src/github.com/oxequa/realize/realize/projects.go:262 +0x147
created by github.com/oxequa/realize/realize.(*Project).Reload
      /go/src/github.com/oxequa/realize/realize/projects.go:260 +0x297
Code 1: docker-composeでrealize startした際のエラー

調べたところ、go-task が中々シンプルで良さそうだったので試してみました。

...

READ MORE

Time to read 3 min

Electron の CORS ブロックを回避する方法について

Posted 6. June 2020

Programming #electron #react #typescript #CORS

Electron で CORS エラー

Electron の Render プロセスでクロスオリジンのリクエストを投げた際、通常の Web と同様 CORS エラーでブロックされます。通信先が自前の API サーバだったりした場合にはそちらの設定でAccess-Control-Allow-Originを許可すれば OK です。

この制約はセキュリティ上必要なものですが、どうしてもクロスオリジンのリクエストを投げたい場合もあるかと思います。私の場合は、ある markdow エディタに、貼り付けた URL から自動的にページのタイトルを fetch して挿入する機能を実装するときに遭遇しました。 ...


READ MORE

Time to read 2 min