どんなことができるのか

いわゆるクライアントごとに独自ドメインを一つの設定で配信できるという機能。ドメインごとの TLS 証明書を CloudFrontが自動で取得・更新してくれる。配信設定はひな形として共有しつつ、WAF・証明書だけはドメインごとに差し替えられて、階層ごとにひな形を分けられる。
今まで代替ドメイン名は1 ディストリビューションあたり100 件が上限で、超えるとディストリビューションを分けるしかなかったので非常に重宝する。
コスト
| テナント数 | 料金 |
|---|---|
| 〜10 | 無料 |
| 11〜200 | 月 $20 の定額 |
| 201〜 | 1 テナントあたり月 $0.10 |
安い!
仕組み
オリジン、キャッシュ、WAFらの共通設定ディストリビューションテナントドメイン 1 本。
| 役割 | |
|---|---|
| マルチテナントディストリビューション | ひな形。オリジン、キャッシュ、WAF など共通設定 |
| ディストリビューションテナント | ドメイン 1 本で証明書も管理 |
| コネクショングループ | CNAME を向ける先(dhogehoge.cloudfront.net) |
共通設定のひな形を 1 つ作り、ドメインごとの差分だけを個別に持つようなイメージ。もちろんクライアントごとにドメインの所有を証明するために、CNAMEのみ設定すればいいので、TXTで足してもらう必要などの工程はなくなる。
APIで自動化する
クライアントが増えるたびに手動は追加はだるいので、AWS SDKを使えば簡単にTXT設定、テナントから証明書の認証まで実装することができる。以下は例。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
await route53.send(new ChangeResourceRecordSetsCommand({ HostedZoneId: ZONE_ID, ChangeBatch: { Changes: [{ Action: "UPSERT", ResourceRecordSet: { Name: `_cf-challenge.${tenantKey}.hoge.example.com.`, Type: "TXT", TTL: 300, ResourceRecords: [{ Value: `"${ROUTING_ENDPOINT}"` }], }}]}, })); const created = await cloudfront.send(new CreateDistributionTenantCommand({ DistributionId: DISTRIBUTION_ID, ConnectionGroupId: CONNECTION_GROUP_ID, Name: tenantName, Domains: [{ Domain: "shop.customer.jp" }], ManagedCertificateRequest: { ValidationTokenHost: "cloudfront" }, })); const { ManagedCertificateDetails: cert } = await cloudfront.send(new GetManagedCertificateDetailsCommand({ Identifier: id })); if (cert.CertificateStatus === "issued") { await cloudfront.send(new UpdateDistributionTenantCommand({ Id: id, IfMatch: etag, Customizations: { Certificate: { Arn: cert.CertificateArn } }, })); } |
まとめ
テナント自体はTerraformに入れないほうがよさそうだった。ドメインの増減で動的に変わるものをIaC に載せると、増えるたびにapply しないといけないので、基盤までをIaC、テナントはAPIで作る工程が良さそうだった。
結論、控えめに言って、便利じゃん!
Was this helpful?
0 / 0
1989年生まれのSRE 。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。 現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、 緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化を担当している。
個人事業主では数社サーバー保守とベンチャー企業のインフラコンサルティングを行うほか、TechBullを創業し、ジュニアエンジニアのコミュニティを運営している。さらに、エンジニア向けYouTubeメディア「TECH WORLD」ではSRE関連の動画に出演し、過去には脆弱性スキャナ「Vuls」のOSS活動にも貢献。 ガジェット系エンジニアYouTuberとしても発信。