【AWS Lambda】 S3에 저장된 이미지를 크기 조정하고 다른 S3에 저장 (Ruby 사용)

11112 단어 람다S3루비AWS

목표



S3에 저장된 이미지 데이터는 Lambda 함수를 사용하여 크기를 조정하고 다른 S3에 저장합니다.
프로그래밍 언어는 Ruby를 사용합니다.

전제



사전에 두 개의 S3 버킷을 만들고 있습니다.

작업 흐름




항번
제목


1
Lambda 함수 생성 및 업로드

2
Lambda 환경 변수 설정

3
핸들러 및 실행 역할 설정

4
이벤트 트리거 정의

5
실행 역할 설정

6
동작 검증


절차



1. Lambda 함수 생성 및 업로드



모든 함수 이름과 Lambda 함수에서 사용할 프로그래밍 언어를 선택합니다.
이번은 Ruby2.5 로 기술합니다.


배포할 Lambda 함수 본체와 외부 라이브러리(mini_magick)를 zip화한 것을 작성합니다.
작업 디렉토리에서 다음 작업을 수행합니다.

우선 Gemfile 만들기

Gemfile

source 'https://rubygems.org'
gem "mini_magick"
bundle install --path vendor/bundle 를 사용하여 작업 디렉토리 아래에 gem을 설치하십시오.

bundle install --path vendor/bundle

또한 Lambda 함수 본문이 될 handler.rb를 만듭니다.

handler.rb

require 'aws-sdk-s3'
require 'base64'
require 'mini_magick'

def resize_image(event:, context:)
  s3_client = Aws::S3::Client.new(
                           :region => ENV['REGION'],
                           :access_key_id => ENV['ACCESS_KEY'],
                           :secret_access_key => ENV['SECRET_ACCESS_KEY']
                          )

  # イベントソースとして指定したS3から保存された画像を取り込む
  key = event['Records'][0]['s3']['object']['key']
  image_file = s3_client.get_object(:bucket => ENV['BUCKET_BEFORE'], :key => key).body.read
  image = MiniMagick::Image.read(image_file)

  # リサイズした画像をLambda環境の/tmpに一時書き込み
  resized_tmp_file = "/tmp/#{key.delete("images/")}"
  image.resize("300x300").write(resized_tmp_file)

  # アップロード実行
  s3_resource = Aws::S3::Resource.new()
  object = s3_resource.bucket(ENV['BUCKET_AFTER']).object(key).upload_file(resized_tmp_file)
end
handler.rbvender 를 zip화합니다.



만든 zip 파일을 업로드합니다.
Lambda 콘솔의 함수 코드 열 동작에서 .zipファイルをアップロード
handler.zip를 선택하고 保存


2.Lambda 환경 변수 설정



Lambda 콘솔에서 Lambda 함수 내에서 사용할 환경 변수를 설정합니다.



3. 핸들러 및 실행 역할 설정



어떤 파일의 어느 함수를 호출할까…라는 설정은, 핸들러라고 하는 파라미터로 지시하고 있다고 하는 것이므로,
이번에 작성한 Lambda 함수에 맞게 내용을 편집합니다.

Lambda 콘솔의 기본 설정에서 編集

핸들러 필드에 実行ファイル名(拡張子除く).関数名 형식으로 값을 입력하고 저장합니다.


4. 이벤트 트리거 정의



Lambda 콘솔에서 トリガーを追加

이번 이벤트 트리거로 하는 AWS 서비스는 S3


트리거의 상세 설정을 실시합니다.
이번은 images 디렉토리내에 오브젝트가 작성된 타이밍에서의 이벤트 기동으로 합니다.

トリガーの有効化 를 넣으면 S3가 이 Lambda 함수에 처리를 킥할 수 있게 됩니다(Lambda 함수 정책의 설정).
마지막으로 追加


5. 실행 역할 설정



또한 이번에는 크기 조정된 이미지를 저장할 때 Lambda에서 S3에 액세스해야 하기 때문에,
S3에 대한 액세스 권한이 있는 실행 역할을 부여합니다.

Lambda 콘솔 상단의 アクセス権限 를 클릭한 후 실행 역할 이름을 클릭합니다.


ポリシーをアタッチします 클릭

AmazonS3FullAccess 선택 후 ポリシーのアタッチ

6. 동작 검증



이벤트 소스로 지정한 S3의 images 디렉토리에 임의의 이미지를 업로드합니다.


참고로 업로드 한 이미지는 여기


리사이즈 후의 화상 보존처로서 지정한 S3를 확인했는데, 화상이 보존되어 있었으므로 OK입니다.


내용도 크기가 조정되었습니다.


Lambda 로그는 Cloudwatch Logs에서 확인할 수 있습니다.


참고로 한 기사



AWS Lambda Ruby를 사용하여 1시간 내에 만드는 이미지 크기 조정 API

좋은 웹페이지 즐겨찾기