boto3 ग्राहक NoRegionError: आपको कभी-कभी एक क्षेत्र त्रुटि निर्दिष्ट करनी चाहिए


147

मेरे पास एक boto3 क्लाइंट है:

boto3.client('kms')

लेकिन यह नई मशीनों पर होता है, वे गतिशील रूप से खुलते और बंद होते हैं।

    if endpoint is None:
        if region_name is None:
            # Raise a more specific error message that will give
            # better guidance to the user what needs to happen.
            raise NoRegionError()

ये क्यों हो रहा है? और समय का ही हिस्सा क्यों?


क्योंकि boto3 क्लाइंट डिफ़ॉल्ट क्रेडेंशियल विधि के सेट से AWS प्रोफ़ाइल नहीं ढूँढ सकता है: docs.aws.amazon.com/sdk-for-java/v1/developer-guide/…
मूटमूट

जवाबों:


326

एक या दूसरे तरीके से आपको यह बताना होगा कि आप kmsक्लाइंट को किस क्षेत्र में बनाना चाहते हैं । यह स्पष्ट region_nameरूप से पैरामीटर का उपयोग करके किया जा सकता है :

kms = boto3.client('kms', region_name='us-west-2')

या आपके पास आपकी ~/.aws/configफ़ाइल में आपकी प्रोफ़ाइल से जुड़ा एक डिफ़ॉल्ट क्षेत्र हो सकता है :

[default]
region=us-west-2

या आप निम्न के रूप में एक पर्यावरण चर का उपयोग कर सकते हैं:

export AWS_DEFAULT_REGION=us-west-2

लेकिन आपको यह बताने की आवश्यकता है कि किस क्षेत्र का उपयोग करना है।


2
मैं खुद को कैसे जानता हूं कि किस क्षेत्र का उपयोग करना है?
जोनोमो

1
यदि आप मौजूदा संसाधनों का उपयोग करने का प्रयास कर रहे हैं, तो उस क्षेत्र को चुनें जिसमें वे संसाधन मौजूद हैं। यदि आप नए संसाधन बनाने जा रहे हैं, तो ज्यादातर लोग एक ऐसे क्षेत्र का चयन करते हैं जो तेजी से प्रतिक्रिया समय के लिए भौगोलिक रूप से उनके सबसे करीब है। सभी क्षेत्र सेवाओं के एक ही सेट का समर्थन नहीं करते हैं, इसलिए यदि आपको किसी विशेष सेवा की आवश्यकता है तो सुनिश्चित करें कि आप ऐसा क्षेत्र चुनते हैं जो इसका समर्थन करता है।
गार्नेट

1
यह पता लगाने के लिए कि कौन से क्षेत्र कौन सी सेवाएं प्रदान करते हैं: अमेज़न वेब सेवा क्षेत्र तालिका aws.amazon.com/about-aws/global-infrastructure/…
Nick

2
क्या आप जानते हैं कि "निर्यात AWS_DEFAULT_REGION = us-west-2" या ~ / .aws / config फ़ाइल काम नहीं कर रही है
fatih tekin

3
मुझे लगता है कि boto3 सिर्फ उस ec2 उदाहरण के क्षेत्र का उपयोग कर सकता है जो कोड चला रहा है।
सेल्कुक सिहान

12
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'

मेरे मामले में संवेदनशीलता मायने रखती है।


4

मेरा मानना ​​है, डिफ़ॉल्ट रूप से, बोटो उस क्षेत्र को चुनता है जो अवीस क्ली में सेट है। आप अपने क्षेत्र की पुष्टि करने के लिए कमांड #aws कॉन्फ़िगर कर सकते हैं और एंटर दबा सकते हैं (यह दिखाता है कि आपने क्षेत्र के साथ क्लिक्स में कौन सा क्रेडिट सेट किया है)।


3

आप स्वयं भी स्क्रिप्ट चर क्षेत्र_नाम पैरामीटर पारित करने के बजाय, स्क्रिप्ट चर सेट कर सकते हैं

os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'

केस सेंसिटिविटी मायने रख सकती है।


AWS_DEFAULT_REGIONमामला संवेदनशील है।
जैमे एम।

यह होना चाहिए: os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' (ऊपरी मामला)
जो

2

पायथन 2 के लिए मैंने पाया है कि ~/.aws/configअगर किसी क्षेत्र को डिफॉल्ट रूप से डिफॉल्ट करने के लिए परिभाषित किया गया है तो boto3 लाइब्रेरी इस क्षेत्र को स्रोत नहीं बनाती है । तो आपको इसे सत्र निर्माण में परिभाषित करना होगा।

session = boto3.Session(
    profile_name='NotDefault',
    region_name='ap-southeast-2'
)

print(session.available_profiles)

client = session.client(
    'ec2'
)

जहाँ मेरी ~/.aws/configफ़ाइल इस तरह दिखती है:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

मैं ऐसा इसलिए करता हूं क्योंकि मैं विभिन्न लॉगिन के लिए विभिन्न प्रोफाइल का उपयोग एडब्ल्यूएस, पर्सनल और वर्क के लिए करता हूं।


0

CloudFormation टेम्पलेट का उपयोग करने वालों के लिए। आप AWS_DEFAULT_REGIONUserData और का उपयोग करके पर्यावरण चर सेट कर सकते हैं AWS::Region। उदाहरण के लिए,

MyInstance1:
    Type: AWS::EC2::Instance                
    Properties:                           
        ImageId: ami-04b9e92b5572fa0d1 #ubuntu
        InstanceType: t2.micro
        UserData: 
            Fn::Base64: !Sub |
                    #!/bin/bash -x

                    echo "export AWS_DEFAULT_REGION=${AWS::Region}" >> /etc/profile
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.