Flask 使用 boto3 仅返回最后一个值或第一个值

Flask returning only the last value or first value using boto3

我正在使用下面的脚本生成特定 IAM 角色名称的列表,它在控制台上工作得很好,并按预期列出 IAM 角色名称。

import boto3 
import logging
from botocore.exceptions import ClientError

logging.basicConfig(format='%(message)s')
logger = logging.getLogger('LUCIFER')
logger.setLevel(logging.INFO)

def main():
    try:
        client = boto3.client('iam')
        roles = client.list_roles(PathPrefix='/', MaxItems=1000)
        for i in roles["Roles"]:
            if "sts:AssumeRoleWithSAML".lower() in str(i).lower():
                logger.info(i["RoleName"])
        return i["RoleName"]
    
    except ClientError:
        logger.exception("Couldn't list roles for the account")
        raise

if __name__ == "__main__":
    main()

但是当我尝试通过下面的 flask 脚本提供这个脚本时,它只有 returns 最后一个值。

from flask import Flask
from main import main

app = Flask(__name__)

@app.route("/", methods = ['GET'])
def index():
    return main()

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=8080, debug=True)

有什么提示吗?我需要另一个 html 模板来提供它吗?

我的最终目标是通过 Vue.js 前端框架为其提供服务,如有任何想法,我们将不胜感激。

您可能将它与记录到控制台的输出混淆了。 只有最后一个值是从 main() 编辑的 return,当在控制台上 运行 时,你什么都不做。

实际上 return 一个值列表,如果 roles["Roles"] 是一个空列表,这也修复了一个错误,因为 i 不会被设置:

def main():
    try:
        client = boto3.client('iam')
        roles = client.list_roles(PathPrefix='/', MaxItems=1000)
        result = []
        for i in roles["Roles"]:
            if "sts:AssumeRoleWithSAML".lower() in str(i).lower():
                logger.info(i["RoleName"])
                result.append(i["RoleName"])
        return result
    
    except ClientError:
        logger.exception("Couldn't list roles for the account")
        raise

更新:returnJSON列表

from flask import jsonify

@app.route("/", methods = ['GET'])
def index():
    rolenames = main()
    return jsonify(rolenames)