🛫

AWSの基礎を学ぼう 第四十六回 Amazon CloudFrontのおさらい に参加して、Edgeローケーションのコードについて調べてみた

6 min read

実はCloudFrontってちゃんと触ったことない人です。


毎週月曜日のお昼時間帯に、AWSJのエバンジェリスト亀田さんが開催してる勉強会、「AWSの基礎を学ぼう」の第46回、「Amazon CloudFrontのおさらい」でアウトプット枠で申し込んでいたのですが、アウトプット忘れていたので、今更ながらアウトプットします。すみません。

「AWSの基礎を学ぼう」の第46回、「Amazon CloudFrontのおさらい」についてはこちら

https://awsbasics.connpass.com/event/214360/

CloudFrontとは

AWS公式ドキュメントによれば、

Amazon CloudFront は、データ、動画、アプリケーション、および API をすべてデベロッパーにとって使いやすい環境で、低レイテンシーの高速転送により世界中の視聴者に安全に配信する高速コンテンツ配信ネットワーク (CDN) サービスです。
とのこと。
2008年11月に登場していて、4番目に登場したサービスとのこと。

アクセス元の近くにあるエッジロケーションから、AWS Global Network内に入ることで、レイテンシーを少なくしたり、オリジン自体を保護する機能もあるとのこと。

CloudFrontといえば、エッジロケーションでコードを実行できるサービスが2つあって、
1つがLambda@Edge、
もう1つが今年登場したCloudFront Functions。
実はLambda@Edgeもそんなに使ったことがない人だったりします。

個人的には、そこまで使っていないけど、
実はAPI GatewayはCloudFront内包してたり、
S3の署名つきURLを使いたいけど、ドメイン固定だったから、CloudFrontで署名つきURL発行するのをやったら、めっちゃ苦戦したという思い出。しかもダウンロードじゃなくてアップロードだったし。


ここから、ちょっと脱線します。

CDNのシェア

日本のCDN自体のシェアとしてはこんな感じみたいですね。

画像引用元 : 日本のCDNシェアについて調査結果@2021年4月

先日あったFastlyの大規模障害のときに気づいた話

6月8日の夕方にCDNの1つであるFastlyさんで障害がおきて、結構色々なサイトが見れなくなったという話は記憶に新しいと思います(CloudFrontというかAWSの障害だと騒がれてしまったようですね)。
その際、ステータスサイトをぼーっと眺めていたのですが、
Asia/Pacificのところで、東京がHNDNRTTYO、大阪がITMになってたりして、IATAの3レターコード使ってるんだなーって思った人です。
しかし、大阪はKIXじゃなくてITMなんだなと思ってそれはそれで面白いなーとも。

シンガポールは、

  • Singapore (QPG)
  • Singapore (SIN)

になってますが、SINはチャンギ空港の空港コードですが、QPGは、現在はパヤ・レバー空軍基地になってますが、チャンギ空港開港前にはシンガポール国際空港だったところです。
って考えると、ITMも過去には国際空港だったのでまあいいのかと思わなくもないです。

IATA3レターコードってなんやねん。

IATA3レターコードとは、国際航空運送協会が空港に割り当ている3桁のコードです。航空会社とか旅行会社の検索とかでは、このコードを多用していると思います。
似たようなもので、ICAO4レターコードという国際民間航空機関が割り当てているコードがあります。
IATA3レターコードはなんとなく読めるんですけど、ICAO4レターコードはある程度の規則性はあるものの、全くわからんです。
あと、4レターコードは、自衛隊の基地・駐屯地にも付いていたりします。
ちなみに、TYOは東京の都市コードですが、羽田、成田を同時に検索するケースなどで、利用されているコードです。

空港名 3レターコード 4レターコード
羽田 HND RJTT
成田 NRT RJAA
伊丹 ITM RJOO
関空 KIX RJBB

過去の経緯上、日本国内のIATA3レターコードは結構暗記していますが、ICAO4レターコードはまったく覚えてないです。

CloudFrontはどうなの?

実のところ、AWS Samurai 2015の山﨑さんがブログにまとめられているので、それを見ればいいのですが、まあこの記事のネタついでにいくつかのリージョンで調べてみました。

検証方法(というほどのものではないですが)は、
東京リージョンにあるAPI(API Gateway + Lambda + DynamoDB)に対して、
下記の4リージョンに立てたインスタンスからリクエストしてみた結果です。
あ、厳密にはリージョンに最も近いエッジロケーションにアクセスするはずです。
コードは、x-amz-cf-popにセットされて返ってきますね。
ここでのコードは、3レターコード + 数字2桁 + ハイフン + アルファベット1桁 + 数字1桁
で構成されています。
以前は、3レターコード + 数字2桁だったと記憶しているんですが、いつからかこのコード体系になりましたね。
管理しきれなくなったんですかね。

東京リージョン

