วิธีเลือกโปรไฟล์ AWS เมื่อใช้ boto3 เพื่อเชื่อมต่อกับ CloudFront


128

ฉันใช้ Boto 3 python library และต้องการเชื่อมต่อกับ AWS CloudFront ฉันต้องการระบุโปรไฟล์ AWS ที่ถูกต้อง (AWS Credentials) แต่เมื่อดูเอกสารอย่างเป็นทางการแล้วฉันไม่พบวิธีระบุ

ฉันกำลังเริ่มต้นไคลเอนต์โดยใช้รหัส: client = boto3.client('cloudfront')

อย่างไรก็ตามผลลัพธ์นี้ใช้โปรไฟล์เริ่มต้นในการเชื่อมต่อ ฉันไม่พบวิธีการที่ฉันสามารถระบุได้ว่าจะใช้โปรไฟล์ใด


ดูเพิ่มเติม: อ่านและดาวน์โหลดไฟล์จาก AWS S3 พร้อมโปรไฟล์
Martin Thoma

คุณได้ลองใช้คีย์ในรหัสหรือไม่? (คุณสามารถใช้ env var เพื่อซ่อนจากรหัสได้)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

คำตอบ:


225

ฉันคิดว่าเอกสารไม่ได้ยอดเยี่ยมในการเปิดเผยวิธีการทำสิ่งนี้ อย่างไรก็ตามมันเป็นคุณสมบัติที่รองรับมาระยะหนึ่งแล้วและมีรายละเอียดบางอย่างในคำขอดึงนี้

มีสามวิธีในการทำสิ่งนี้:

ตัวเลือก A) สร้างเซสชันใหม่ด้วยโปรไฟล์

    dev = boto3.session.Session(profile_name='dev')

ตัวเลือก B) เปลี่ยนโปรไฟล์ของเซสชันเริ่มต้นในโค้ด

    boto3.setup_default_session(profile_name='dev')

ตัวเลือก C) เปลี่ยนโปรไฟล์ของเซสชันเริ่มต้นด้วยตัวแปรสภาพแวดล้อม

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')

1
ตัวแปร env ควรเป็น AWS_PROFILE ไม่ใช่หรือ
Stefano M

ขอบคุณสำหรับสิ่งนั้น! ดูเหมือนว่าจะไม่พบข้อมูลนั้นจากที่ใดเลย ดูเหมือนว่าฉันต้องการเพียงขั้นตอนที่ 2 เพื่อให้ทำงานนี้ได้ ขั้นตอนที่ 1 ทำอะไร (เนื่องจากไม่ได้ใช้ตัวแปร dev หรือส่งผ่านไปยังสิ่งอื่น?)
ทำเครื่องหมาย

40
นี่คือตัวเลือกไม่ใช่ขั้นตอน ในตัวเลือกแรกคุณจะสร้างเซสชันใหม่เพื่อใช้แทนเซสชันเริ่มต้น ดังนั้นในการสร้างลูกค้าด้วยเซสชันนั้นคุณจะต้องทำสิ่งที่ต้องการdev.client('s3')แทนboto3.client('s3')
Jordon Phillips

นอกหัวข้อipythonก็มีประโยชน์สำหรับฉันเช่นกัน
Mike D

7
รับรายการโปรไฟล์โดยใช้boto3.session.Session().available_profiles- เป็นรายการ จากนั้นใช้อันที่คุณต้องการ @ jordan-phillips
Daisuke Aramaki

35

ทำสิ่งนี้เพื่อใช้โปรไฟล์ชื่อ 'dev':

session = boto3.session.Session(profile_name='dev')
s3 = session.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

25

ส่วนนี้ของเอกสาร boto3 มีประโยชน์

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

session = boto3.Session(profile_name='dev')
client = session.client('cloudfront')

5

เพียงแค่เพิ่มโปรไฟล์ในการกำหนดค่าเซสชันก่อนเรียกไคลเอนต์ boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.