コード例 #1
0
 def __init__(self, scope: Stack):
     super().__init__(
         scope=scope,
         id=f'{TestingStack.global_prefix()}TestingFunction3',
         code=Code.from_inline(
             'import urllib3\n'
             'from jose import jwk, jwt\n'
             'from jose.utils import base64url_decode\n'
             'from b_lambda_layer_common import api_gateway\n'
             'from b_lambda_layer_common import exceptions\n'
             'from b_lambda_layer_common import util\n'
             'from b_lambda_layer_common.ssm.ssm_parameter import SSMParameter\n'
             'import boto3\n'
             'import botocore\n'
             '\n\n'
             'def handler(*args, **kwargs):\n'
             '    SSMParameter("TestSSMParam")\n\n'
             '    return dict(\n'
             '        Boto3Version=boto3.__version__,\n'
             '        BotocoreVersion=botocore.__version__,\n'
             '    )'
             '\n'),
         handler='index.handler',
         # Ensure Python 3.8 matches everywhere.
         runtime=Runtime.PYTHON_3_8,
         layers=[
             Layer(scope=scope,
                   name=f'{TestingStack.global_prefix()}TestingLayer3',
                   dependencies={
                       'python-jose':
                       PackageVersion.from_string_version('3.3.0')
                   })
         ])
コード例 #2
0
 def __init__(self, scope: Stack):
     super().__init__(
         scope=scope,
         id=f'{TestingStack.global_prefix()}TestingFunction1',
         code=Code.from_inline(
             'from b_lambda_layer_common import api_gateway\n'
             'from b_lambda_layer_common import exceptions\n'
             'from b_lambda_layer_common import ssm\n'
             'from b_lambda_layer_common import util\n'
             'import boto3\n'
             'import botocore\n'
             '\n\n'
             'def handler(*args, **kwargs):\n'
             '    return dict(\n'
             '        Boto3Version=boto3.__version__,\n'
             '        BotocoreVersion=botocore.__version__,\n'
             '    )'
             '\n'),
         handler='index.handler',
         # Ensure Python 3.8 matches everywhere.
         runtime=Runtime.PYTHON_3_8,
         layers=[
             Layer(scope=scope,
                   name=f'{TestingStack.global_prefix()}TestingLayer1',
                   dependencies={
                       'boto3':
                       PackageVersion.from_string_version('1.16.35'),
                       'botocore':
                       PackageVersion.from_string_version('1.19.35'),
                   })
         ])
コード例 #3
0
    def __init__(self, scope: Construct):
        super().__init__(scope=scope)

        function = Function(
            scope=self,
            id=f'{self.global_prefix()}TestingFunction',
            code=Code.from_inline(
                'from b_lambda_layer_common import api_gateway\n'
                'from b_lambda_layer_common import exceptions\n'
                'from b_lambda_layer_common import ssm\n'
                'from b_lambda_layer_common import util\n'
                'import boto3\n'
                'import botocore\n'
                '\n\n'
                'def handler(*args, **kwargs):\n'
                '    return dict(\n'
                '        Boto3Version=boto3.__version__,\n'
                '        BotocoreVersion=botocore.__version__,\n'
                '    )'
                '\n'),
            handler='index.handler',
            runtime=Runtime.PYTHON_3_6,
            layers=[
                Layer(scope=self,
                      name=f'{self.global_prefix()}TestingLayer',
                      dependencies={
                          'boto3':
                          PackageVersion.from_string_version('1.16.35'),
                          'botocore':
                          PackageVersion.from_string_version('1.19.35'),
                      })
            ])

        self.add_output(self.LAMBDA_FUNCTION_NAME_KEY,
                        value=function.function_name)

        # Create another function that is not using boto3.
        Function(
            scope=self,
            id=f'{self.global_prefix()}TestingFunction2',
            code=Code.from_inline('def handler(*args, **kwargs): return 200'),
            handler='index.handler',
            runtime=Runtime.PYTHON_3_6,
            layers=[
                Layer(scope=self, name=f'{self.global_prefix()}TestingLayer2')
            ])
コード例 #4
0
 def __init__(self, scope: Stack):
     super().__init__(
         scope=scope,
         id=f'{TestingStack.global_prefix()}TestingFunction2',
         code=Code.from_inline('def handler(*args, **kwargs): return 200'),
         handler='index.handler',
         runtime=Runtime.PYTHON_3_6,
         layers=[Layer(scope=scope, name=f'{TestingStack.global_prefix()}TestingLayer2')]
     )
コード例 #5
0
    def __init__(self, scope: Stack):
        super().__init__(scope=scope,
                         id=f'TestingStack',
                         stack_name=f'TestingStack')

        Function(scope=self,
                 id='TestingFunction',
                 code=Code.from_inline('def handler(): return "Hello World!"'),
                 handler='index.handler',
                 runtime=Runtime.PYTHON_3_6,
                 layers=[TwilioLayer(self, 'TestingTwilioLayer')])
コード例 #6
0
 def __init__(self, scope: Stack):
     super().__init__(
         scope=scope,
         id=f'{TestingStack.global_prefix()}TestingFunction4',
         code=Code.from_inline(
             'from b_lambda_layer_common.util.skip_invocation import skip_invocation\n'
             '\n\n'
             '@skip_invocation(determinator="heartbeat")\n'
             'def handler(event, context):\n'
             '    return event'
         ),
         handler='index.handler',
         runtime=Runtime.PYTHON_3_6,
         layers=[Layer(scope=scope, name=f'{TestingStack.global_prefix()}TestingLayer4')]
     )
