我有一个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()
为什么会这样?为什么只有部分时间?
答案 0 :(得分:165)
您必须告诉boto3您希望在哪个区域创建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
但你需要告诉boto3使用哪个区域。
答案 1 :(得分:2)
我相信默认情况下,boto会选择aws cli中设置的区域。您可以运行#aws configure命令,然后按Enter键(它显示您在aws cli中带有区域的设置中的凭据)两次以确认您的区域。
答案 2 :(得分:1)
您还可以在脚本本身中设置环境变量,而不用传递region_name参数
os.environ['aws_default_region'] = 'your_region_name'
答案 3 :(得分:1)
对于Python 2,我发现如果在默认的其他配置文件中定义了区域,则boto3库不会从~/.aws/config
中获取区域。
因此,您必须在会话创建中对其进行定义。
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
之所以这样做,是因为我将不同的配置文件用于对AWS,Personal和Work的不同登录。
答案 4 :(得分:0)
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'
就我而言,敏感度很重要。
答案 5 :(得分:0)
对于使用CloudFormation模板的用户。您可以使用UserData和AWS_DEFAULT_REGION
设置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
答案 6 :(得分:0)
或者,您可以运行以下命令(aws cli)
aws configure --profile $PROFILE_NAME
它会提示您输入区域。
在~/.aws/config
中的通知是:
[default]
region = ap-southeast-1
output = json
[profile prod]
region = ap-southeast-1
output = json
[个人资料个人资料名称 ]放在方括号中