使用Python如何从CI Jenkin服务器(每晚运行测试)中的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

我花了很多时间在网上搜索这个答案

我知道如何在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: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']))