AWS トラブルシューティング - ECS が環境変数を C# アプリケーションに渡す

依存関係: この記事では、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中设置的值]
测试执行完成

おすすめ

転載: blog.csdn.net/black0707/article/details/125482368