def get_odata()

in cdk-iot-analytics/cdk_sap_blog/sap/lambda_.py [0:0]


def get_odata(scope, sns_topic_arn):
    lambda_name = scope.node.try_get_context('odata_function_name')
    lambda_role = iam.Role(
        scope=scope,
        id=f"{lambda_name}Role",
        role_name=f"{lambda_name}Role",
        assumed_by=iam.ServicePrincipal('lambda.amazonaws.com'),
    )
    lambda_role.add_to_policy(
        iam.PolicyStatement(
            effect=iam.Effect.ALLOW,
            resources=[f'arn:aws:logs:{scope.region}:{scope.account}:*'],
            actions=['logs:CreateLogGroup',]
        )
    )
    lambda_role.add_to_policy(
        iam.PolicyStatement(
            effect=iam.Effect.ALLOW,
            resources=[
                f'arn:aws:logs:{scope.region}:{scope.account}:log-group:/aws/lambda/{lambda_name}:*',
            ],
            actions=[
                'logs:CreateLogStream',
                'logs:PutLogEvents',
            ]
        )
    )

    sap_secret = secretsmanager.Secret(
        scope=scope,
        id=sapSecretName,
        secret_name=sapSecretName,
        generate_secret_string=secretsmanager.SecretStringGenerator(
            generate_string_key='secret-key',
            secret_string_template=json.dumps({
                'username': scope.sapUsername,
                'password': scope.sapPassword,
            }),
        )
    )
    sap_secret.grant_read(lambda_role)
    Tags.of(sap_secret).add('sap-iot-secret', 'True')
    lambda_role.add_to_policy(
        iam.PolicyStatement(
            effect=iam.Effect.ALLOW,
            resources=['*'],
            actions=[
                'secretsmanager:ListSecrets',
                'secretsmanager:GetSecretValue'
            ]
        )
    )
    lambda_role.add_to_policy(
        iam.PolicyStatement(
            effect=iam.Effect.ALLOW,
            resources=[sns_topic_arn],
            actions=[
                'sns:Publish',
            ]
        )
    )

    layer = lambda_.LayerVersion(
        scope=scope,
        id='CDK-SAP-Blog-SAP-Lambda-Layer',
        code=lambda_.Code.from_asset('cdk_sap_blog/sap/lambda_assets/layer'),
        compatible_runtimes=[lambda_.Runtime.PYTHON_3_8, lambda_.Runtime.PYTHON_3_7],
        license='Apache-2.0',
        description='Request library for HTTP(S) calls',
    )

    L = lambda_.Function(
        scope=scope,
        id=lambda_name,
        function_name=lambda_name,
        runtime=lambda_.Runtime.PYTHON_3_7,
        code=lambda_.Code.from_asset('cdk_sap_blog/sap/lambda_assets/function_code'),
        handler='lambda_function.lambda_handler',
        timeout=core.Duration.minutes(1),
        layers=[layer],
        role=lambda_role,
        environment={
            'odpEntitySetName': scope.odpEntitySetName,
            'odpServiceName': scope.odpServiceName,
            'sapHostName': scope.sapHostName,
            'urlPrefix': scope.urlPrefix,
            'sapPort': scope.sapPort,
            'snsAlertEmailTopic': sns_topic_arn,
            'SECRET_NAME': sapSecretName
        }
    )
    # L.add_permission(
    #     id="invoke permissions",
    #     principal=iam.ServicePrincipal('iotanalytics.amazonaws.com'),
    #     action="lambda:InvokeFunction",
    #     source_account=scope.account,
    #     source_arn=f"arn:aws:iotanalytics:{scope.region}:{scope.account}:*"
    # )

    return L