ServerlessネクストTreeフォーム1.1とのAWSの
15244 ワード
より良いか悪いかのためのTerraformは、新しいバージョンでしばしば更新されます.これらの多くは、ローカルまたはリモートの地形形式の更新を必要とするだけでなく、地形定義の手動再処理を必要とする以前のバージョンとの非互換性を導入します.
私はもともとテラヘルツバージョン
Next.jsプラットフォームへの展開のために最適化されます.そして、それは次に配備する速いと簡単な方法を提供します.JSプロジェクト.それは別として、次に.JSはDockerや仮想マシンを使ってノードを走らせることもできます.js私の目的は、次に展開することです.低コストでスケールが容易なServerlessなソリューションを使用したAWSへのJS.したがって、EC 2インスタンスやEKS/ECSコンテナを設定することはありません.代わりに、次のコンポーネントを使用します.
Vercel:低コスト、高性能CDN として
Amazon CloudFront : DNS記録の構成のために
Amazon Route 53:コンパイルされた配備アーチファクト の保管のために
Amazon S3:ダイナミック・ルーティング を支持するための
AWS Lambda : SSL証明書 を生成するために
AWS Certificate Manager
このポストは、次をホストするためにインフラストラクチャを構成するのに必要な地形資源の概要を提供します.AWSの上のJSアプリケーション.
TLR🚀
あなたは単にあなた自身の次の開発を開始する場合.Tradformに配備されるJSプロジェクトは、あなたのニーズ のためにカスタマイズされたテンプレートをつくるために
を使いますギタブ のGoldstack Next.js templateをチェックしてください
Example project
地形資源基準
上記のインフラストラクチャをterraformで定義するには、次の地形資源が必要です.
証明書の定義とドメイン名の設定
:我々のウェブサイトに
aws_acm_certificate :我々のウェブサイトのためにDNS記録を定めること.また、このリソースを使用して、TLS証明書の検証に役立ちます.
aws_route53_record : TLS証明書 の検証を支援するために
aws_acm_certificate_validationの各リソースの設定を参照してください.
CDNの設定
main.tf : JavaScript/HTML/etcファイルを次に保存します.js生成.
aws_s3_bucket :新しいaws_cloudfront_distributionを作成するために. CloudFront Distributionの各リソースの設定を参照してください.また、転送ドメインに使用される2番目のCloudfrontディストリビューションを設定しています(例えば
次のダイナミックサポート.JSルーティング
redirect.tf :次に役立つラムダ関数を定義します.ダイナミックルート.aws_lambda_functionにこの関数のソースコードを見つけます.これはCloudfrontで使用されるlambda.tsです. このリソースの定義と、edge lambdaでラムダを実行するのに必要な他のリソースを見つけます.
edge.tf
terraform 0.12から1.1への変更
Terraformは、特にバージョンが定義されている方法は
のバージョン は、.terraform.lock.hclのより新しいバージョンのaws_acm_certificate資源への変化の数でした.以前は、ルート53リソースは次のように定義できます.
次を得るAWSへの配備の準備ができているJS
次に展開する.AWSには、次の 機能を使用する必要があります.js我々は
次の静的なHTMLエクスポートに頼る.JSにはいくつかのトレードオフがあります. APIルートはサポートされません.GoldStackはGoldstack Next.js template utilitiesと、同じプロジェクトのAPIを設定するために使用できるServerless API templateのテンプレートを提供します.
次に、 .JS マニュアル構成は、
次に配備するさまざまな方法があります.例えば、AWSへのJS.
この例のプロジェクトで追求されたソリューションは、低コストでスケーラブルなインフラストラクチャを作成しながら、テラフォームの機能を最大限に活用する軽量で柔軟なソリューションを提供することを目的としています.あなたはこのソリューションを改善するための質問やアイデアがある場合は、404 Not found for files in public folderに頭を回すと問題を提起してください.
当初EC2で公開されるポスト、Goldstack GitHub projectによるカバー画像
私はもともとテラヘルツバージョン
0.12
を使用してNext.js with Bootstrapのためのボイラープレートのテンプレートを開発し、それは今1年以上にわたってよく働いている(私のオリジナルblog postを参照してください).しかし、AWS terraformプロバイダーの最近のAWS announced that changes to their API would require an update.Terraformプロバイダーの古いバージョンをパッチするオプションがありますが、Torraformの最新バージョンにテンプレートをアップデートするのと同じくらい良い言い訳になるかもしれません.Next.jsプラットフォームへの展開のために最適化されます.そして、それは次に配備する速いと簡単な方法を提供します.JSプロジェクト.それは別として、次に.JSはDockerや仮想マシンを使ってノードを走らせることもできます.js私の目的は、次に展開することです.低コストでスケールが容易なServerlessなソリューションを使用したAWSへのJS.したがって、EC 2インスタンスやEKS/ECSコンテナを設定することはありません.代わりに、次のコンポーネントを使用します.
Vercel:低コスト、高性能CDN
Amazon CloudFront : DNS記録の構成のために
Amazon Route 53:コンパイルされた配備アーチファクト
Amazon S3:ダイナミック・ルーティング
AWS Lambda : SSL証明書
AWS Certificate Manager
このポストは、次をホストするためにインフラストラクチャを構成するのに必要な地形資源の概要を提供します.AWSの上のJSアプリケーション.
TLR🚀
あなたは単にあなた自身の次の開発を開始する場合.Tradformに配備されるJSプロジェクト
Example project
地形資源基準
上記のインフラストラクチャをterraformで定義するには、次の地形資源が必要です.
証明書の定義とドメイン名の設定
:我々のウェブサイトに
1.1
経由でセキュアな接続を可能にするために使用する証明書を定義します.AWSは無料でこれらの証明書を提供し、同様に自動的にそれらを更新します.aws_acm_certificate :我々のウェブサイトのためにDNS記録を定めること.また、このリソースを使用して、TLS証明書の検証に役立ちます.
aws_route53_record : TLS証明書
aws_acm_certificate_validationの各リソースの設定を参照してください.
CDNの設定
main.tf : JavaScript/HTML/etcファイルを次に保存します.js生成.
aws_s3_bucket :新しいaws_cloudfront_distributionを作成するために.
https://
からwww.mydomain.com
).この分布はroot.tfで定義されている.次のダイナミックサポート.JSルーティング
redirect.tf :次に役立つラムダ関数を定義します.ダイナミックルート.aws_lambda_functionにこの関数のソースコードを見つけます.これはCloudfrontで使用されるlambda.tsです.
edge.tf
terraform 0.12から1.1への変更
Terraformは、特にバージョン
mydomain.com
および0.13
において、いくつかの変更を導入した.このプロジェクトに必要なリソースについては、0.14
に変更されました.現在では以下のように定義されています:terraform {
required_providers {
archive = {
source = "hashicorp/archive"
version = "2.2.0"
}
aws = {
source = "hashicorp/aws"
version = "3.72.0"
}
}
required_version = ">= 0.13"
}
0.13
は、使用されるモジュールのバージョンとそれらの推移的な依存関係を追跡するためにlockfileを導入しました.このプロジェクトのために生成されるlockfileのために
を見てください.resource "aws_route53_record" "wildcard_validation" {
name = aws_acm_certificate.wildcard_website.domain_validation_options[0].resource_record_name
type = aws_acm_certificate.wildcard_website.domain_validation_options[0].resource_record_type
zone_id = data.aws_route53_zone.main.zone_id
records = [aws_acm_certificate.wildcard_website.domain_validation_options[0].resource_record_value]
ttl = "60"
}
しかし、最新のAWSテラフォームプロバイダーでは、以下のように定義する必要があります( Terraform AWS Provider参照).resource "aws_route53_record" "wildcard_validation" {
provider = aws.us-east-1
for_each = {
for dvo in aws_acm_certificate.wildcard_website.domain_validation_options : dvo.domain_name => {
name = dvo.resource_record_name
record = dvo.resource_record_value
type = dvo.resource_record_type
}
# Skips the domain if it doesn't contain a wildcard
if length(regexall("\\*\\..+", dvo.domain_name)) > 0
}
allow_overwrite = true
name = each.value.name
type = each.value.type
zone_id = data.aws_route53_zone.main.zone_id
records = [each.value.record]
ttl = 60
}
Terraform and AWS Wildcard Certificates Validation次を得るAWSへの配備の準備ができているJS
次に展開する.AWSには、次の 機能を使用する必要があります.js我々は
0.14
(Static HTML Exportを参照)を実行して、package.jsonを使用してS 3にエクスポートによって生成されたディレクトリをアップロードします-これはまた、ダイナミックルーティング設定を準備し、CloudFrontルーティングによって使用されるエッジラムダを展開することを気にします.次の静的なHTMLエクスポートに頼る.JSにはいくつかのトレードオフがあります.
次に、
next export
コンポーネントがサポートされていません(serverless Express APIを参照してください).代わりに<Image>
を使用します.サンプルプロジェクトは、代わりに画像を提供するために使用できるNext.js Image loaderを使用するように設定されています.img
イメージのサーバーファイルに直接必要です、詳細はnext-optimized-imagesを見てくださいこの例のプロジェクトで追求されたソリューションは、低コストでスケーラブルなインフラストラクチャを作成しながら、テラフォームの機能を最大限に活用する軽量で柔軟なソリューションを提供することを目的としています.あなたはこのソリューションを改善するための質問やアイデアがある場合は、404 Not found for files in public folderに頭を回すと問題を提起してください.
当初EC2で公開されるポスト、Goldstack GitHub projectによるカバー画像
Reference
この問題について(ServerlessネクストTreeフォーム1.1とのAWSの), 我々は、より多くの情報をここで見つけました https://dev.to/mxro/serverless-nextjs-on-aws-with-terraform-11-1081テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol