使用Python如何从CI Jenkin服务器(每晚运行测试)中的AWS参数存储中获取数据
我花了很多时间在网上搜索这个答案 我知道如何在PC上本地运行代码时获取QA env aws_access_key_id和aws_secret_access_key,这些代码存储在我的C:\Users[name].aws配置文件中使用Python如何从CI Jenkin服务器(每晚运行测试)中的AWS参数存储中获取数据,python,amazon-web-services,parameters,Python,Amazon Web Services,Parameters,我花了很多时间在网上搜索这个答案 我知道如何在PC上本地运行代码时获取QA env aws_access_key_id和aws_secret_access_key,这些代码存储在我的C:\Users[name].aws配置文件中 [profile qa] aws_access_key_id = ABC aws_secret_access_key = XYZ [profile crossaccount] role_arn=arn:aws:ssm:us-east-1:12345678:parame
[profile qa]
aws_access_key_id = ABC
aws_secret_access_key = XYZ
[profile crossaccount]
role_arn=arn:aws:ssm:us-east-1:12345678:parameter/A/B/secrets/C
source_profile=qa
就像这段python代码一样,我实际上看到了正确的值
import boto3
session = boto3.Session(profile_name='qa')
s3client = session.client('s3')
credentials = session.get_credentials()
accessKey = credentials.access_key
secretKey = credentials.secret_key
print("accessKey= " + str(accessKey) + " secretKey="+ secretKey)
A) 当我的代码在CI上运行时,如何获取这些参数?我是否将“aws\u access\u key\u id”和“aws\u secret\u access\u key”作为参数传递给代码
B) 我如何确切地扮演角色并从AWS System manager参数存储中获取参数
既然我知道
secretsExternalId: 'DEF',
secretsRoleArn: 'arn:aws:ssm:us-east-1:12345678:parameter/A/B/secrets/C',
在CI服务器上安装boto3和botocore。 正如您提到的,CI(Jenkins)也在AWS上运行。您可以将角色附加到提供SSM读取权限的CI服务器(EC2) 下面是该角色的权限示例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:Describe*",
"ssm:Get*",
"ssm:List*"
],
"Resource": "*"
}
]
}
从python代码中,只需调用ssm即可获得参数值
$ export parameter_value1="/path/to/ssm/parameter_1"
$ export parameter_value2="/path/to/ssm/parameter_2"
你所说的CI具体是什么意思?AWS代码构建服务器?你办公室的詹金斯服务器?还有什么?是的,我刚刚更新了thx Jenkin服务器(每晚运行我的测试)摘要。Jenkins服务器是否在AWS上运行?是的,它既是我的单元测试,也是CI Jenkins在AWS上运行
import os
import boto3
session = boto3.Session(region_name='eu-west-1')
ssm = session.client('ssm')
MYSQL_HOSTNAME = os.environ.get('parameter_value1')
MYSQL_USERNAME = os.environ.get('parameter_value2')
hostname = ssm.get_parameter(Name=parameter_value1, WithDecryption=True)
username = ssm.get_parameter(Name=parameter_value2, WithDecryption=True)
print("Param1: {}".format(hostname['Parameter']['Value']))
print("Param2: {}".format(username['Parameter']['Value']))