依存関係: この記事では、AWS アーキテクチャ設計の基本を理解している必要があります。
シーン:
アプリケーション プログラムまたは Lambda プログラム、およびすべてのデータベース キーは secretsmanager で管理されます。
アプリケーションや Lambda をデプロイする場合、秘密鍵情報を C# の appconfig.json ファイルに渡す必要があります。
1.ECS をデプロイする
「AWS 設計の高可用性プログラム アーキテクチャ - ECS Cloudformation」を参照してください。
最も重要な構成アイテムの情報
ContainerDefinitions:
- Name:
!Join [ "-", [ !Ref CustomerName, !Ref ProjectName, !Ref SubProjectName, !Ref EnvironmentName, "container", ], ]
Image: !Sub ${
AWS::AccountId}.dkr.ecr.${
AWS::Region}.amazonaws.com.cn/${
CustomerName}-${
ProjectName}-${
SubProjectName}-${
EnvironmentName}-ecr:latest
PortMappings:
- ContainerPort: 80
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: !Ref 'AWS::Region'
awslogs-group: !Ref LogGroup
awslogs-stream-prefix: ecs
Secrets:
- Name: connectionString
#{Secret} 是SecretsManager中的ARN
#S3BktName是配置项的名称
ValueFrom: !Sub "${Secret}:CONN::"
Environment:
- Name: ECS_ROLE_ARN
Value: !Sub arn:aws-cn:iam::${
AWS::AccountId}:role/${
CustomerName}-${
ProjectName}-ecs-${
EnvironmentName}-iamr
上記の connectionString は、SecretsManager に格納されている CONN 値であり、C# アプリケーションに渡されます。
2. アプリケーションを作成する
VisualStudio コンソール プロジェクトの作成、Net6 バージョン
デフォルトのプロジェクト名は次のとおりです。
ConsoleApp1
appsettings.json ファイルを追加します
{
"connectionString": "json文件中的配置值"
}
program.cs コードを追加
using Microsoft.Extensions.Configuration;
//第一步,依赖两个Nuget包
//Microsoft.Extensions.Configuration.EnvironmentVariables
//Microsoft.Extensions.Configuration.Json
//第二步,配置自定义appsettings.json文件和AddEnvironmentVariables 环境变量
// 覆盖的顺序取决于Add的顺序
var configuration = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json")
.AddEnvironmentVariables();
var config = configuration.Build();
//打印环境变量
var sPath = Environment.GetEnvironmentVariable("connectionString");
Console.WriteLine($"{sPath}");
//打印配置文件的设置
var connectionString = config["connectionString"];
Console.WriteLine($"{connectionString}");
Console.WriteLine("测试执行完成");
Console.ReadLine();
プロジェクトを右クリック -> 追加 -> docker support
需要本地安装Docker Desktop
コンパイルするリリースを選択し、F5 で実行します
ローカルデバッグ効果
DockerDesktop でコンテナー ConsoleApp1 を表示する
[空白]
json文件中的配置值
测试执行完成
説明: 環境変数が設定されていないため、最初の行は空白です
CMDを開いてコマンドを実行します
docker run -d -it -e connectionString='staging' consoleapp1:latest
再度 DockerDesktop に入り、新しいコンテナー ConsoleApp1 を表示します。
=staging
staging
测试执行完成
3.AWS運用効果
AWS ECS に入り、タスク定義に切り替えて、最初のステップで作成したタスクを選択します。
タスクを実行し、10 秒待って、クラスターに入ります->タスク->停止
タスクを表示 -> ログ出力
=[你在SecretsManager-CONN中设置的值]
[你在SecretsManager-CONN中设置的值]
测试执行完成