Flutter AWS SSM参数管理插件aws_ssm的使用
Flutter AWS SSM参数管理插件aws_ssm的使用
AWS Systems Manager Parameter Store 提供安全的层次化存储,用于配置数据管理和密钥管理。它可以存储密码、数据库字符串、Amazon Machine Image (AMI) ID 和许可证代码等数据作为参数值。
前置条件
用户池
创建用户池教程:创建用户池
- 存储“用户池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_ID
和AWS_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();