日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存

發(fā)布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

快速提供內(nèi)容對于任何網(wǎng)站或應(yīng)用程序具有更好的客戶體驗至關(guān)重要。 如果您將網(wǎng)站或應(yīng)用程序托管在AWS Cloud中,那么無論從何處訪問應(yīng)用程序,都可以以較低的延遲快速提供內(nèi)容。 AWS提供了CloudFront服務(wù),用于將內(nèi)容緩存在每個用戶地理位置本地的邊緣位置。

在此示例中,我們將向您展示如何使用AWS Lambda函數(shù)檢索和轉(zhuǎn)換圖像,如何在CloudFront邊緣位置本地緩存以及如何在原始服務(wù)器中更新緩存的圖像時使這些緩存無效。 該方法可以應(yīng)用于任何其他類型的內(nèi)容。

1.什么是Amazon CloudFront?

Amazon CloudFront是AWS(Amazon Web Services)提供的內(nèi)容交付網(wǎng)絡(luò)(CDN)Web服務(wù),它允許通過全球范圍內(nèi)的多個邊緣位置訪問內(nèi)容。 Amazon CloudFront當前提供149個邊緣位置和11個區(qū)域邊緣緩存 。

2.什么是AWS Lambda?

AWS Lambda是一個事件驅(qū)動的無服務(wù)器計算平臺,該平臺運行代碼而無需置備或管理服務(wù)器。 AWS Lambda根據(jù)事件觸發(fā)器執(zhí)行代碼(功能)。 例如,一個簡單的用例是,每次將圖像上傳到S3存儲桶時,都可以觸發(fā)Lambda函數(shù)來轉(zhuǎn)換和調(diào)整圖像大小。 AWS Lambda函數(shù)也可以通過AWS API Gateway內(nèi)置的API執(zhí)行。

3.什么是Amazon S3?

AWS S3(簡單存儲服務(wù))是一種低成本,安全,耐用,高可用性和水平可擴展的對象存儲服務(wù),可以在其中存儲,訪問和輕松備份數(shù)據(jù)。 您可以從任何地方存儲任何數(shù)量的信息。

4.從Origin Server獲取圖像并將其存儲在S3中

假設(shè)您有一個媒體服務(wù)器,該服務(wù)器托管您的網(wǎng)站所需的所有圖像,并假定該服務(wù)器能夠在更新現(xiàn)有圖像或添加新圖像時觸發(fā)通知。 使用AWS Lambda,可以對這些圖像進行檢索,轉(zhuǎn)換,調(diào)整大小并將其存儲到S3存儲桶中。

圖1:使用Lambda從Origin Server獲取圖像

上圖圖1顯示了AWS Lambda函數(shù),該函數(shù)從Media服務(wù)器檢索原始圖像,進行轉(zhuǎn)換并將其發(fā)布到S3存儲桶。 它還會偵聽Message Queue以獲取Media Server發(fā)布的圖像更新,并在S3中刷新圖像。

5.使用Amazon CloudFront緩存內(nèi)容

Amazon CloudFront可以通過邊緣緩存加快內(nèi)容的交付速度。 當用戶訪問您的網(wǎng)站或應(yīng)用程序并請求內(nèi)容時,請求將被路由到最近的CloudFront邊緣位置。 僅對于第一個用戶,在檢索內(nèi)容時會有延遲,并且相同內(nèi)容的所有后續(xù)用戶將能夠快速檢索內(nèi)容,因為內(nèi)容將被緩存在邊緣位置。

以下是用戶對內(nèi)容的請求發(fā)生的過程:

  • CloudFront會在其緩存中檢查所請求的對象。 如果在緩存中找到了所請求的對象,則將其返回。
  • 如果在CloudFront緩存中找不到請求的對象,
    • 該請求將被重定向到配置的原始服務(wù)器 。
    • CloudFront將從Origin Server返回的對象緩存在最近的邊緣位置,然后返回給用戶。

可以將CloudFront中的對象緩存為已配置的TTL(生存時間),并且TTL過期后,該對象將不再可用于從緩存中提供服務(wù),如圖2所示。

