Как отобразить возвращаемые значения лямбда-функции в выходных данных Cloudformation - PullRequest
0 голосов
/ 05 ноября 2018

Я ищу опцию для перечисления результатов AWS :: Lambda :: Function в выходных данных Cloudformation.

Ниже приведен фрагмент шаблона облачной информации для AWS: Lambda :: Function

Resources:
 AthenaLambdaFunction:
    Type: 'AWS::Lambda::Function'
    DeletionPolicy: Delete
    DependsOn:
      - IamRoleLambdaForAthena
    Properties:
      Code:
        ZipFile: |
          import boto3
          import botocore
          import os 
          ath = boto3.client('athena')
          def handler(event, context):
              outputBucket = os.environ.get("outputBucket")
              QSTRING = 'select * from tableName limit 10'
              response = ath.start_query_execution(QueryString=str(QSTRING), ResultConfiguration={'OutputLocation': outputBucket})
              s3BucketOut = output_bucket + response['ResponseMetadata']['RequestId']
              return s3BucketOut
      Handler: index.handler
      Runtime: python3.6
      MemorySize: 128
      Role: !GetAtt IamRoleLambdaForAthena.Arn
      Timeout: 30
      Environment:
        Variables:
          outputBucket: !Ref OutputS3Bucket

Я хочу показать значение, перенастроенное лямбда-функцией s3BucketOut в Outputs of Cloudformation. Нечто подобное ниже (конечно, код ниже не работает).

Outputs:
  LambdaFunctionOutput:
    Value: !Ref AthenaLambdaFunction.s3BucketOut
    Description: Return Value of Lambda Function

Любые предложения, пожалуйста. ТИА

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы на полпути через это. С помощью своего кода вы создали функцию AWS Lambda, которую хотите запустить. Теперь вам нужно запустить эту функцию в CloudFormation и зафиксировать ее значение. Обратите внимание, что вам нужно внести небольшие изменения в свой код, чтобы обеспечить возможность захвата значения CloudFormation.

Полный код будет похож на это:

Resources:
  AthenaLambdaFunction:
    Type: 'AWS::Lambda::Function'
    DeletionPolicy: Delete
    DependsOn:
      - IamRoleLambdaForAthena
    Properties:
      Code:
        ZipFile: |
          import boto3
          import botocore
          import os
          import cfnresponse # this needs to be imported for replying to CloudFormation
          ath = boto3.client('athena')
          def handler(event, context):
              outputBucket = os.environ.get("outputBucket")
              QSTRING = 'select * from tableName limit 10'
              response = ath.start_query_execution(QueryString=str(QSTRING), ResultConfiguration={'OutputLocation': outputBucket})
              s3BucketOut = output_bucket + response['ResponseMetadata']['RequestId']
              responseData = {} # added
              responseData['S3BucketOut'] = s3BucketOut # added
              cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData) # return modified
      Handler: index.handler
      Runtime: python3.6
      MemorySize: 128
      Role: !GetAtt IamRoleLambdaForAthena.Arn
      Timeout: 30
      Environment:
        Variables:
          outputBucket: !Ref OutputS3Bucket

  S3BucketOutInvocation:
    Type: Custom::S3BucketOut
    Properties:
      ServiceToken: !GetAtt AthenaLambdaFunction.Arn
      Region: !Ref "AWS::Region"

Outputs:
  LambdaFunctionOutput: 
    Value: !GetAtt S3BucketOutInvocation.S3BucketOut
    Description: Return Value of Lambda Function

Ссылки:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html

0 голосов
/ 05 ноября 2018

То, что вы можете сделать, - это создать так называемый «пользовательский ресурс с лямбда-поддержкой». Это можно использовать при создании стека для получения битов информации в типе создания.

Дополнительную информацию можно найти здесь

Пользовательские ресурсы AWS с лямбда-поддержкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...