Flutter AWS SSM参数管理插件aws_ssm的使用

Flutter AWS SSM参数管理插件aws_ssm的使用

AWS Systems Manager Parameter Store 提供安全的层次化存储,用于配置数据管理和密钥管理。它可以存储密码、数据库字符串、Amazon Machine Image (AMI) ID 和许可证代码等数据作为参数值。

License: MIT aws_ssm

前置条件

用户池

创建用户池教程:创建用户池

  • 存储“用户池ID”值(用户池概述)
  • 在“应用集成”标签下的“应用客户端列表 -> 创建应用客户端”,至少有一个客户端应用。
  • 存储“客户端ID”值(应用客户端信息)

创建联合身份

创建身份池教程:创建身份池

  • 将“用户池ID”和“客户端ID”分配到“认证提供者 -> Cognito”字段中。
  • 创建自定义SSM角色:“身份池 -> 编辑身份池 -> 认证角色”
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters"
            ],
            "Resource": "*"
        }
    ]
}

获取Cognito用户JWT ID令牌

import 'package:amazon_cognito_identity_dart_2/cognito.dart';
...
final user = CognitoUser({{COGNITO_USER_NAME}}, CognitoUserPool(
  userPoolId,
  clientId,
));
CognitoUserSession? session = await user.authenticateUser(AuthenticationDetails(
  username: {{COGNITO_USER_NAME}},
  password: {{COGNITO_USER_PASSWORD}},
));
final idToken = session!.getIdToken().getJwtToken();

获取AWS Systems Manager参数列表

import 'aws_ssm.dart';
...
try {
  final names = ['db-url', 'my-username', 'my-password'];
  final ssm = AwsSSM(region, userPoolId, identityPoolId);
  final values = await ssm.getListParams(idToken, names);
  print(values); //['db-url-value', 'my-username-value', 'my-password-value']
} catch (ex) {
  print(ex);
}

获取AWS Systems Manager参数映射

import 'aws_ssm.dart';
...
try {
    final names = ['db-url', 'my-username', 'my-password'];
    final ssm = AwsSSM(region, userPoolId, identityPoolId);
    final values = await ssm.getListParams(idToken, names);
    print(values); //{'db-url': 'db-url-value', 'my-username': 'my-username-value', 'my-password': 'my-password-value'}
} catch (ex) {
  print(ex);
}

API列表

import 'aws_ssm.dart';
...
try {
    final ssm = AwsSSM(region, userPoolId, identityPoolId);
    final credentials = await ssm.getCognitoCredentialsForIdentity(idToken);
    final payload = ssm.createPayload(names, true);
    final datetime = await ssm.getServerDateTime();
    final headers = ssm.createAWS4Header(credentials, payload, datetime);
    final params = await ssm.getParameters(headers, payload);
    final values = ssm.toMap<String>(names, params);
    print(values);
} catch (ex) {
  print(ex);
}

更多关于Flutter AWS SSM参数管理插件aws_ssm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter AWS SSM参数管理插件aws_ssm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用AWS Systems Manager (SSM) 参数存储插件 aws_ssm 可以帮助你从AWS SSM中获取和管理参数。以下是如何使用 aws_ssm 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 aws_ssm 插件的依赖:

dependencies:
  aws_ssm: ^0.1.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置AWS凭证

在使用 aws_ssm 之前,你需要配置AWS凭证。你可以通过以下几种方式配置:

  • 环境变量:设置 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量。
  • 配置文件:在 ~/.aws/credentials 文件中配置AWS凭证。
  • IAM角色:如果你的应用程序运行在AWS环境中(如EC2、ECS、Lambda等),可以使用IAM角色。

3. 使用 aws_ssm 插件

以下是使用 aws_ssm 插件获取SSM参数的基本示例:

import 'package:aws_ssm/aws_ssm.dart';

void main() async {
  // 创建SSM客户端
  final ssm = SSM();

  // 获取SSM参数
  final parameterName = '/my-app/database-url';
  final response = await ssm.getParameter(parameterName);

  // 打印参数值
  print('Parameter Value: ${response.parameter?.value}');
}

4. 处理错误

在实际应用中,你需要处理可能的错误,例如参数不存在或网络错误:

import 'package:aws_ssm/aws_ssm.dart';

void main() async {
  final ssm = SSM();

  try {
    final parameterName = '/my-app/database-url';
    final response = await ssm.getParameter(parameterName);

    if (response.parameter != null) {
      print('Parameter Value: ${response.parameter?.value}');
    } else {
      print('Parameter not found');
    }
  } catch (e) {
    print('Error fetching parameter: $e');
  }
}

5. 获取多个参数

你还可以一次性获取多个参数:

import 'package:aws_ssm/aws_ssm.dart';

void main() async {
  final ssm = SSM();

  final parameterNames = ['/my-app/database-url', '/my-app/api-key'];
  final response = await ssm.getParameters(parameterNames);

  for (var param in response.parameters ?? []) {
    print('${param.name}: ${param.value}');
  }
}

6. 高级配置

你可以在创建SSM客户端时指定区域和其他配置:

import 'package:aws_ssm/aws_ssm.dart';

void main() async {
  final ssm = SSM(
    region: 'us-west-2',  // 指定AWS区域
  );

  // 获取参数
  final parameterName = '/my-app/database-url';
  final response = await ssm.getParameter(parameterName);

  print('Parameter Value: ${response.parameter?.value}');
}

7. 清理资源

如果你不再需要SSM客户端,可以关闭它以释放资源:

ssm.close();
回到顶部