aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存
aws lambda使用
快速提供內容對于任何網站或應用程序具有更好的客戶體驗都是必不可少的。 如果您將網站或應用程序托管在AWS Cloud中,那么無論從何處訪問應用程序,都可以以較低的延遲快速提供內容。 AWS提供了CloudFront服務,用于將內容緩存在每個用戶地理位置本地的邊緣位置。
在此示例中,我們將向您展示如何使用AWS Lambda函數檢索和轉換圖像,如何在CloudFront邊緣位置本地緩存以及如何在原始服務器中更新緩存的圖像時使這些緩存無效。 該方法可以應用于任何其他類型的內容。
1.什么是Amazon CloudFront?
Amazon CloudFront是AWS(Amazon Web Services)提供的內容交付網絡(CDN)Web服務,它允許通過全球范圍內的多個邊緣位置訪問內容。 Amazon CloudFront當前提供149個邊緣位置和11個區域邊緣緩存 。
2.什么是AWS Lambda?
AWS Lambda是一個事件驅動的無服務器計算平臺,該平臺運行代碼而無需置備或管理服務器。 AWS Lambda根據事件觸發器執行代碼(功能)。 例如,一個簡單的用例是,每次將圖像上傳到S3存儲桶時,都可以觸發Lambda函數來轉換和調整圖像大小。 AWS Lambda函數也可以通過AWS API Gateway內置的API執行。
3.什么是Amazon S3?
AWS S3(簡單存儲服務)是一種低成本,安全,耐用,高可用性和水平可擴展的對象存儲服務,可以在其中存儲,訪問和輕松備份數據。 您可以從任何地方存儲任何數量的信息。
4.從Origin Server獲取圖像并將其存儲在S3中
假設您有一個媒體服務器,該服務器托管您的網站所需的所有圖像,并假定該服務器能夠在更新現有圖像或添加新圖像時觸發通知。 使用AWS Lambda,可以對這些圖像進行檢索,轉換,調整大小并將其存儲到S3存儲桶中。
圖1:使用Lambda從Origin Server獲取圖像上面的圖1顯示了AWS Lambda函數,該函數從Media服務器檢索原始圖像,進行轉換并將其發布到S3存儲桶。 它還會偵聽Message Queue以獲取Media Server發布的圖像更新,并在S3中刷新圖像。
5.使用Amazon CloudFront緩存內容
Amazon CloudFront可以通過邊緣緩存加快內容交付速度。 當用戶訪問您的網站或應用程序并請求內容時,請求將被路由到最近的CloudFront邊緣位置。 僅對于第一個用戶,在檢索內容時會有延遲,并且相同內容的所有后續用戶將能夠快速檢索內容,因為內容將被緩存在邊緣位置。
以下是用戶對內容的請求發生的過程:
- CloudFront在其緩存中檢查所請求的對象。 如果在緩存中找到請求的對象,則將其返回。
-  如果在CloudFront緩存中找不到請求的對象, - 該請求將被重定向到配置的原始服務器 。
 - CloudFront將從Origin Server返回的對象緩存在最近的邊緣位置,然后返回給用戶。
 
