Web*_*ube 97 python linux boto3 aws-kms
我有一个boto3客户端:
boto3.client('kms')
Run Code Online (Sandbox Code Playgroud)
但它发生在新机器上,它们动态地打开和关闭.
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()
Run Code Online (Sandbox Code Playgroud)
为什么会这样?为什么只有部分时间?
gar*_*aat 224
无论如何,您必须告诉boto3您希望在哪个区域kms创建客户端.这可以使用region_name参数显式完成,如下所示:
kms = boto3.client('kms', region_name='us-west-2')
Run Code Online (Sandbox Code Playgroud)
或者您可以在~/.aws/config文件中设置与您的个人资料相关联的默认区域,如下所示:
[default]
region=us-west-2
Run Code Online (Sandbox Code Playgroud)
或者您可以使用环境变量,如:
export AWS_DEFAULT_REGION=us-west-2
Run Code Online (Sandbox Code Playgroud)
但你需要告诉boto3使用哪个区域.
小智 17
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'
Run Code Online (Sandbox Code Playgroud)
就我而言,敏感性很重要。
小智 15
您还可以在脚本本身中设置环境变量,而不是传递region_name参数
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'
区分大小写可能很重要。
如果您使用 lambda,那么您可能希望使用部署 lambda 的区域。您可以使用以下命令
import boto3
import json
import os
def lambda_handler(event, context):
region = os.environ['AWS_REGION']
print('Lambda region: ', region)
kms = boto3.client('kms', region_name=region)
Run Code Online (Sandbox Code Playgroud)
regions = [
'eu-north-1', 'ap-south-1', 'eu-west-3', 'eu-west-2',
'eu-west-1', 'ap-northeast-3', 'ap-northeast-2'
'ap-northeast-1', 'sa-east-1', 'ca-central-1',
'ap-southeast-2', 'eu-central-1', 'us-east-1', 'us-east-2',
'us-west-1', 'us-west-2']
for r in regions:
kms = boto3.client('kms', region_name= r)Run Code Online (Sandbox Code Playgroud)
小智 6
对于 Python 2,我发现 boto3 库不会从该区域中获取该区域,~/.aws/config如果该区域在不同的配置文件中定义为默认值。所以你必须在会话创建中定义它。
session = boto3.Session(
profile_name='NotDefault',
region_name='ap-southeast-2'
)
print(session.available_profiles)
client = session.client(
'ec2'
)
Run Code Online (Sandbox Code Playgroud)
我的~/.aws/config文件如下所示:
[default]
region=ap-southeast-2
[NotDefault]
region=ap-southeast-2
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我对 AWS、个人和工作的不同登录使用了不同的配置文件。
或者,您可以运行以下命令(aws cli)
aws configure --profile $PROFILE_NAME
Run Code Online (Sandbox Code Playgroud)
它会提示您输入该区域。
注意其中~/.aws/config:
[default]
region = ap-southeast-1
output = json
[profile prod]
region = ap-southeast-1
output = json
Run Code Online (Sandbox Code Playgroud)
方括号中的[配置文件名称]