LoginSignup
1
2

More than 3 years have passed since last update.

[AWS SAM] Lambda関数からS3アクセス

Last updated at Posted at 2020-10-22
  1. [AWS SAM] 概要、Hello World
  2. [AWS SAM] Lambda関数からS3アクセス (※本記事)
  3. [AWS SAM] Swaggerを使用したAPI定義

Lambda関数からS3にアクセスする

変更必要点

  • Lambda関数にS3アクセス権限を与える
  • Lambda関数から参照するバケット名を環境変数に追加する

変更後テンプレートは以下のようになる

Parameters:
  DataBucketName:
    Type: String
    Default: 'for-dev-bucket'

Resources:
  GetAllDataFunction: # リソース名
    Type: AWS::Serverless::Function # Lambda
    Properties:
      CodeUri: get-all-data/ # Lambdaソースコード格納パス
      Handler: function.lambda_handler # 関数実体:ファイル名function.pyの関数名lambda_handler 
      Runtime: python3.8
      Environment:
        Variables:
          BUCKET_NAME: !Ref DataBucketName # Lambda関数から参照する環境変数
      Events: # Lambdaをキックするイベント設定
        getAllData:
          Type: Api
          Properties:
            Path: /api/devices
            Method: get
      Policies:
        - S3ReadPolicy: # S3リードポリシー設定
            BucketName: !Ref DataBucketName # Parametersで定義した値を参照

テンプレート変更点

  • Parametersセクションにバケット名を定義
  • PoliciesにS3のバケットを指定してリード権限を追加
  • EnvironmentにLambda関数から参照できるようにバケット名を設定

その他定義可能なセクションは公式ドキュメント参照
その他ポリシーに関しては公式ドキュメント参照
S3ReadPolicyのようにプレースホルダー値("Ref": "BucketName")があるものは指定が必要

Lambda関数からの環境変数アクセス

Lambda関数(Python)からは以下のようにアクセス可能

import os
BUCKET_NAME = os.getenv('BUCKET_NAME')

Lambda関数で外部ライブラリの使用

変更必要点

  • Layerの追加
Parameters:
  DataBucketName:
    Type: String
    Default: 'for-dev-bucket'
  PandasLayerArn:
    Type: String
    Default: 'arn:aws:lambda:ap-northeast-1:770693421928:layer:Klayers-python38-pandas:18'

Resources:
  GetAllDataFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: get-all-data/
      Handler: function.lambda_handler
      Runtime: python3.8
      Layers: # Layer追加
        - !Ref PandasLayerArn
      Environment:
        Variables:
          BUCKET_NAME: !Ref DataBucketName
      Events:
        getAllData:
          Type: Api
          Properties:
            Path: /api/devices
            Method: get
      Policies:
        - S3ReadPolicy:
            BucketName: !Ref DataBucketName

テンプレート変更点

  • ParametersセクションにLayerのARN追加
  • Layersを追加

外部ライブラリのLayer ARNについては以前の記事で記載しているのでそちらを参照

続き([AWS SAM] Swaggerを使用したAPI定義

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2