首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从boto3中模拟ssm?

如何从boto3中模拟ssm?
EN

Stack Overflow用户
提问于 2019-08-06 14:51:59
回答 2查看 6.4K关注 0票数 2

我试过莫托,但我总是得到:

botocore.exceptions.ClientError:调用GetParameter操作时发生错误(UnrecognizedClientException):请求中包含的安全令牌无效。

MVCE: test_example.py

代码语言:javascript
运行
复制
import moto
import boto3


def ssm():
    boto3.setup_default_session()
    with moto.mock_ssm():
        ssm = boto3.client('ssm', region_name='us-east-1',
                           aws_access_key_id='testing',
                           aws_secret_access_key='testing')
        ssm.put_parameter(
            Name="/foo/bar",
            Description="A test parameter",
            Value="this is it!",
            Type="SecureString",
        )
        yield ssm


def get_ssm_param(ssm_parameter_name):
    session = boto3.Session()
    ssm_client = session.client("ssm")
    param = ssm_client.get_parameter(Name=ssm_parameter_name, WithDecryption=True)
    return param["Parameter"]["Value"]


def test_get_ssm_param():
    foo = get_ssm_param('/foo/bar')
    assert foo == "this is it!"

执行

代码语言:javascript
运行
复制
pytest test_example.py

我的系统

代码语言:javascript
运行
复制
moto==1.3.13
boto==2.49.0
boto3==1.9.201
botocore==1.12.201
EN

回答 2

Stack Overflow用户

发布于 2019-08-07 07:38:19

一位同事向我展示了这个方法是可行的:

代码语言:javascript
运行
复制
from moto import mock_ssm
import boto3


def get_ssm_param(ssm_parameter_name):
    session = boto3.Session()
    ssm_client = session.client("ssm")
    param = ssm_client.get_parameter(Name=ssm_parameter_name, WithDecryption=True)
    return param["Parameter"]["Value"]

@mock_ssm
def test_get_ssm_param():
    ssm = boto3.client('ssm')
    ssm.put_parameter(
        Name="/foo/bar",
        Description="A test parameter",
        Value="this is it!",
        Type="SecureString",
    )
    foo = get_ssm_param('/foo/bar')
    assert foo == "this is it!"

但是,当您将凭据添加到boto3.client时,它就会中断。

票数 8
EN

Stack Overflow用户

发布于 2021-08-24 00:42:29

若要解决凭据问题,请添加定义假凭据的夹具。

代码语言:javascript
运行
复制
@pytest.fixture
def aws_credentials():
    """Mocked AWS Credentials for moto."""
    os.environ["AWS_ACCESS_KEY_ID"] = "testing"
    os.environ["AWS_SECRET_ACCESS_KEY"] = "testing"
    os.environ["AWS_SECURITY_TOKEN"] = "testing"
    os.environ["AWS_SESSION_TOKEN"] = "testing"


@pytest.fixture
def ssm_mock(aws_credentials):
    with mock_ssm():
        client = boto3.client("ssm")
        client.put_parameter(
            Name="/foo/bar",
            Description="A test parameter",
            Value="this is it!",
            Type="SecureString",
        )
        yield
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57378788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档