A. 在 AWS 管理控制台中,导航到
Cloud9
并单击
创建环境
。
B. 将环境命名为
FargateLab
,然后单击
下一步
。
C. 在配置设置页面上,保留符合免费套餐条件的实例类型的默认值,然后单击
下一步
。
D. 单击
创建环境
。
E. 等待环境完成创建,这需要几分钟时间。
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum -y update
sudo yum install dotnet-sdk-6.0
单击
Weather
表名称,进入其详细信息页面,然后单击
浏览表项目
。添加以下项目:
A.单击
创建项目
和
JSON 视图
。输入以下 JSON(Dallas, morning),然后单击
创建项目
。
"Location": {
"S": "Dallas"
"Timestamp": {
"S": "2022-07-23T06:00:00"
"Summary": {
"S": "Hot"
"TempC": {
"N": "33"
"TempF": {
"N": "92"
Code snippet copied
B.以同样的方式,使用以下 JSON 添加第二个项目(Dallas, mid-day):
"Location": {
"S": "Dallas"
"Timestamp": {
"S": "2022-07-23T12:00:00"
"Summary": {
"S": "Scorching"
"TempC": {
"N": "43"
"TempF": {
"N": "109"
Code snippet copied
C.使用以下 JSON 添加第三个项目(Dallas, evening):
"Location": {
"S": "Dallas"
"Timestamp": {
"S": "2022-07-23T18:00:00"
"Summary": {
"S": "Hot"
"TempC": {
"N": "36"
"TempF": {
"N": "97"
Code snippet copied
D.使用以下 JSON 添加第四个项目(Minnesota, morning):
"Location": {
"S": "Minneapolis"
"Timestamp": {
"S": "2022-07-23T06:00:00"
"Summary": {
"S": "Cool"
"TempC": {
"N": "13"
"TempF": {
"N": "56"
Code snippet copied
E.使用以下 JSON 添加第五个项目(Minnesota, mid-day):
"Location": {
"S": "Minneapolis"
"Timestamp": {
"S": "2022-07-23T12:00:00"
"Summary": {
"S": "Balmy"
"TempC": {
"N": "22"
"TempF": {
"N": "72"
Code snippet copied
F.使用以下 JSON 添加第六个项目(Minnesota, evening):
"Location": {
"S": "Minneapolis"
"Timestamp": {
"S": "2022-07-23T18:00:00"
"Summary": {
"S": "Balmy"
"TempC": {
"N": "19"
"TempF": {
"N": "67"
Code snippet copied
检查您的成果
现在,您应该:
✓ 有一个名为 Weather 的 DynamoDB 表,并且表中填充了 6 个项目。
C.
添加 DynamoDB SDK
包。运行以下
dotnet add package
命令,将
AWSSDK.DynamoDBv2
包添加到项目中。我们需要这个库来与 Amazon DynamoDB 服务通信。
dotnet add package AWSSDK.DynamoDBv2
已生成的项目是 WeatherForecast API,在 .NET 示例中很常用。
A.要试用该项目,请 1) 在 IDE 中按 F5,或 2) 从命令行运行 dotnet run 并浏览到端点地址,其中 /swagger/index.html 位于路径末尾。
B.在打开的浏览器选项卡中,您会看到一个 Swagger 界面。请注意,该服务有一个 /WeatherForecast 操作,可返回模拟天气数据 JSON。通过单击“获取”、“试用”和“执行”来对其进行测试。注意 JSON 响应。您可能会在浏览器中看到有关 HTTPS 的“不安全”指示符,也可能不会看到,具体取决于您是否接受本地 SSL 证书。
C.停止运行程序。
我们的 Web API 将在端口 8080(HTTP)和 8443(SSL)上运行。在代码编辑器中打开 Properties/launchSettings.json。在第 17 行中,将 applicationUrl 值更改为:
"applicationUrl": "https://localhost:8443;http://localhost:8080",
Code snippet copied
打开 Controllers 文件夹中的 WeatherForecastController.cs,然后将其替换为以下代码。在第 12 行中,将
RegionEndpoint
设置为您正在其中运行的区域。此代码将在服务的根路径上实施运行状况检查方法,并在 /WeatherForecast 实施 WeatherForecast 方法。
/WeatherForecast 方法采用位置参数并从 DynamoDB Weather 表中为其检索数据。它对表执行扫描,以查找分区键与位置相匹配的记录。匹配的 DynamoDB 项目存储在 WeatherForecast 对象列表中。结果以 JSON 记录数组的形式返回。
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Amazon;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DocumentModel;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace WeatherAPI.Controllers;
[ApiController]
[Route("")]
public class WeatherForecastController : ControllerBase
static readonly RegionEndpoint region = RegionEndpoint.USWest2;
private readonly ILogger _logger;
public WeatherForecastController(ILogger logger)
_logger = logger;
[HttpGet("")]
public string GetHealthcheck()
return "Healthcheck: Healthy";
[HttpGet("WeatherForecast")]
public async Task<WeatherForecast[]> GetWeatherForecast(string location = "Dallas")
List<WeatherForecast> forecasts = new List<WeatherForecast>();
_logger.LogInformation($"00 enter GET, location = {location}");
var client = new AmazonDynamoDBClient(region);
Table table = Table.LoadTable(client, "Weather");
var filter = new ScanFilter();
filter.AddCondition("Location", ScanOperator.Equal, location);
var scanConfig = new ScanOperationConfig()
Filter = filter,
Select = SelectValues.SpecificAttributes,
AttributesToGet = new List<String> { "Location", "Timestamp", "TempC", "TempF", "Summary" }
_logger.LogInformation($"10 table.Scan");
Search search = table.Scan(scanConfig);
List<Document> matches;
_logger.LogInformation($"20 table.GetNextSetAsync");
matches = await search.GetNextSetAsync();
foreach (var match in matches)
forecasts.Add(new WeatherForecast
Location = Convert.ToString(match["Location"]),
Date = Convert.ToDateTime(match["Timestamp"]),
TemperatureC = Convert.ToInt32(match["TempC"]),
TemperatureF = Convert.ToInt32(match["TempF"]),
Summary = Convert.ToString(match["Summary"])
} while (!search.IsDone);
_logger.LogInformation($"30 exited results loop");
catch (Exception ex)
_logger.LogError(ex, "90 Exception");
_logger.LogInformation($"99 returning {forecasts.Count} results");
return forecasts.ToArray();
Code snippet copied
✓ 已安装 AWSDK.DynamoDBv2 NuGet 包
✓ 在 Program.cs 中注释掉 HTTPS 重定向
✓ 将 WeatherForecastController.cs 更新为根运行状况检查方法和查询 DynamoDB 天气表的 WeatherForecast 方法
✓ 将 WeatherForecastController.cs 区域变量设置为您运行所在的区域
注意:每次运行 dotnet aws deploy 时,选项列表和顺序可能会有所不同。
C.如果系统提示您选择现有的 AWS 部署目标,请选择部署到新的云应用程序选项。
D.选择“使用 Fargate 从 ASP.NET Core App 部署到 Amazon ECS”选项。
E.对于新 CloudFormation 堆栈的名称,请按 Enter 接受默认名称 WeatherAPI。
显示当前设置时,输入 more 以查看高级设置。随即将显示设置的编号列表。输入 9 选择 Elastic Load Balancer,按如下提示操作:
A.创建新的负载均衡器:y
B.取消注册延迟:180
C.运行状况检查路径:/
D.运行状况检查超时:5
E.运行状况检查间隔:120
F.运行正常阈值计数:2
G.运行不正常阈值计数:2
A.按 Enter 开始部署。部署将创建 1 个负载均衡器、3 个 ECS 任务并创建新角色。
B.等待服务进行容器化和部署,这需要几分钟时间。完成后,记下输出末尾的部署详细信息。
C. 记录“应用程序端点”下的详细信息。您将需要端点来测试服务。
RUN apt-get update -yq \
&& apt-get install curl gnupg -yq \
&& curl -sL https://deb.nodesource.com/setup_14.x | bash \
&& apt-get install nodejs -yq
RUN dotnet publish "WeatherAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WeatherAPI.dll"]
Code snippet copied
审查 AWS 管理控制台中部署的内容:
A.在 AWS 管理控制台中,导航到
ECS
。
B.从左侧窗格中选择
集群
,应该会列出
WeatherAPI
集群。您应该看到一个包含 1 个服务和 3 个正在运行的任务的集群。(图 1)
C.单击
WeatherAPI
集群名称以查看其详细信息。浏览选项卡以查看已部署的内容。在“任务”选项卡上,您应该看到 3 个启动类型为 FARGATE 的正在运行的任务。(图 2)
A.在 AWS 管理控制台中,导航到
IAM
B.从左侧窗格中选择
策略
,然后单击
创建策略
。
C.创建策略并输入以下 JSON,将 [account] 替换为您的 12 位 AWS 账号,并将 [region] 替换为您的区域(例如:us-west-2)。
"Version": "2012-10-17",
"Statement": [
"Sid": "",
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:[region]:[account]:table/Weather"
Code snippet copied
D.依次单击
下一步:标签
和
下一步:查看
。 将策略命名为
ddb-Weather
,然后单击
创建策略
。
ECS 服务尚无访问 Weather DynamoDB 表的权限。更新角色以添加 2 个策略:
A.在 AWS ECS 控制台中,单击
WeatherAPI
集群以查看其详细信息。
B.单击
WeatherAPI-service
以查看服务详细信息。
C.选择
配置和任务
选项卡,然后单击
任务定义
链接。
D.单击
任务角色
链接。这会将您转至 IAM 控制台中的角色定义位置。
E.单击
添加权限 > 附加策略
。
F.查找并选择
ddb-weather
权限
G.查找并选择
AmazonDynamoDBFullAccess
权限。
H.单击
附加策略
。
A.打开命令/终端窗口并持续交付到开发文件夹。您可以使用在步骤 4-1 中使用的相同文件夹。
B.运行以下
dotnet
new 命令,创建一个名为 WeatherAPI 的新 Web API 项目。
dotnet new webapp -n WeatherSite
C.持续交付到 WeatherSite 项目文件夹。
已生成的项目是一个简单的 Web 应用程序,在 .NET 示例中很常用。
A.要试用该项目,请 1) 在 IDE 中按 F5,或 2) 从命令行运行 dotnet run 并浏览到端点地址。
B.在打开的浏览器选项卡中,您会看到一个带有欢迎消息的简单页面。
C.停止运行程序。
在代码编辑器中打开 appsettings.json 并替换为以下代码,将 [service-address] 替换为 WeatherAPI ECS 服务的端点地址。WeatherAPI 服务地址末尾不应有斜杠。
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
"AllowedHosts": "*",
"AppSettings": {
"WeatherAPI": "http://[service-address]"
Code snippet copied
在代码编辑器中打开 Pages/Index.cshtml.cs,然后将其替换为下面的代码。这是 Razor 页面 Index.cshtml 的代码隐藏文件。
WeatherAPI 服务的 URL 是从 appSettings.json 中的设置读取的。/WeatherForecast 路由采用位置参数并从 DynamoDB Weather 表中为其检索数据。结果以 JSON 记录数组的形式返回。