コード例 #7
0
def mock_lambda_init(
    self,
    scope: constructs.Construct,
    id: builtins.str,
    *,
    code: Code,
    handler: builtins.str,
    runtime: Runtime,
    **kwargs
) -> None:
    # overriding the code will prevent building with docker (a long running operation)
    # override the runtime for now, as well, to support inline code
    props = FunctionProps(
        code=Code.from_inline("return"),
        handler=handler,
        runtime=Runtime.PYTHON_3_7,
        **kwargs
    )
    jsii.create(Function, self, [scope, id, props])
コード例 #8
0
    def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        bucket = Bucket(
            scope=self,
            id='WorkshopBucketWithCDK',
            bucket_name='cloudvisor-workshop-bucket-with-cdk'
        )

        function = Function(
            scope=self,
            id='WorkshopFunctionWithCDK',
            function_name='WorkshopFunctionWithCDK',
            runtime=Runtime.PYTHON_3_6,
            handler='index.handler',
            code=Code.from_inline('def handler(*args, **kwargs): print(args); return 200')
        )

        bucket.add_object_created_notification(LambdaDestination(function))
コード例 #9
0
def test_FUNC_hash_WITH_valid_parameters_EXPECT_hash_created():
    """
    Test that hashing is consistent and works as expected.

    :return: No return.
    """
    stack = Stack(App(), 'TestStack')

    integration = LambdaIntegration(
        scope=stack,
        integration_name='TestIntegration',
        api=CfnApi(stack, 'TestApi'),
        lambda_function=Function(
            stack,
            'TestLambdaFunction',
            code=Code.from_inline('def handler(*args, **kwargs): return 123'),
            handler='index.handler',
            runtime=Runtime.PYTHON_3_6))

    assert integration.hash == 'ab93cecc508e529c3791ba48a1275deec88cdd6b43a7e1d443906df48fa300e4'
コード例 #10
0
    def __init__(self, scope: Stack, prefix: str) -> None:
        stack_name = f'{prefix}ExampleStack'
        super().__init__(scope, id=stack_name, stack_name=stack_name)

        lambda_name = f'{prefix}ExampleLambdaFunction'
        self.function = Function(
            scope=self,
            id=lambda_name,
            function_name=lambda_name,
            handler='index.handler',
            runtime=Runtime.PYTHON_3_6,
            code=Code.from_inline('def handler(*args, **kwargs): '
                                  '    return {'
                                  '    "isBase64Encoded": False,'
                                  '    "statusCode": 200,'
                                  '    "headers": { },'
                                  '    "body": "Hello from lambda function!"'
                                  '}'))

        api_name = f'{prefix}ExampleRestApi'
        self.api = LambdaRestApi(self, api_name, handler=self.function)
コード例 #11
0
    def __init__(self, scope: Construct):
        super().__init__(scope=scope)

        prefix = TestingManager.get_global_prefix()

        api = CfnApi(
            scope=self,
            id=f'{prefix}Api',
            description='Sample API.',
            name=f'{prefix}Api',
            protocol_type='HTTP'
        )

        stage = CfnStage(
            scope=self,
            id=f'{prefix}Stage',
            api_id=api.ref,
            stage_name='prod',
            auto_deploy=False,
            description='Test description.'
        )

        function = Function(
            scope=self,
            id=f'{prefix}TestFunction',
            function_name=f'{prefix}TestFunction',
            code=Code.from_inline(
                'def handler(*args, **kwargs):\n'
                '    return {\n'
                '        "isBase64Encoded": False,\n'
                '        "statusCode": 200,\n'
                '        "headers": {},\n'
                '        "body": "{\\"message\\": \\"success\\"}"\n'
                '    }\n'
            ),
            handler='index.handler',
            runtime=Runtime.PYTHON_3_6,
        )

        integration = CfnIntegration(
            scope=self,
            id=f'{TestingManager.get_global_prefix()}LambdaIntegration',
            api_id=api.ref,
            integration_type='AWS_PROXY',
            integration_uri=(
                f'arn:aws:apigateway:{self.region}:lambda:path/2015-03-31'
                f'/functions/{function.function_arn}/invocations'
            ),
            description='Sample lambda proxy integration.',
            payload_format_version='1.0'
        )

        CfnRoute(
            scope=self,
            id=f'{prefix}SampleRoute',
            api_id=api.ref,
            route_key='GET /test',
            target=f'integrations/{integration.ref}'
        )

        backend = StageDeploymentSingletonFunction(self, 'DeploymentBackend')

        # Make some deployments.
        StageDeploymentResource(self, 'C1', backend, api.ref, stage.stage_name, 'Sample1.')
        StageDeploymentResource(self, 'C2', backend, api.ref, stage.stage_name, 'Sample2.')
        StageDeploymentResource(self, 'C3', backend, api.ref, stage.stage_name, 'Sample3.')
        StageDeploymentResource(self, 'C4', backend, api.ref, stage.stage_name, 'Sample4.')
        StageDeploymentResource(self, 'C5', backend, api.ref, stage.stage_name, 'Sample5.')

        self.add_output('ApiId', api.ref)
        self.add_output('StageName', stage.stage_name)