圖2:使用CloudFront緩存圖像內(nèi)容

6.如何在AWS控制臺上配置CloudFront

要配置CloudFront,必須先創(chuàng)建CloudFront分配。 選擇“ Web分發(fā)”進行內(nèi)容分發(fā),并選擇“ RMTP”分發(fā)進行流媒體文件。 對于這種情況,讓我們選擇Web分發(fā)。

6.1創(chuàng)建CloudFront分配

登錄到AWS控制臺->選擇CloudFront服務(wù)->創(chuàng)建分配->選擇Web分配->入門

要將S3用作原始服務(wù)器,請為原始域名選擇已創(chuàng)建的S3存儲桶。 對于“ 原始路徑”,輸入存儲對象的目錄路徑。 要將自定義HTTP Server用作原始服務(wù)器,請為“ 原始域名”輸入自定義原始服務(wù)器的DNS名稱,為“ 原始路徑 ”輸入上下文路徑。

要將S3用作原始服務(wù)器,請為原始域名選擇已創(chuàng)建的S3存儲桶。 對于“ 原始路徑”,輸入存儲對象的目錄路徑。 要將自定義HTTP Server用作原始服務(wù)器,請為Origin Domain Name輸入自定義原始服務(wù)器的DNS名稱,并為Origin Path輸入上下文路徑,如圖3所示。

圖3:從AWS控制臺創(chuàng)建CloudFront分配

6.2緩存行為設(shè)置

如果只允許HTTPS訪問,則啟用將HTTP重定向到HTTPS。 在對象緩存中,如果選擇了“使用原始緩存標頭”,則CloudFront將使用原始服務(wù)器響應(yīng)中的緩存控制標頭( max-age ),除非還返回了“ s-max-age ”,在這種情況下為s-max-使用年齡 。

如果選擇Customize (針對Object Caching ),則可以配置Minimum TTL,Maximum TTL和Default TTL,如圖4所示。

  • 最小TTL是對象在CloudFront將請求轉(zhuǎn)發(fā)到Origin Server之前對象保留在緩存中的時間(以秒為單位)。 即使Origin Server的Cache-Control標頭的值較低,對象也會被緩存最少的時間。
  • 最大TTL是在CloudFront將請求轉(zhuǎn)發(fā)到Origin Server之前,對象停留在緩存中的時間(以秒為單位)。 最大TTL僅在原始服務(wù)器返回緩存控制標頭時才有效。 即使Origin Server的Cache-Control標頭具有更高的值,對象的緩存時間也不會超過此時間。
  • 僅當Origin Server不返回任何緩存控制標頭時,默認TTL才有效。
圖4: CloudFront分發(fā)上的緩存行為設(shè)置

6.3查詢參數(shù)白名單

當您不想按“ 所有”查詢參數(shù)緩存圖像或內(nèi)容,而僅按幾個查詢參數(shù)緩存時,可以將CloudFront配置為僅通過“ 查詢字符串白名單”按選定的查詢參數(shù)緩存,如圖5所示,因此只有那些查詢參數(shù)會包含在緩存鍵中。 仍然將所有查詢參數(shù)轉(zhuǎn)發(fā)到原始服務(wù)器。

圖5 :CloudFront中的白名單查詢參數(shù)

創(chuàng)建一個Alias記錄以使用CloudFront分布Url映射Route53 CNAME記錄,因此對Alias的請求將映射到CloudFront分布,然后再映射到原點。

7.使CloudFront中的緩存對象無效

一旦將對象緩存在CloudFront中,它們將保留在緩存中,直到緩存TTL過期為止。 如果在原始服務(wù)器中更新了一個對象,CloudFront不會知道這一點,但是會繼續(xù)從其緩存中為過時的對象提供服務(wù)。 為了避免提供過時的數(shù)據(jù)對象,CloudFront允許通過不同方式使對象緩存無效。

在AWS文檔中 ,您一次可以對每個分發(fā)進行最多3,000個文件的失效請求,每個失效請求可以包括多達3000個URL。 請注意,啟動CloudFront緩存失效后,CloudFront需要花費幾分鐘的時間從所有邊緣位置刪除對象。 即可能需要一些時間才能獲得無效的結(jié)果。 失效所需的時間取決于失效請求中包含的對象URL的數(shù)量。

