AWS Elastic Beanstalk での Platform の更新

はじめに

先週、AWS Elastic Beanstalk の Application で、Environment の Platform の更新を行いました。更新したのは、ボランティアとして、開発や保守をしている SafecastAPIサーバー です。

きっかけ

APIサーバーで、追加する機能を確認しようとして、開発用のサーバーにデプロイしたら、エラーになってしまいました。エラーの原因を調査すると、デプロイの中で、RPM をダウンロードできなくて、アプリケーションのビルドができていませんでした。RPMのダウンロードができないのは、ダウンロード先のサーバーのSSL証明書が確認できないためですが、証明書には問題がなく、サーバー内の認証局情報が古いのが問題でした。情報が古いのは、サーバーが、古い Amazon Linux 上で動いているためでした。良い機会なので、Platform を Amazon Linux 2 ベースに更新することにしました。

docs.aws.amazon.com

移行作業

移行作業は、試してみて、問題があれば、文書を読んで、修正することの繰り返しでした。まずは、アプリケーションを ZIP 形式にして、そのZIP形式のファイルを元に以下のように application version を作成します。

$ aws elasticbeanstalk create-application-version --region <region> --application-name <application_name> --version-label <verison_label> --source-bundle S3Bucket=<bucket>,S3Key=<key> --description <description>

そして、新しい environment を作成します。

$ aws elasticbeanstalk create-environment --application-name <application_name> --environment-name <environment_name> --template-name <template_name> --platform-arn "arn:aws:elasticbeanstalk:us-west-2::platform/Ruby 2.6 running on 64bit Amazon Linux 2/3.4.0" --version-label <version_label>

問題があれば、修正しての繰り返してでした。

大きな変更点

Amazon Linux 2 への移行で気づいた点は以下になります。

  • Procfile で、アプリケーションサーバーの起動方法を書くことができる。
    • init スクリプトを書いていたので、とても楽になっています。
  • systemd ベースに変更になっている。
    • awslogs などの設定方法が変更になっています。また、nginx とかを再起動したい時も注意する必要がありました。
  • epel は、amazon-linux-extras 経由で有効にする。
    • 元からそうだったかもしれないです。
  • nginx の設定ファイルは、.platform/nginx/conf.d に配置する。

以下が、今回の変更内容です。

github.com

最後に

移行作業自体は、スムーズに終了しました。後で、少し問題点が見つかって、修正中です。 Elastic Beanstalk は、AWS サービスの中では、避けていたサービスなのですが、今回の移行作業を通じて、一通りの事ができるようになったと思います。

npm パッケージを初めてリリースした

今日、

graphql-codegen-plugin-typescript-swrというnpmパッケージをリリースしました。npmをリリースするのは初めてでした。意外と簡単でした。yarn での手順は、Publishing a Package | yarn に記載されています。

はじめにnpmjs.comにログインします。

$ yarn login

ここでは、npmjs.comでのユーザー名と登録しているメールアドレスを入力します。次にリリースします。

$ yarn publish

で、バージョン番号を入力して、再度、ユーザー名とメールアドレスを入力します。そして、パスワードと2段階認証用のコードを入力します。 なので、事前にnpmjs.comで、2段階認証を有効にしておく必要があります。

yarn publish でバージョン番号を聞かれたのは意外でした。というのは、package.json に新しいバージョン番号を書いているので、それを使って欲しいなぁと思ったからでした。

gitでのタグ作成とか作成したタグをリモートレポジトリへのプッシュするとかやってくれるパッケージとかあるのだろうか?今度、探してみよう。

Amazon Web Service (AWS) についての学習

Amazon Web Service (AWS) については、どうやって学習するのが、一般的なんだろうか? 仕事で必要に迫られてとか、何か作りたいものがあってとか、何らか目的があるから、EC2についてとか、ECSについてとか学習するのが普通でしょうか? あとは、認定を取るためにっていうのもあるかも。認定は、仕事で必要ってあるのかな?資格を取るという目的の人もいる。それでも、何らかの目的がある。 個人で、目的なく、ただ、漠然と学習するのは、難しそうだ。

neovim の設定を Lua 言語 で書く init.lua に切り替えを検討する

