【每周快報】0930-1006 AWS 服務更新
前言
上週 AWS 推出了不少新功能來幫助使用者簡化開發流程以及改善服務整合,希望能帶給使用者更好的開發及管理體驗。這些服務包含了新推出的 AWS Cloud Control API 功能,這讓開發者不用再去學習每個服務的 API,大幅減少時間成本並簡化開發了流程。另外則是 AWS Step Functions 新增 200 多項 AWS 服務整合,不僅增加了整個無服務器架構的多樣性,也減少了使用者原先一定要透過 Lambda 來完成這些動作的麻煩。
上述服務外,我們也將介紹 EC2 Capacity Reservation Fleet、AWS Elastic Beanstalk、Amazon Location Service…各項服務的改善與優化。
焦點新聞
AWS 推出 AWS Cloud Control API 功能
AWS Cloud Control API 主要目的是為了簡化開發者管理雲端資源、有一致的準則且能夠快速與最新的服務整合。透過 Cloud Control API,開發者能夠使用五支 API 來管理上百種 AWS 的雲端資源,或是與其它第三方服務整合,好處就是不用再去學習每個服務的 API,這大幅的減少時間成本並簡化開發的過程。
舉例來說,你可以使用 CreateResource
API 來創建資源,無論是 AWS Lambda 、Amazon Elastic Container Service (ECS) cluster ,還是數百種其他 AWS 資源以及十幾種可用的第三方在 CloudFormation Registry 上的解決方案。
我們可以使用以下五個操作 API 的方式來管理雲端資源的生命週期:
如:CreateResource
, GetResource
, UpdateResource
, DeleteResource
, ListResource
。
相較於過去,假設我要查看我的 Lambda Function 或是 Kinesis 的狀態,我必需要去查找個別 API 文件,且每個服務的 API 格式也不相同。如以下範例:
aws lambda get-function --function-name TictactoeDatabaseCdkStack
{
"Configuration": {
"FunctionName": "TictactoeDatabaseCdkStack",
"FunctionArn": "arn:aws:lambda:us-west-2:0123456789:function:TictactoeDatabaseCdkStack",
"Runtime": "nodejs14.x",
"Role": "arn:aws:iam::0123456789:role/TictactoeDatabaseCdkStack",
"Handler": "framework.onEvent",
"CodeSize": 21539,
"Timeout": 900,
"MemorySize": 128,
"LastModified": "2021-06-07T11:26:39.767+0000",
...
aws kinesis describe-stream --stream-name AWSNewsBlog
{
"StreamDescription": {
"Shards": [
{
"ShardId": "shardId-000000000000",
"HashKeyRange": {
"StartingHashKey": "0",
"EndingHashKey": "340282366920938463463374607431768211455"
},
"SequenceNumberRange": {
"StartingSequenceNumber": "49622132796672989268327879810972713309953024040638611458"
}
}
],
"StreamARN": "arn:aws:kinesis:us-west-2:012345678901:stream/AWSNewsBlog",
"StreamName": "AWSNewsBlog",
"StreamStatus": "ACTIVE",
"RetentionPeriodHours": 24,
"EncryptionType": "NONE",
"KeyId": null,
"StreamCreationTimestamp": "2021-09-17T14:58:20+02:00"
}
}
但現在,我只需要透過 AWS Cloud Control API 就能快速得到結果了。
aws cloudcontrol get-resource \
--type-name AWS::Kinesis::Stream \
--identifier NewsBlogDemo
{
"TypeName": "AWS::Kinesis::Stream",
"ResourceDescription": {
"Identifier": "NewsBlogDemo",
"Properties": "{\"Arn\":\"arn:aws:kinesis:us-west-2:486652066693:stream/NewsBlogDemo\",\"RetentionPeriodHours\":168,\"Name\":\"NewsBlogDemo\",\"ShardCount\":3}"
}
}
參考來源至: AWS announces the general availability of AWS Cloud Control API
AWS Step Functions 新增 200 多項 AWS 服務整合
AWS Step Functions 是一個用來協調無服務器架構的服務,以往只有支援 17 項 AWS 服務與 46 支 API action,所以對大多數使用者來說可能都是透過 Lambda 來完成大多數的動作(例如:將資料匯入 DynameDB、儲存到 S3 bucket…)。
此次更新後,一口氣新增到了 200 多項 AWS 服務整合,使用方法就如同一般在使用 SDK 操作 AWS 服務一樣(因為背後就是 SDK),使用者可以透過 arn:aws:states:::aws-sdk:serviceName:apiAction.[serviceIntegrationPattern]
來決定該 state 的 API action,如下範例:
{
"Comment": "A State Machine that process a video file",
"StartAt": "GetSampleVideo",
"States": {
"GetSampleVideo": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:s3:copyObject",
"Parameters": {
"Bucket.$": "$.S3BucketName",
"Key.$": "$.SampleDataInputKey",
"CopySource.$": "States.Format('{}/{}',$.SampleDataBucketName,$.SampleDataInputKey)"
},
"ResultPath": null,
"Next": "StartTranscriptionJob"
},
"StartTranscriptionJob": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:transcribe:startTranscriptionJob",
"Parameters": {
"Media": {
"MediaFileUri.$": "States.Format('s3://{}/{}',$.S3BucketName,$.SampleDataInputKey)"
},
"TranscriptionJobName.$": "$$.Execution.Name",
"LanguageCode": "en-US",
"OutputBucketName.$": "$.S3BucketName",
"OutputKey": "transcribe.json"
},
"ResultPath": "$.transcription",
"End": true
}
}
}
這是一個將物件上傳至 S3 後會自動進行語音轉文字處理的流程。
上述範例的第一個 state: GetSampleVideo
中就設定了 "Resource": "arn:aws:states:::aws-sdk:s3:copyObject"
,代表要將物件複製到 S3,而此動作的相關參數都會寫在 Parameters
中(完全和我們在使用 SDK 一樣)。
而第二個 state: StartTranscriptionJob
則是要將上一個 state 傳入的物件透過 Transcribe 進行語音轉文字的動作("Resource": "arn:aws:states:::aws-sdk:transcribe:startTranscriptionJob"
)。
這次的更新大幅增加了整個無服務器架構的多樣性,也減少了使用者原先一定要透過 Lambda(程式碼)來完成這些動作的麻煩(畢竟還要另外維護程式碼)。
參考來源至:AWS Step Functions adds support for over 200 AWS Services with AWS SDK Integration
新增 EC2 Capacity Reservation Fleet 功能
Capacity Reservation Fleet 基本上就是 EC2 On-demand Capacity Reservations 的群組,Capacity Reservations 主要功用就是讓使用者確保在某時間段內的某 AZ 中需要維持多少 EC2 運算資源,在創建 Capacity Reservations 需要設定:
- AZ
- Instance 數量
- Instance 相關資訊(Instance Type、tenancy、OS…)
所以 Capacity Reservation Fleet 主要功能就是維持大規模的 EC2 數量(橫跨各種 Instance、AZ)部署,因此使用者可以預先將所有期望的 Instance 設定好,如圖:
{
"InstanceType": "instance_type",
"InstancePlatform":"platform",
"Weight": instance_type_weight
"AvailabilityZone":"availability_zone",
"AvailzbilityZoneId" : "az_id",
"EbsOptimized": true|false,
"Priority" : instance_type_priority
}
其中比較重要的是可以設定 Priority。
隨後便可以根據此設定創建 Capacity Reservation Fleet:
aws ec2 create-capacity-reservation-fleet \
--total-target-capacity capacity_units \
--allocation-strategy prioritized \
--instance-match-criteria open \
--tenancy dedicated|default \
--end-date yyyy-mm-ddThh:mm:ss.000Z \
--instance-type-specifications file://instanceTypeSpecification.json
其他服務更新
-
AWS Lambda now supports triggering Lambda functions from an Amazon SQS queue in a different account: 使用者現在可以透過單一 SQS 跨帳號觸發 Lambda,而無需在每一個帳號都做同樣的事件觸發設定。
-
Amplify Geo for AWS Amplify 正式 GA: 使用者可以透過 Amplify Geo 來替應用程式新增定位、導航、地圖等相關功能。
-
AWS Elastic Beanstalk 現在支援 Database 與 Elastic Beanstalk 環境解耦合的功能: 在過去若是使用 AWS Elastic Beanstalk 來打造應用程式環境時,AWS Elastic Beanstalk 會自動將 Database Instance 一併加入到開發環境的生命週期當中,導致若是整個環境出現問題時,Database 也會隨之故障。而現在 AWS Elastic Beanstalk 添加能在 Console 上面將 Database 獨立出來,或是在 aws:rds:dbinstance 的 namespace 使用 HasCoupledDatabase 和 DBDeletionPolicy 的選項來將 Database 與環境做到解耦合避免單點故障發生。
-
Amazon Location Service 添加追蹤位置變化功能: Amazon Location Service 可讓開發者將位置功能輕鬆新增至應用程式,並且可以做到追蹤和地理柵欄等功能。現在也可以透過 distance-based 來去篩選物體位置變化並進行追蹤,當物體與前一次的位置小於 30 公尺時則忽略不紀錄,當中只紀錄幾次比較重大的物體移動事件,並且可透過 API 觸發地理柵欄的功能。
-
Alternate Contact 現在支援使用 CLI 或 SDK 方式管理: 使用者可能在同一個帳號有許多如不同的 contact,如:operation, billing, security 等。在過去,每當有重要通知或是訊息時,都只能手動發送至不同的 contact,會導致不小心遺漏傳送至某個 contact 等情況。現在能透過 CLI 和 SDK 集中式的將訊息傳至不同的 contact,讓使用者更有效率的傳遞重要訊息。
-
Amazon SES 支援域名金鑰來辨識郵件:域名金鑰辨識郵件( DomainKeys Identified Mail,DKIM)是一套電子郵件認證機制,使用公開金鑰加密的基礎提供了數位簽章與身分驗證的功能,以避免電子郵件在傳輸的過程遭到竄改等惡意操作。現在 Amazon SES 也支援上述的加密功能了。
-
Amazon Monitron 支援 ios 應用程式:Amazon Monitron 為去年 AWS re:Invent 2020 推出的裝置服務,其目的是為了有效監控並且預測工廠端設備可能會發生的問題,透過機器學習的方式,能夠快速的偵測可能會發生的錯誤和異常,且在故障發生前就著手進行維護。 而現在 Amazon Monitron 也支援了 ios 系統的應用程式,使用者只需透過 NFC 傳輸,就能在手機上看到有關工業設備端的數據了。
-
AWS Snowcone SSD 正式發佈:AWS Snowcone 是 AWS Snow Family 最小的硬體裝置,其可有效將資料從邊緣運算裝置轉換到 AWS 雲端上,不過在過去使用者只有傳統硬碟(HDD) 能夠選擇,現在 AWS Snowcone 推出了固態硬碟 (SSD) 的選項供使用者使用。
-
Amazon SageMaker JumpStart 新增新的財務分析工具:藉由這個新的分析服務,使用者可以輕鬆檢索常見的公開財務資訊,包括 SEC 文件,並進一步處理具有情緒、訴訟、風險內容等類型的財務文本文件。並使用 Jupyter notebook 進行資料檢索、特徵工程、多模態分類和回歸模型。幫助使用者快速建立、部署相關領域的 AI 推理模型。
-
Amazon Sagemaker Studio 支援直接存取 Amazon EMR clusters 中的 Apache Spark, Hive 和 Presto 進行大規模資料處理和機器學習:使用者現在可以直接從 SageMaker Studio 透過點選即可連接到 Amazon EMR clusters。連接到 EMR clusters 後,使用者可以使用 Spark SQL、Scala、Python 和 HiveQL 以交互方式查詢、探勘和資料可視化,並透過 Apache Spark、Hive 和 Presto 來處理資料,如果再搭配 Graviton2 處理器的 Spot instance 又可以再大幅降低資料分析的成本,最後在安全性上可以使用 LDAP 或 Kerberos 等驗證機制在 Amazon EMR 集群進行身份驗證。不僅使用上更加方便,在成本優化及安全性上也設想周到。