7.1通過AWS控制臺使對象無效

以下是使來自AWS Console的緩存對象無效的步驟。

  • 登錄到AWS管理控制臺并打開CloudFront控制臺
  • 選擇您要使文件無效的分發(fā)。
  • 選擇分發(fā)設(shè)置,然后選擇無效選項卡。
  • 選擇創(chuàng)建無效并輸入無效路徑,例如“ originserver / image / IMG54330080 *”。 此通配符路徑將刪除為imageId“ IMG54330080 “

7.2使用CLI(命令行界面)使對象無效

以下命令為給定分發(fā)ID的CloudFront分發(fā)創(chuàng)建無效。 命令語法:

aws cloudfront create-invalidation --DistributionId --paths

例:

aws cloudfront create-invalidation --distribution-id K14EK9G5DZUEWO --paths /originserver/image/IMG54330080*

{"Location": "https://cloudfront.amazonaws.com/2019-01-25/distribution/K14EK9G5DZUEWO/invalidation/IUNZX941WYQR8","Invalidation": {"Id": "IUNZX941WYQR8","Status": "InProgress","CreateTime": "2019-01-17T17:07:57.636Z","InvalidationBatch": {"Paths": {"Quantity": 1,"Items": ["/originserver/image/IMG54330080*"]},"CallerReference": "cli-324234242-463845"}}}

7.3通過AWS開發(fā)工具包使對象無效

以下Java代碼段用于通過Amazon SDK使對象無效。

AWSCredentials awsCredentials = new DefaultAWSCredentialsProviderChain().getCredentials();AmazonCloudFrontClient client = new AmazonCloudFrontClient(awsCredentials);Paths invalidation_paths = new Paths().withItems("/originserver/image/IMG54330080*", "/image/path/imageA.jpg").withQuantity(1);InvalidationBatch invalidation_batch = new InvalidationBatch(invalidation_paths, "Asset_Image_Cache");CreateInvalidationRequest invalidation = new CreateInvalidationRequest("distributionID", invalidation_batch);CreateInvalidationResult ret = client.createInvalidation(invalidation);System.out.println("Invalidation result: " + ret.toString());

如果您將CloudFront配置為將查詢參數(shù)轉(zhuǎn)發(fā)到Origin Server,則在使文件無效時必須包括查詢參數(shù),因為CacheKey是使用創(chuàng)建緩存時包含的查詢參數(shù)創(chuàng)建的。 例如

http://cdn.originserver.com/image/IMG54330080?category=headshot&type=high-resolution&width=220&height=330&aspectRatio=3.5

另外,您可以在無效網(wǎng)址中使用通配符*。 請注意,在這種情況下,所有具有與URL(帶有通配符)匹配的CacheKeys的緩存條目都將失效。 例如

http://cdn.originserver.com/image/IMG54330080*

當新對象/更新對象上載到S3時,AWS Lambda函數(shù)還可用于使CloudFront對象無效。

如圖6所示,當將更新的對象上傳到S3時,它將觸發(fā)Lambda函數(shù),該函數(shù)會使CloudFront緩存中的對象無效。

圖6 :通過Lambda函數(shù)使CloudFront對象無效

8.總結(jié)

AWS CloudFront是一項功能強大的內(nèi)容緩存服務(wù),可將內(nèi)容快速提供給您的網(wǎng)站或應(yīng)用程序的用戶,而無需擔心網(wǎng)站或應(yīng)用程序的托管位置以及用戶從何處訪問您的應(yīng)用程序。 將此服務(wù)與Lambda,S3等其他AWS服務(wù)一起使用可幫助創(chuàng)建動態(tài)緩存,因此可以將近實時數(shù)據(jù)快速提供給用戶。 如果需要,還可以使CloudFront對象緩存無效。

翻譯自: https://www.javacodegeeks.com/2019/02/dynamic-content-caching-with-aws-lambda-s3-and-aws-cloudfront.html

總結(jié)

以上是生活随笔為你收集整理的使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。