我正在使用以下腳本生成特定 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()
但是當我嘗試通過下面的燒瓶腳本提供這個腳本時,它只回傳最后一個值。
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 前端框架為它提供服務,任何關于它的想法都將受到高度贊賞。
uj5u.com熱心網友回復:
您可能將它與您登錄到控制臺的輸出混淆了。只是從回傳的最后一個值main(),在控制臺上運行時你什么也不做。
實際上回傳一個值串列,如果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
更新:回傳 JSON 串列
from flask import jsonify
@app.route("/", methods = ['GET'])
def index():
rolenames = main()
return jsonify(rolenames)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/465638.html
標籤:Python python-3.x 亚马逊网络服务 烧瓶 博托3
