twitter: LOGIN
シンプルなフィードリーダー♪
 ▲ たかみんつ | □ たかみんつREADER | ! トピックス

[! トピックス] | スタンリー | 大谷翔平 | Koki | 成田賢 | トライアウト | 酉の市 | 名探偵ピカチュウ | 久兵衛 | 稀勢の里 | 絢香 | 西内まりや | 村上淳 | 錦織圭 | 亀田和毅 | 懸賞 | 中村倫也 | 草刈正雄 | 小田急線 | 篠原涼子 | UUUM

たかみんつREADERランキング

表示件数:

集計範囲: 最新(ここ数日)過去1週間

 
先週、Falcon Heavyロケットの3本のロケットブースターをすべて回収したSpaceXでしたが、その後なんと海上の無人船に着陸したセンターコアが、岸にたどり着く前に海に転落してしまいました。 無人船Of Course I Still Love You(OCISLY)に降り立ったセンターコアは、今週末に陸揚げされる予定で港へ向かっていたものの、折からの荒天で波が2~3mにまで達する状況に遭遇。揺れが激しくなった無人船上をブースターが滑るように動き始め、最終的には転倒するように海へ落ちてしまったとのこと。
 
何か新しいスキルを習得する際には、繰り返し練習や実践を行うことが重要であると考えられています。アメリカ国立衛生研究所(NIH)の研究者らは、そんな新しいスキルの習得について、「スキル習得中に短い休憩を取ること」が重要な役割を果たすという研究結果を発表しました。

続きを読む...

 
ココログ全面リニューアルでの不具合爆発で、急遽 @Niftyの Lacoocan で WordPressをセットアップして避難していましたが、予想以上に快適で、...
 
人間は他の動物と異なり、利他的な行動によって繁栄したといわれています。例えば人間はインターネットで知識を共有し、社会全体のために投票を行い、手に入れた天然資源は自分のものにするのではなく社会全体で共有するために管理します。こうした社会的な協力性はどこから来ているのか、アリゾナ大学の研究者が進化ゲーム理論を用いてシミュレートした結果、「他者への共感」こそが人間の高い文明を生み出した要因の1つであると論じています。

続きを読む...

 
ロードバイクの買い方…と言われてもピンとこないかも知れません。普通に自転車を買うとすれば、ショップに行き、お店に置いてある、あるいはカタログに載っている好みのバイクを選び、購入する…というイメージで[...]
 
イスラエルの航空宇宙ベンチャーSpaceILが、月に送り込んだBeresheet探査機は、民間初の月面着陸を実現するため、打ち上げから6週間をかけて月軌道へと到着しました。そして、着陸態勢を整えた4月11日に歴史的な試みは実行に移されました。
 
キアヌ・リーブスは映画「マトリックス」シリーズや「ジョン・ウィック」シリーズの主演を務める人気俳優ですが、重度のバイクマニアとしての顔も持っています。そんなキアヌ・リーブスがバイクについて熱く語るムービーが2019年4月15日に公開されるやいなや、3日もたたないうちに390万再生を突破。11万件以上の高評価を得るなど話題となっています。

続きを読む...

 
ある人物がインドネシア・中部ジャワ州のスマランにあるニャマトという土地で見つけたガンダム風の石像についてツイートしたところ、Twitter上で大きな話題となっています。

続きを読む...

 
インフォコムが開発した1980年代のテキストアドベンチャーゲーム「ゾーク」シリーズや「Planetfall」シリーズ、SF小説を原作とした「銀河ヒッチハイク・ガイド」など45作品のソースコードがGitHubで公開されました。

続きを読む...

 

AWSによるサーバーレスアーキテクチャ
Peter Sbarski 翔泳社 売り上げランキング: 157,672

AWS S3 の putObject API でファイルを上書きアップロードすると、以前設定していたメタデータも上書きされてデフォルト状態に戻ってしまいます。

S3バケットのコンテンツをWebページとして公開設定していたり、CloudFrontから配信している時には、ブラウザキャッシュの設定を行っておきたい場合がありますが、ファイルを上書き更新するたびに、その設定が失われるので、必要なメタデータは毎回指定するべきなんですね。

