함대 프로비저닝 전에 후크하는 람다 작성 예

htps : // 이 m / k도 t / ms / 에다 7c2f519581b40 에c3f
마지막 기사의 계속으로, 플릿 프로비저닝 전에 후크하는 Lambda의 작성 예를 기재합니다.

프로비저닝 허가/거부 판정 방법


  • 일련 번호와 프로비저닝 허용/거부를 ​​나타내는 값이 포함 된 CSV 파일을 S3에 저장
  • Lambda에서이 CSV 파일을 참조하고 장치에서 통지 된 일련 번호에서 프로비저닝 권한/거부 결정

  • 아래 CSV 파일 예
    SerialNumber,Effect
    1,Allow
    2,Deny
    3,Allow
    

    Lambda 함수



    변경 전 코드


    import json
    
    provision_response = {'allowProvisioning': False}
    
    def isBlacklisted(serial_number):
      #check serial against database of blacklisted serials
      ...
    
    def lambda_handler(event, context):
    
      # DISPLAY ALL ATTRIBUTES SENT FROM DEVICE
      print("Received event: " + json.dumps(event, indent=2))
    
      # Assume Device has sent a device_serial attribute
      device_serial = event["parameters"]["SerialNumber"]
    
      # Check serial against an isBlacklisted() function
      if not isBlacklisted(device_serial):
          provision_response["allowProvisioning"] = True
    
      return provision_response
    

    isBlacklisted에서,
    인수로 일련 번호를 받고,
    프로비저닝 권한이면 False,
    프로비저닝 거부이면 True를 반환하도록 변경합니다.

    변경 후 코드



    참고 기사:
    htps : // 코 m / 아스나로 / ms / 99472b492 a f387d97b70
    htps : //에서. 응 kmk. 메 / py-on-panda s-o-t-a-t-c-i-c /

    lambda_function.py
    import json
    import boto3
    import pandas as pd
    from io import StringIO
    
    def isBlacklisted(serial_number):
    
      BUCKET_NAME<バケット名>
      KEY_NAME<CSVファイルパス(xxx/yyy.csv)>
    
      # S3に格納したCSVファイルからDataFrameを作成
      s3 = boto3.resource('s3')
      s3obj = s3.Object(BUCKET_NAME, KEY_NAME).get()
      csv_string = s3obj['Body'].read().decode('utf-8')
      df = pd.read_csv(StringIO(csv_string), index_col=0)
    
      try:
        # 許可/拒否判定
        effect = df.at[serial_number, 'Effect']
        if effect == 'Allow':
          return False
        else:
          return True
      except:
        # 該当serial_numberなし
        return True
    
    def lambda_handler(event, context):
      # 変更なし
    

    외부 라이브러리 사용



    Lambda에서 외부 라이브러리 (이번 경우 Pandas)를 사용하는 경우,
    라이브러리를 zip에 함께 업로드하는 방법과,
    레이어를 설정하는 방법이 있습니다.
    레이어를 만드는 방법에 대해서는 언급하지 않습니다.
    아래 기사(2. pandas의 Layer의 ARN을 조사하고 Layer 추가)를 참고로 Layer 추가
    htps : // 코 m / 포 r 베아 r08 / ms / 202752d5 ~ fcb65595bd9

    실행 역할의 정책 설정




    액세스 제한 → 역할 이름 링크 클릭

    '정책 연결'을 클릭합니다.

    AWS 관리형 정책에서 s3에서 검색하고,
    이번에 S3에 저장한 파일의 리드가 필요하므로,
    AmazonS3ReadOnlyAccess를 확인하고,
    정책 연결을 클릭합니다.

    Lambda 함수 업로드



    ※ 로컬에서 Lambda 함수를 작성하여 업로드하는 경우

    파일 이름은 lambda_function.py입니다.
    lambda_function.py zip 압축

    액션에서 .zip 파일 업로드를 선택하고 업로드합니다.

    좋은 웹페이지 즐겨찾기