可以將CloudFront中的對象緩存為已配置的TTL(生存時間),一旦TTL過期,該對象將不再可用于從緩存中提供服務,如圖2所示。
圖2:使用CloudFront緩存圖像內容6.如何在AWS控制臺上配置CloudFront
要配置CloudFront,必須先創建CloudFront分配。 選擇“ Web分發”進行內容分發,然后選擇“ RMTP”分發進行流媒體文件。 對于這種情況,讓我們選擇Web分發。
6.1創建CloudFront分配
登錄到AWS控制臺->選擇CloudFront服務->創建分配->選擇Web分配->入門
要將S3用作原始服務器,請為原始域名選擇已創建的S3存儲桶。 對于“ 原始路徑”,輸入存儲對象的目錄路徑。 要將自定義HTTP Server用作源服務器,請為“ 源域名”輸入自定義源服務器的DNS名稱,為“ 源路徑 ”輸入上下文路徑。
要將S3用作原始服務器,請為原始域名選擇已創建的S3存儲桶。 對于“ 原始路徑”,輸入存儲對象的目錄路徑。 要將自定義HTTP Server用作原始服務器,請為Origin Domain Name輸入自定義原始服務器的DNS名稱,并為Origin Path輸入上下文路徑,如圖3所示。
圖3:從AWS控制臺創建CloudFront分配6.2緩存行為設置
如果只允許HTTPS訪問,則啟用將HTTP重定向到HTTPS。 在對象緩存中,如果選擇了“使用原始緩存標頭”,則CloudFront將使用原始服務器響應中的緩存控制標頭( max-age ),除非還返回了“ s-max-age ”,在這種情況下為s-max-使用年齡 。
如果選擇Customize (針對Object Caching ),則可以配置Minimum TTL,Maximum TTL和Default TTL,如圖4所示。
- 最小TTL是在CloudFront將請求轉發到Origin Server之前,對象停留在緩存中的時間(以秒為單位)。 即使Origin Server的Cache-Control標頭的值較低,對象也會被緩存最少的時間。
- 最大TTL是在CloudFront將請求轉發到Origin Server之前,對象停留在緩存中的時間(以秒為單位)。 最大TTL僅在原始服務器返回緩存控制標頭時才有效。 即使Origin Server的Cache-Control標頭具有更高的值,對象的緩存時間也不會超過此時間。
- 僅當Origin Server不返回任何緩存控制標頭時,默認TTL才有效。
6.3查詢參數白名單
當您不想按所有查詢參數緩存圖像或內容,而僅按少數查詢參數緩存時,可以將CloudFront配置為僅通過查詢字符串白名單按選定的查詢參數緩存,如圖5所示,因此只有那些查詢參數會包含在緩存鍵中。 仍然將所有查詢參數轉發到原始服務器。
圖5 :CloudFront中的白名單查詢參數創建一個Alias記錄以使用CloudFront分布Url映射Route53 CNAME記錄,因此對Alias的請求將映射到CloudFront分布,然后再映射到原點。
7.使CloudFront中的緩存對象無效
一旦將對象緩存在CloudFront中,它們將保留在緩存中,直到緩存TTL過期為止。 如果在原始服務器中更新了一個對象,CloudFront不會知道這一點,但是會繼續從其緩存中為過時的對象提供服務。 為了避免提供過時的數據對象,CloudFront允許通過不同方式使對象緩存無效。
在AWS文檔中 ,您一次可以對每個分發進行多達3,000個文件的失效請求,每個失效請求可以包括多達3000個URL。 請注意,在啟動CloudFront緩存失效后,CloudFront需要幾分鐘的時間才能從所有邊緣位置刪除對象。 即可能需要一些時間才能獲得無效的結果。 失效所需的時間取決于失效請求中包含的對象URL的數量。
7.1通過AWS控制臺使對象無效
以下是使來自AWS Console的緩存對象無效的步驟。
- 登錄到AWS管理控制臺并打開CloudFront控制臺
- 選擇您要使文件無效的分發。
- 選擇分發設置,然后選擇無效選項卡。
- 選擇創建無效并輸入無效路徑,例如“ originserver / image / IMG54330080 *”。 該通配符路徑將刪除為imageId“ IMG54330080 “
7.2使用CLI(命令行界面)使對象無效
以下命令為給定分發ID的CloudFront分發創建無效。 命令語法:
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開發工具包使對象無效
以下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配置為將查詢參數轉發到Origin Server,則在使文件無效時必須包含查詢參數,因為CacheKey是使用創建緩存時包含的查詢參數創建的。 例如
http://cdn.originserver.com/image/IMG54330080?category=headshot&type=high-resolution&width=220&height=330&aspectRatio=3.5或者,您可以在無效網址中使用通配符*。 請注意,在這種情況下,所有具有與URL(帶通配符)匹配的CacheKeys的緩存條目都將失效。 例如
http://cdn.originserver.com/image/IMG54330080*當新對象/更新對象上載到S3時,AWS Lambda函數還可用于使CloudFront對象無效。
如圖6所示,將更新的對象上載到S3時,它將觸發Lambda函數,該函數會使CloudFront緩存中的對象無效。
圖6 :通過Lambda函數使CloudFront對象無效8.總結
AWS CloudFront是一項功能強大的內容緩存服務,可為您的網站或應用程序的用戶快速提供內容,而無需擔心網站或應用程序的托管位置以及用戶從何處訪問您的應用程序。 將此服務與Lambda,S3等其他AWS服務一起使用可幫助創建動態緩存,因此可以將近實時數據快速提供給用戶。 如果需要,還可以使CloudFront對象緩存無效。
翻譯自: https://www.javacodegeeks.com/2019/02/dynamic-content-caching-with-aws-lambda-s3-and-aws-cloudfront.html
aws lambda使用
總結
以上是生活随笔為你收集整理的aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 高清电脑桌面壁纸魔兽(魔兽高清壁纸手机壁
- 下一篇: 不起眼的意思 不起眼是什么意思