curl -i https://v28v50x7u8.execute-api.ap-northeast-1.amazonaws.com/dev/demo
HTTP/2 200
content-type: application/json
content-length: 160
date: Tue, 22 Jun 2021 02:54:18 GMT
x-amzn-requestid: 9579033e-869f-4ec3-b1d4-27d961cfe411
x-amz-apigw-id: BTmSJHPRNjMF55A=
x-amzn-trace-id: Root=1-60d150da-1f04f5ae35c688850c1d2fd7;Sampled=0
x-cache: Miss from cloudfront
via: 1.1 bb5ea0ddfd628b81dad2fc98ec18ce72.cloudfront.net (CloudFront)
x-amz-cf-pop: NRT20-C4
x-amz-cf-id: 6UfR_vuly3jEE0MXZc0TCUhr82S-hr6kLkJkvFV5rKMCdIrAGaHNag==

{
  "message": "Success!",
  "results": [
    {
      "id": "2",
      "name": "CharAzunable"
    },
    {
      "id": "1",
      "name": "AmuroRay"
    }
  ]
}

まあ、一番身近なリージョンなので、知っていましたが、NRTになっています。

大阪リージョン

curl -i https://v28v50x7u8.execute-api.ap-northeast-1.amazonaws.com/dev/demo
HTTP/2 200
content-type: application/json
content-length: 160
date: Tue, 22 Jun 2021 02:35:23 GMT
x-amzn-requestid: b18cb585-64fc-43aa-b534-146f8f31846d
x-amz-apigw-id: BTjgvEAzNjMFkvA=
x-amzn-trace-id: Root=1-60d14c6a-39edc76a476522f363f20d61;Sampled=0
x-cache: Miss from cloudfront
via: 1.1 40b4cd108e5627cfc9fc9df29b7b6554.cloudfront.net (CloudFront)
x-amz-cf-pop: KIX56-C1
x-amz-cf-id: wK4JHHOwikxA5_-SKkTGUrRelPt8QlJfNQGiNLBPAQGZEBUs8bwVsw==

{
  "message": "Success!",
  "results": [
    {
      "id": "2",
      "name": "CharAzunable"
    },
    {
      "id": "1",
      "name": "AmuroRay"
    }
  ]
}

CloudFrontはITMではなく、KIXになっています。
東京リージョンだと、NRTの後ろの数字がいくつかありますが、大阪は何度やっても同じだったんですが、たまたまかな・・・。

北カリフォルニアリージョン

curl -i https://v28v50x7u8.execute-api.ap-northeast-1.amazonaws.com/dev/demo
HTTP/2 200
content-type: application/json
content-length: 160
date: Tue, 22 Jun 2021 03:15:37 GMT
x-amzn-requestid: f49a4eda-f490-4422-8ee5-67b8ecdb1e00
x-amz-apigw-id: BTpZ9GICNjMFcrA=
x-amzn-trace-id: Root=1-60d155d9-135711827270d038000c02a7;Sampled=0
x-cache: Miss from cloudfront
via: 1.1 55429f2d64d86ac51a104a1c84030e14.cloudfront.net (CloudFront)
x-amz-cf-pop: SFO5-C1
x-amz-cf-id: rrXPGRGhGHRjLu9a6XZkGzTQld1pQYbucwgRoTrul2EDTArwH--lsw==

{
  "message": "Success!",
  "results": [
    {
      "id": "2",
      "name": "CharAzunable"
    },
    {
      "id": "1",
      "name": "AmuroRay"
    }
  ]
}

SFOなので、サンフランシスコ国際空港ですね。

パリリージョン

curl -i https://v28v50x7u8.execute-api.ap-northeast-1.amazonaws.com/dev/demo
HTTP/2 200
content-type: application/json
content-length: 160
date: Tue, 22 Jun 2021 02:51:40 GMT
x-amzn-requestid: de7857af-abf6-447a-bd6b-4bbc5ace1e3d
x-amz-apigw-id: BTl5cGBoNjMFWaw=
x-amzn-trace-id: Root=1-60d1503c-7410885d7fdacba20f35b9de;Sampled=0
x-cache: Miss from cloudfront
via: 1.1 45dddc65ba3da4a1716d9c10f4aaaa08.cloudfront.net (CloudFront)
x-amz-cf-pop: CDG53-C1
x-amz-cf-id: aGbp__jAY-4zaQReNW1lhc3rVXyFX923xOs9l-ElrJ0_1AImgKW5gA==

{
 "message": "Success!",
 "results": [
   {
     "id": "2",
     "name": "CharAzunable"
   },
   {
     "id": "1",
     "name": "AmuroRay"
   }
 ]
}

CDGなので、パリ・シャルル・ド・ゴール空港ですね。


外国だと、空港に人名がついてることが珍しくなく、しかもそれがそのままコードになっている(ニューヨーク、ジョン・F・ケネディ国際空港(JFK))ところもありますね。
ちなみに、FastlyさんのニューヨークのエッジロケーションはJFKではなく、LGA(ラガーディア空港)でした。

終わり

勉強会のアウトプットとしては、だいぶ遠ざかってしまいましたが、
CloudFrontまだまだ知らないことが多いので、引き続き勉強したいと思います。

そして、こんな内容でごめんなさい・・・。

Discussion

ログインするとコメントできます