跳转到主要内容

LocalStack扩展:AWS复制器

项目描述

AWS Replicator Extension(实验性)

Install LocalStack Extension

LocalStack扩展,用于将AWS资源复制到您的本地计算机。

⚠️请注意,此扩展为实验性,目前正在积极开发中。

先决条件

  • LocalStack Pro
  • Docker
  • Python

概述

此扩展目前提供两种操作模式:(1)AWS连接代理和(2)资源复制器CLI。

AWS连接代理

本地Stack中的AWS连接代理可以用来将某些API调用转发到真实的AWS,以便实现本地资源和远程资源之间的无缝过渡。

警告:在使用代理时请小心 - 确保永远不要将访问权限提供给生产账户或任何关键/敏感数据!

注意:当前,replicator CLI仅在通过pip安装localstack CLI时才工作。如果您作为二进制发布下载localstack CLI,请使用下文描述的代理配置UI。

使用方法

CLI

例如,为了将DynamoDB/S3/Cognito的所有API调用转发到真实AWS,可以通过以下方式通过CLI启动代理

  1. 通过CLI启动LocalStack
$ localstack start -d
  1. 从Web应用程序扩展库启用LocalStack AWS replicator
  2. 安装后重新启动Localstack
  3. 安装AWS replicator CLI包
$ pip install localstack-extension-aws-replicator
  1. 在新的终端会话中配置真实云账户凭据以允许访问
$ export AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=...
  1. 在上述终端会话中通过CLI启动代理
$ localstack aws proxy -s dynamodb,s3,cognito-idp
  1. 现在,当对LocalStack发出API调用(例如,通过awslocal)时,调用将被转发到真实AWS,并且应该返回您真实云资源的数据。

代理配置UI

  1. 以额外的CORS启动Localstack
