亚马逊云科技精选博客
我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
新增:提高了使用 亚马逊云科技 开发工具包和工具配置终端节点 URL 时的灵活性
亚马逊云科技 开发工具包和工具团队很高兴地宣布,通过 AW
以前,您可以通过在调用 亚马逊云科技 CLI 或向开发工具包客户端构造函数提供终端节点时设置 --endpoint-url 命令行参数来指定用于 AWS 请求的终端节点 URL
。在测试和生产环境(例如
这篇文章演示了在通过 亚马逊云科技
先决条件
要在 亚马逊云科技 CLI 中使用此功能,您必须安装 亚马逊云科技 CLI 1.29.0 或更高版本或 2.13.0 或更高版本。要安装 亚马逊云科技 CLI,请按照《亚马逊云科技 CLI 用户指南
这篇文章使用 Docker 容器镜像在本地实现
为所有 API 请求配置端点 URL
首先,我们演示如何设置用于使用 亚马逊云科技 CLI 发出的所有 API 请求的终端节点 URL。可以通过以下方式启动 Amazon DynamoDB 本地实现,打开端口 8080 以接受 API 请求并将其定向到 Docker 容器内的端口 8000:
$ docker run --rm -p 8080:8000 amazon/dynamodb-local
注意: --rm
标志表示命令退出时要清理容器。默认情况下,即使容器退出,容器的文件系统仍然存在。
你可以使用 http://localhost:8080
网址连接到此端口 。您可以将此终端节点 URL 与 亚马逊云科技 CLI 的 aws dynamodb 命令一起使用,向 在
Docker 容器中运行的亚马逊 DynamoDB 本地服务发送请求。
以前,您只能将此终端节点 URL 与 --endpoint-url 参数一起使用 AWS
CLI。让我们在本地实现中使用 --endpoin
t-url 参数创建一个表:
$ aws --endpoint-url http://localhost:8080/ dynamodb create-table \
--table-name MyLocalTable \
--attribute-definitions AttributeName=ColumnA,AttributeType=S AttributeName=ColumnB,AttributeType=S \
--key-schema AttributeName=ColumnA,KeyType=HASH AttributeName=ColumnB,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
使用环境变量
使用新功能,你可以通过环境变量
AWS_ENDPOINT_URL 设置端点
,现在你可以列出新创建的 myLocalTable 表:
$ export AWS_ENDPOINT_URL=http://localhost:8080/
$ aws dynamodb list-tables
{
"TableNames": [
"MyLocalTable"
]
}
要停止使用 AWS_ENDPOINT_URL
配置的终端节点 URL,您必须在您的环境中将其取消设置:
$ unset AWS_ENDPOINT_URL
使用 SDK 共享配置文件
这项新功能还允许您在 SDK 共享配置文件中的配置文件中设置端点 URL。将以下配置文件添加到您的共享配置文件中(默认情况下,此文件位于 ~/.aws/config
):
[profile local]
endpoint_url=http://localhost:8080/
现在你可以在 亚马逊云科技 CLI 命令 中使用 本地
配置文件并将一个项目放入 myLocalTable 表
中:
$ aws --profile local dynamodb list-tables
{
"TableNames": [
"MyLocalTable"
]
}
为特定服务配置端点 URL
通过 AWS_ENDPOINT_URL 环境变量或 endpoint_ur
l 配置文件属性设置终端节 点 URL
的一个限制是,所有 API 请求,包括发送到其他 亚马逊云科技 服务的请求,都将定向到该终端节点 URL。如果您只使用单个 亚马逊云科技 服务,或者如果您使用的是 LocalStack 等第三方本地开发环境,这可能会很方便。
但是,您可能需要更好地控制哪些 亚马逊云科技 服务使用不同的终端节点 URL。要仅向端点发送 DynamoDB API 请求,您可以通过环境变量和 SDK 共享配置文件配置服务特定的端点 URL。
使用环境变量
要为亚马逊 DynamoDB API 请求设置服务特定的端点 URL,请 使用
亚马逊云科技_ENDPOINT_URL_DYNAMODB 环境变量 并检索我们之前插入的项目:
$ AWS_ENDPOINT_URL_DYNAMODB=http://localhost:8080/ aws dynamodb list-tables
{
"TableNames": [
"MyLocalTable"
]
}
此技术适用于任何 亚马逊云科技 服务。可用列表可以在
使用 SDK 共享配置文件
现在,您还可以在 SDK 共享配置文件中的配置文件中配置服务特定的端点 URL。为此,您将使用服务部分并将其与配置文件相关联。服务部分包含您要配置的 亚马逊云科技 服务的子部分。通过服务配置文件参数在配置文件中引用服务部分。
此技术适用于任何 亚马逊云科技 服务。可用服务部分名称的完整列表可以在
例如,要将 亚马逊云科技 DynamoDB 终端节点配置到本地 Docker 容器,请将以下配置文件和服务部分添加到您的共享配置文件中:
[profile production]
region=us-west-2
[profile local]
region=us-west-2
services=local-services
[services local-services]
dynamodb =
endpoint_url=http://localhost:8080/
现在,您可以使用 亚马逊云科技 CLI 命令 中的 本地
配置文件向 Amazon DynamoDB 本地安装发出请求:
$ aws --profile local dynamodb list-tables
{
"TableNames": [
"MyLocalTable"
]
}
然后,在不更改其他配置的情况下,您可以指定 生产
配置文件以向 Amazon DynamoDB 网络服务发出请求:
$ aws --profile production dynamodb list-tables
注意:此命令的输出取决于您是否在 Amazon DynamoDB 网络服务中创建了任何表。
这使您能够将决定使用哪个端点 URL 的配置保存在脚本之外并保留在官方支持的配置位置中。
有关指定自定义端点 URL 时共享配置文件语法的详细信息,请参阅 “
为多个服务配置端点 URL
您还可以将 亚马逊云科技 CLI 与多个 亚马逊云科技 服务一起使用。这项新功能允许您同时为每项服务配置单独的自定义端点 URL。可以在 例如,要在本地同时使用 AWS Step Func tions 和 Amazon DynamoDB 本地功能,在使用 aws stepfunctions 命令时,您可以使用环境
变量
AWS_ENDPOINT_URL_SFN 或服务部分 sfn 来设置终端节点。
可以使用以下命令启动 亚马逊云科技 Step Functions 的本地实施:
$ docker run --rm -p 8083:8083 amazon/aws-stepfunctions-local
与亚马逊 DynamoDB 本地示例类似,您可以使用 URL http://localhost:8083 连接到此端口。
您可以将此终端节点 URL 与 亚马逊云科技 CLI 的 a ws stepf unctions 命令一起使用,向在 Docker 容器中运行的 AWS Ste
p Functions 本地服务发送请求。
要使用这两个本地实现,可以同时将两个环境变量设置为各自的端点 URL:
$ export AWS_ENDPOINT_URL_DYNAMODB=http://localhost:8080/
$ export AWS_ENDPOINT_URL_SFN=http://localhost:8083/
然后使用我们的本地实现创建 亚马逊云科技 Step Functions 状态机:
$ aws stepfunctions create-state-machine \
--name HelloWorldLocal \
--definition '{"StartAt": "HelloWorld", "States": {"HelloWorld": {"Type": "Pass", "Result": "Hello World", "End": true}}}'
--role-arn "arn:aws:iam::123456789012:role/HelloWorldLocalRole"
{
"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLocal",
"creationDate": "2023-07-12T13:48:26.507000-07:00"
}
现在,列出表和状态机:
$ aws dynamodb list-tables # Uses the endpoint from AWS_ENDPOINT_URL_DYNAMODB
{
"TableNames": [
"MyLocalTable"
]
}
$ aws stepfunctions list-state-machines # Uses the endpoint from AWS_ENDPOINT_URL_SFN
{
"stateMachines": [
{
"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLocal",
"name": "HelloWorldLocal",
"type": "STANDARD",
"creationDate": "2023-07-12T13:48:26.507000-07:00"
}
]
}
和以前一样,取消设置环境变量以停止使用配置的端点 URL:
$ unset AWS_ENDPOINT_URL_DYNAMODB
$ unset AWS_ENDPOINT_URL_SFN
您还可以在开发工具包共享配置文件中定义这两个终端节点,并在调用 亚马逊云科技 CLI 时指定配置文件。将以下配置文件和服务部分添加到您的共享配置文件中:
[profile local]
region=us-west-2
services=local-services
[services local-services]
dynamodb =
endpoint_url=http://localhost:8080/
sfn =
endpoint_url=http://localhost:8083/
使用 --profile local
调用 亚马逊云科技 CLI 将分别使用 aws dynamodb 和 aws stepfunctions 命令的指定亚马逊 Dynamo D
B 和 亚马逊云科技 Step Function s 端点网址
:
$ aws dynamodb list-tables --profile local
{
"TableNames": [
"MyLocalTable"
]
}
$ aws stepfunctions list-state-machines --profile local
{
"stateMachines": [
{
"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLocal",
"name": "HelloWorldLocal",
"type": "STANDARD",
"creationDate": "2023-07-12T13:48:26.507000-07:00"
}
]
}
配置端点 URL 的优先顺序
您可以同时使用上述任何一种方法配置端点 URL。使用的终端节点 URL 由 亚马逊云科技 CLI 确定,优先级顺序如下:
- 由
--endpoint-url 命令行参数
提供的值。 - 由服务特定的环境变量(如
AWS_ENDPOINT_URL_
DYNAMODB)提供的值。 - 全局端点环境变量 (
AWS_ENDPOINT_
URL) 提供的值。 - 共享配置文件中服务定义部分的
endpoint_url
参数提供的值。 - 共享配置文件中配置文件中的
endpoint_url
参数提供的值。
如果未以上述任何方式配置终端节点 URL,则 亚马逊云科技 CLI 将使用相应 亚马逊云科技 服务的默认终端节点 URL。
有关 亚马逊云科技 SDK 参数优先顺序的更多信息,请参阅 “
忽略已配置的端点 URL
如果你想忽略 SDK 共享配置文件或环境变量中配置的端点网址,你可以使用配置文件参数 ignore_configured_endpoint_urls=true 或环境变量 aws_ignore_conf
请注意,设置这两个参数中的任何一个都不会阻止使用提供给 igured_endpoint_urls=Tru
e。 --endpoint-url 命令行参数的端点
。要详细了解如何禁用此功能,请参阅
正在清理
如果你启动了任何 Docker 容器,请务必在完成本文中的示例后,通过终止进程或关闭运行它们的终端来关闭它们。另外,请务必关闭您正在使用的终端窗口或取消设置本文中使用的任何环境变量:
$ unset AWS_ENDPOINT_URL
$ unset AWS_ENDPOINT_URL_DYNAMODB
$ unset AWS_ENDPOINT_URL_SFN
下一步行动
在这篇文章中,我们演示了在使用 亚马逊云科技 CLI 时如何简化终端节点 URL 的配置。这些示例仅描述了使用此功能的一种方法。其他用例包括配置 亚马逊云科技 安全令牌服务 (亚马逊云科技 STS)
目前支持此功能的 亚马逊云科技
有关更多信息,请参阅
作者简介: