AWS

[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] CloudFrontのオリジンを動的に変更する – Lambda@Edge + Node.js

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

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

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

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

[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認証をかける方法をまとめます。
続きを読む

[AWS] Comprehendで日本語の感情分析を行う

AWSから提供されているAIツールの一つ「Amazon Comprehend」がいつの間にか日本語に対応していたので試しに利用してみることにしました。

Comprehendは文章を解析し、単語が人なのか場所なのか意味付けを行ったり、今回チャレンジするどういった感情の文章なのか判定すると言ったことが可能です。予想外にComprehend先生はBL好きではないかという疑惑が生まれましたw 詳しくは本文でどうぞw
続きを読む

[AWS] CLIで複数のIAMを使い分ける

小ネタです。
複数のAWSアカウントを利用していると、1台のPCで複数のIAMをCLIから利用したくなるわけですが、複数のプロファイルを簡単に切り替える方法が用意されているのでメモしておきます。
続きを読む

[AWS] S3を操作するIAM JSON ポリシーのサンプル

AWSのIAMユーザーごとに権限を設定する場合、最初から用意されているポリシーだけでは十分な制限がかけられません。例えば特定のバケット以外は触らせたくないと言った場合ですね。こういう細かい制御がしたくなったらJSONで定義することになります。

今回はIAM作成時によく利用するJSONのサンプルをメモします。しばらく設定しない期間が続くとよく忘れるので自分用ですw
続きを読む

Clam AntiVirusをAmazon Linux2へ導入する

無料で使えるオープンソースのアンチウイルスソフト「ClamAV」をAWSのAmazon Linux2へインストールして動かすところまでをまとめます。

ウイルスはWindowsをターゲットとしたものが多く、限られたユーザーしか利用しないLinux環境だと入れないことが多かったりしますが、今回は専門学校の実習で50名前後の生徒にWebサーバーとして開放する関係で導入することにしました。さすがに意図的にウイルスをアップすることは無いと思いますがw 万全を期するに越したことはないですからね。
続きを読む

Let’s EncryptでワイルドカードなSSL証明書を入れる – Amazon Linux2編

WebサーバにSSL対応した約40件のサブドメインを追加する必要に迫られたのですが、さすがに1個ずつSSL証明書を発行するのは地獄なのでワイルドカード証明書を導入した際のメモになります。

無料のSSL証明書としておなじみのLet’s Encryptでは2018年からワイルドカード証明書に対応しているためこちらを利用します。

今回の環境は以下の通り。

  • Amazon Linux2
  • Apache 2.4.46

続きを読む

[AWS] Rekognitionで画像内に存在する物体を検出する

Amazon Rekognitionを使うと画像や動画をAIで解析し、そこにどういった物体が存在しているか「ラベル」を付けてくれます。例えばジャイアントパンダが写っていれば「Giant Panda」というテキストと、画像内のどこに存在しているか座標情報が送られて来ます。

今回は画像をNode.jsからRekognitionを利用するコードを書いてみます。AWSの流儀やNodeについての基礎知識があれば非常に手軽に実行できます。
続きを読む

[AWS] S3へ巨大なファイルを「マルチパートアップロード」する

AWS S3へ巨大なファイルをアップロードする際、より高速に転送するには「マルチパートアップロード」を利用することが推奨されています。また一定サイズ以上のファイルはSDKやREST APIからはそもそもPUTすることができません。

マルチパートアップロードというと一見難しそうに聞こえるかもしれませんが理屈も使い方も非常にシンプル。対応したGUIのアプリを使えば裏側で自動的に行なってくれるためそもそも意識する必要すらありません。

今回はAWS CLIとWindowsやmacOS上のGUIのクライアントを利用した方法を取り上げます。
続きを読む