この「From init.vim to init.lua - a crash course 」という記事を読んで neovim の設定ファイルを Lua 言語に切り替えようなかなぁと思うようになりました。Lua もそうですが、Vim L も十分に理解できていないので、1ヶ月ぐらいかけてゆっくり移行しようと思っています。そこで、とりあえず、切り替えに必要な情報とか集めてみました。

  • NeovimとLua
    • 著者の方も注意書きをしているように情報は若干古くなっています。全体を把握するには十分だと思います。
  • [Getting started using Lua in Neovim]https://github.com/nanotee/nvim-lua-guide)
    • とても良い記事です。日本語版もあるようです。僕は、最初の記事を読んでなければ、情報の量に圧倒されていたかもしれないと思いました。

この2つを読んで、何となく移行ができそうな気がしてきた…最初は、vim.cmd [[... で、init.vim の内容を囲めば良いのか…

Turing Complete (ゲーム)

最近、Steam で購入した [Turing Complete](https://store.steampowered.com/app/1444480/Turing_Complete/)  というゲームをやっています。まだ、Early Access のステージで完成はしていないですが、現在は、2,050 円で、価格の割には、長く楽しめると思います。

 

Turing Complete というゲームは、最初、NAND ゲートから、AND、OR、や、NOT などの単純な[論理回路](https://ja.wikipedia.org/wiki/論理回路)を作っていきます。作成した単純な論理回路から、カウンタといった複雑な論理回路や[加算器](https://ja.wikipedia.org/wiki/加算器)といった演算装置など、より複雑な回路を作っていきます。そして、それらの回路を組み合わせて、集積回路を作っていきます。最後には、それらの集積回路アセンブリ言語を書いて動かしていきます。

 

どのようにしてプログラムが動作するのかが、回路レベルから理解できるようになると思うので、特にソフトウェアエンジニアのような人には試して欲しいゲームです。

 

Next.js 12 を試してみた

Next.js 12 がリリースされて、「~3x faster Fast Refresh and ~5x faster builds」がとても気になるので、ちょっと、試してみました。

まずは、ディレクトリを作って、その中に設定していきます。あえて、create-react-app を使わないようにしています。

$ mkdir next-12
$ cd next-12
$ npm init -y
Wrote to /.../next-12/package.json:

{
  "name": "next-12",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
$ npm install next react react-dom
...

TypeScript で書きたいので、インストールして、あとで、Next.js に設定してもらうように空の tsconfig.json を作っておきます。

$ npm install --save-dev typescript @types/react
...
$ touch tsconfig.json

ページ用のディレクトリを作って、src/pages/index.tsx に以下のようなページを作成します。

$ mkdir -p src/pages
import React from "react";
import NextPage from "next/page";

const Index: NextPage = () => {
  return <div>Hello Next 12</div>;
};

export default Index;

そして、開発用サーバーを起動します。

npx next dev
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
We detected TypeScript in your project and created a tsconfig.json file for you.

event - compiled successfully in 2.6s (159 modules)

そして、http://127.0.0.1:3000 にウェブブラウザでアクセスして、「Hello Next 12」と表示されたら完成です。

Next.js 12 になって、「in 2.6s (159 modules)」のようにビルドにかかる時間が表示されていますね。

比較として、Next.js 11 でも同じような手順で試してみましたが、あまり変わりがありませんでした。作ったファイルが短くて、単純なためなのでしょうか…Next.js 11 と 12 共にnode_modules/@next の中に swc-darwin-x64macOS で試しているので)というディレクトリがあって、Next.js 11 でも swc を使っていたのでしょうか?

Kinesis or ErgoDox EZ (or MoonLander)

今、使っているキーボードが、時々、チャタリングを起こすようになったので、新しいキーボードを買おうかと考えている。使っているのは、3年ほど前にある人から買った ErgoDox EZ で、親指でリターンとかスペースを押すことができるのが気に入っているので、同じ ErgoDox EZ、もしくは、配列が同じ Kinesis Advantage 2 の購入を検討している。自作する気は全くない。ErgoDox EZ には不満はないが、Function キーがあって、キーボードの配列を Dvorak にも変更できる Kinesis に気持ちが傾きつつある。ただ、キーボードを置くスペースが狭いので、Kinesis の大きさがなぁ…