EXTRA_CORS_ALLOWED_ORIGINS=https://aws-replicator.localhost.localstack.cloud:4566 localstack start -d
  1. 从Web应用程序扩展库启用Localstack AWS replicator

  2. 扩展安装后,将在以下端点暴露一个小的配置端点:[http://localhost:4566/_localstack/aws-replicator/index.html](http://localhost:4566/_localstack/aws-replicator/index.html)。

  3. 使用此Web UI以YAML语法定义代理配置,以及AWS凭据(AWS访问密钥ID、秘密访问密钥和可选的会话令牌),并保存配置。代理应报告启用状态,并在主机上生成代理容器。

configuration settings

  1. 现在我们可以通过LocalStack直接与真实AWS云资源进行通信。

要清理正在运行的代理容器,只需在Replicator UI上点击“禁用”即可。

特定资源的代理

作为将特定服务的所有请求转发的一种替代方法,您还可以仅将AWS的请求转发到特定资源。

例如,假设我们在AWS中拥有一个名为my-s3-bucket的S3存储桶,然后我们可以使用以下配置将任何对s3://my-s3-bucket的请求转发到真实AWS,同时仍然在LocalStack本地处理对所有其他存储桶的请求

services:
  s3:
    resources:
      # list of ARNs of S3 buckets to proxy to real AWS
      - '.*:my-s3-bucket'
    operations:
      # list of operation name regex patterns (optional)
      - 'Get.*'
      - 'Put.*'
    # optionally, specify that only read requests should be allowed (Get*/List*/Describe*, etc)
    read_only: false

将上述配置存储到名为proxy_config.yml的文件中,然后我们可以通过以下方式启动代理

localstack aws proxy -c proxy_config.yml

如果我们对S3存储桶my-s3-bucket执行本地操作,代理将转发请求并返回真实AWS的结果

$ awslocal s3 ls s3://my-s3-bucket
2023-05-14 15:53:40        148 my-file-1.txt
2023-05-15 10:24:43         22 my-file-2.txt

针对其他存储桶的任何其他S3请求将在LocalStack本地的状态中运行,例如

$ awslocal s3 mb s3://test123
make_bucket: test123
...

一个更全面的示例,涉及本地Lambda函数与远程SQS队列和S3存储桶相结合,可以在本存储库的example文件夹中找到。

配置

除了上述代理服务配置之外,以下配置可以用于自定义扩展本身的行为(只需将它们作为环境变量传递给主LocalStack容器)

  • REPLICATOR_CLEANUP_PROXY_CONTAINERS:在关闭时是否清理(删除)代理Docker容器(默认值为1)。可以设置为0以帮助调试问题,例如,如果代理容器启动后立即退出。
  • REPLICATOR_LOCALSTACK_HOST:代理容器连接到LocalStack主容器时使用的目标主机(默认情况下自动确定)
  • REPLICATOR_PROXY_DOCKER_FLAGS:创建代理Docker容器时应该传递的附加标志

注意:由于核心框架的一些最近更改,请确保以启用GATEWAY_SERVER=hypercorn配置启动LocalStack容器,以实现向后兼容性。这将在即将发布的版本中修复。

资源复制器CLI

下面的图示说明了如何使用扩展来复制状态,例如,将AWS中的SQS队列及其包含的消息复制到您的LocalStack实例中。

overview

要使用资源复制器,请确保您可以在终端中访问已配置的AWS。注意:扩展将以只读模式与AWS通信,并且不会对您的真实AWS账户进行任何更改。

以下命令可以将SQS队列(包括其消息)复制到您的LocalStack实例中

$ localstack aws replicate -s sqs

一旦命令执行完成,您应该能够列出并操作复制到本地账户中的队列

$ awslocal sqs list-queues
...
$ awslocal sqs receive-message --queue-url ...
...

安装

要安装CLI扩展,请使用以下pip命令

pip install "git+https://github.com/localstack/localstack-extensions/#egg=localstack-extension-aws-replicator&subdirectory=aws-replicator"

要安装扩展本身(在LocalStack内部运行的服务器组件),请使用以下extensions命令

localstack extensions install "git+https://github.com/localstack/localstack-extensions/#egg=localstack-extension-aws-replicator&subdirectory=aws-replicator"

变更日志

  • 0.1.19:打印资源配置中无效正则表达式的可读消息;修复基于主机地址代理S3请求的逻辑
  • 0.1.18:更新环境检查以使用SDK Docker客户端并启用从Docker内部启动代理(例如,作为init脚本的LS主容器的一部分)
  • 0.1.17:添加对基于ARN的模式匹配的基本支持secretsmanager资源
  • 0.1.16:更新导入以支持localstack >=3.6兼容性
  • 0.1.15:将localstack依赖项安装移至extra,因为它在运行时提供
  • 0.1.14:将缺少的依赖项安装到代理容器以实现localstack >=3.4兼容性
  • 0.1.13:添加对localstack >=3.4的兼容性;添加http2-server;迁移到localstack auth login
  • 0.1.12:修改aws凭证文本字段类型为密码
  • 0.1.11:修复最近CloudFormation更改后损坏的导入
  • 0.1.10:添加REPLICATOR_PROXY_DOCKER_FLAGS选项以将自定义标志传递给代理Docker容器
  • 0.1.9:增强代理网络并添加REPLICATOR_LOCALSTACK_HOST配置选项
  • 0.1.8:添加REPLICATOR_CLEANUP_PROXY_CONTAINERS选项以跳过删除代理容器进行调试
  • 0.1.7:将rolo依赖项添加到测试中
  • 0.1.6:调整配置以支持LOCALSTACK_AUTH_TOKEN以及旧版API密钥
  • 0.1.5:对最近的上游更改进行的小幅度修复
  • 0.1.4:修复v3.0兼容性中bootstrap.auth模块的导入
  • 0.1.3:调整代码导入以适应最近的LocalStack v3.0模块更改
  • 0.1.2:移除已弃用的ProxyListener以启动本地aws-replicator代理服务器
  • 0.1.1:添加简单的配置Web界面
  • 0.1.0:扩展的初始版本

许可协议

本扩展根据Apache License,版本2.0发布。使用它,您还同意LocalStack的最终用户许可协议(EULA)

项目详细信息


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

localstack_extension_aws_replicator-0.1.19.tar.gz (41.5 kB 查看哈希)

上传于 来源

构建分发

由以下支持