[AWS] ECRにDockerイメージをプッシュする

気がつけば猫も杓子もDockerと言いますかコンテナな世界になってしまいましたねw DockerイメージをAWSの各種サービスと連携させるためには「ECR」と呼ばれるレジストリサービスへ登録しておく必要があります。

今回はローカルでビルドしたDockerイメージをECRへ登録するまではまとめておきます。

AWS App Runnerが使いたかったのですが、GitHubとの連携で苦戦したためECRにDockerイメージを登録する方法を採用することにしたというのが経緯だったりします。

続きを読む

[AWS] S3へMIMEタイプを自動判定しながらアップロードする - Node.js

AWS S3を単なるストレージとして使う際には問題とならないのですが、S3をWebサーバとして使う場合はファイルのMIMEタイプ(Content-type)を正しく指定しておかないとWebブラウザからダウンロードを求められるなど意図した通り動いてくれないことがあります。

この指定方法はシンプルでS3.putObjectを実行する際のパラメーターとして渡すだけ。

const params = {
   Bucket: 's3.example.com',
   Key: 'foo.html',
   Body: await fs.readFile('foo.html'),
   ContentType: 'text/html'
 }
 await S3.putObject(params).promise()

このときに予めMIMEタイプがすべて判明していれば良いのですが、不特定多数の種類のファイルを扱うような場合にはファイル名から拡張子を取り出して判定して……といった処理が必要になります。難しくは無いけどゼロから書くのは正直めんどくさいw

そこで今回はNode.js版のAWS SDKを用いてこのMIMEタイプを自動で判定する方法をまとめます。

※ちなみにCLIから使う場合はawsコマンド(が内部で使っているPythonのライブラリ)が自動的に判定してくれています。

続きを読む

[AWS] Serverless FrameworkでS3にファイルが追加されたらLambdaを起動する

AWS LambdaはRESTful APIの開発時だけではなく、特定のイベントをトリガーとして処理を行うことができます。今回はServerlessFrameworkを利用し、S3に新しくオブジェクトが追加された際に関数を起動するところまでをまとめます。

続きを読む

[AWS] CloudFrontのオリジンを動的に変更する – Lambda@Edge + Node.js

CloudFrontで参照しているオリジンをLambda@Edgeで変更してみます。

今回はhttp://foo.example.comでアクセスされたら、CloudFrontがオリジンhttp://example.com/foo/へリクエストする設定をします。

正直なところあまり需要は無いと思いますがw この設定が生きてくるのは大量に同様の設定をしなければならない時ですね。設定が必要なドメインが2〜3個であればCloudFront側でディストリビューションを必要なだけ作成する方がわかりやすいです。

というわけで先ほどの例の「foo」の部分はどのような文字列が来ても対応可能なよう設定していきます。

続きを読む

[AWS] Serverless FrameworkでLambdaをArm64対応する

AWS Lambdaが2021年9月29日からArm64に対応しました。 デフォルトではx86…要はIntelのCPUが使われていますが、Arm64を選択するだけで20%のコストダウン、最大19%のパフォーマンスの向上が期待できるとか!乗るしかない!このビッグウェーブに!

続きを読む

[AWS] CloudFront+S3オリジンでindex.htmlを省略する - Lambda@Edge + Node.js

CloudFrontのオリジンにS3を利用する場合、大きく2つのパターンがあります。

  1. S3を独立したWebサーバとして利用する
  2. S3を内部的にHDDのように利用する

前者はS3側で割と色々と設定できるのですが問題は後者です。一般的なWebサーバのように「example.com/hoge/」にアクセスしたら「example.com/hoge/index.html」を返して欲しかったりするわけですが、この機能は自分でコードを書いて用意する必要があるのです。正直面倒くさいw

というわけでCloudFrontを制御するLambda@Edgeを準備していきます。

続きを読む

[AWS] CloudFrontでBASIC認証を行う - Lambda@Edge + Node.js

S3をWebサーバ代わりに使っている方も多いと思いますが、開発中のページや社内だけで閲覧したい場合など簡易的なアクセス制限をかけたい場合がありますよね。以前はEC2の安いインスンスを用意することもありましたが、Lambda@Edgeが登場してからはS3とCloudFrontだけで完結することができます。

というわけで今回はCloudFrontを使ってBASIC認証をかける方法をまとめます。

続きを読む

[GitHub Actions] AWS S3へファイルを自動的に転送する

GitHub上にリポジトリを作成し、いつも通りpushすると自動的に仮想マシンが起動しこちらが指定した処理を行ってくれる「Actions」という機能があります。なんとパプリックリポジトリは無料、プライベートリポジトリも月間2000分(約33時間)までは無料で使えるという夢のような機能ですw

主にアプリをビルド(コンパイル)したり、テストコードを自動的に実行するといった用途に使われていますが、ここでは特定のブランチを更新しpushすると、そのファイルをAWS S3へ自動的に転送する設定を行ってみます。

続きを読む