ということで、APIでS3にファイルをアップロードする際に同時にメタデータを設定するNode.jsのコードを以下に(AWSへの接続はAWS-CLIのプロファイル(~/.aws/ 以下の configcredentials)が正しくセットアップされている前提です)。

以下のコードは、WEBページで配信しているなら最低限設定しておくべき Content-Type と、おそらく設定しておきたいのでは?と思われる Cache-Control をファイルのアップロード時に設定しています。

"use strict"; const AWS = require("aws-sdk"); const mime = require("mime-types"); //拡張子からMIME Type const fs = require("promise-fs"); //地獄に落ちないfsモジュール const { promisify } = require("es6-promisify"); //callbackの非同期をPromise化 const s3 = new AWS.S3(); const promised = { s3: { putObject: promisify(s3.putObject.bind(s3)) } }; /**  * ContentTypeとCacheControlを設定してS3のバケットへファイルを  * アップロードする。  * @async  * @param {string} bucket バケット名  * @param {string} key アップロード先のキー(バケット内のパス)  * @param {string} pathname ローカルファイルのパス名  * @returns {Promise<undefined>} アップロード完了で解決するPromise  */ const uploadS3Bucket = async (bucket, key, pathname) => { try { const body = await fs.readFile(pathname); const contentType = mime.lookup(pathname); const params = { Body: contentType.match(/^text//) ? body.toString() : body, Bucket: bucket, Key: key, CacheControl: "no-cache", ContentType: contentType, }; console.log(`Uploading: ${pathname}`); console.log(` [ContentType: ${params.ContentType}]`); console.log(` ==> s3:${'//'}${params.Bucket}/${params.Key}`); await promised.s3.putObject(params); } catch(err) { console.warn(err.message); } }; 

Content-Type は必ず設定しましょう

APIでputObjectする場合、Content-Typeは必ず設定が必要です。Webで配信している場合は特に正しいMIME Typeを設定しましょう。 指定しないとデフォルトの application/octet-stream になってしまい、ブラウザで表示したいのにダウンロードされてしまいます。

AWS-CLIのコンソールコマンドでアップロードした場合は正しく設定されますが、他のメタデータは削除されます。

ここではファイル名(拡張子)からMIME Typeを得るために、 mime-types というnpmモジュールを使っています。 この mime-types は、また別の npm mime-dbに依存しており どちらも週に1500万回ほどダウンロードされていますから実用上の問題はないと思います。

Cache-Control も設定したい

Webサイトとして公開している場合、Cache-Controlを設定しておかないとブラウザキャッシュが有効になり、AWS側から制御しにくいので、ワタシはたいてい no-cache に設定してます。 CloudFrontのディストリビューションから公開している場合、24時間程度のキャッシュが効いていますので、S3から外へ出ていく容量(と課金)をあまり気にする必要はないはずです。 CloudFrontでInvalidationを作成してキャッシュを無効化しても、ブラウザキャッシュが効いているとページが更新されませんし。

参考:S3のオブジェクトのメタデータ

下表は S3 Bucket のファイルに設定可能なメタデータです。 メタデータ列は S3 のWEBコンソールで表示される名称で、パラメータキーはputObjectのパラメータで指定する場合のキー名称です。

メタデータ パラメータキー 詳細
Cache-Control CacheControl ブラウザキャッシュの指定 (☞MDN)
Content-Disposition ContentDisposition ファイルの扱い方法を指定 (☞MDN)
Content-Encoding ContentEncoding 圧縮アルゴリズムを指定 (☞MDN)
Content-Language ContentLanguage 閲覧者の言語を指定 (☞MDN)
Content-Type ContentType ファイルのMIME Typeを指定 (☞MDN)
Website-Redirect-Location WebsiteRedirectLocation リダイレクト先 (☞DevelopersIO)
x-amz-meta-<key> Metadata.<key> ユーザー定義メタデータ (☞AWS)
有効期限 Expires 削除される日時(☞AWS)

※ ユーザー定義メタデータ以外は、APIであらかじめ定義されているシステムメタデータです。

リンク



RSS Feed Widget
たかみんつREADERランキング
(http://bicycle.life.coocan.jp/takamints/index.php/reader/ranking/2019-04-22)
by Koji Takami ( email: vzg03566@gmail.com, GitHub: takamin )