LightFile NextLightFile Next

手動インストール

CloudFormationを使わない手動インストール(上級者向け)

このガイドでは、CloudFormationを使わずにLightFile6 Lambdaを手動でインストールする方法を説明します。

このガイドは上級者向けです。通常はCloudFormationを使用したインストールを推奨します。

前提条件

  • AWSコンソールまたはCLIへのアクセス
  • Lambda、S3、IAMの管理権限
  • LightFile6ライセンストークン

Lambda関数パッケージのダウンロード

Lambda関数のzipファイルは、リージョン別のS3バケットで公開されています:

https://lightfile6-deployment-<region>.s3.<region>.amazonaws.com/lambda/<version>/<architecture>/lightfile-lambda.zip

例(東京リージョン、arm64、v6.0.1):

curl -O https://lightfile6-deployment-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/lambda/6.0.1/arm64/lightfile-lambda.zip

利用可能なリージョン:

  • ap-northeast-1 (東京)
  • ap-northeast-3 (大阪)
  • us-west-1 (北カリフォルニア)
  • us-west-2 (オレゴン)
  • us-east-1 (バージニア北部)
  • us-east-2 (オハイオ)

アーキテクチャ:

  • arm64 (推奨 - 高性能、低コスト)
  • x86_64

インストール手順

1. IAMロールの作成

Lambda実行用のIAMロールを作成します。

信頼関係ポリシー (trust-policy.json):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

権限ポリシー (permissions-policy.json):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectTagging",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::your-image-bucket/*",
        "arn:aws:s3:::your-backup-bucket/*"
      ]
    }
  ]
}

IAMロールを作成:

# ロールを作成
aws iam create-role \
  --role-name lightfile6-lambda-role \
  --assume-role-policy-document file://trust-policy.json

# ポリシーをアタッチ
aws iam put-role-policy \
  --role-name lightfile6-lambda-role \
  --policy-name lightfile6-permissions \
  --policy-document file://permissions-policy.json

2. Lambda関数の作成

ダウンロードしたzipファイルを使用してLambda関数を作成します。

AWSコンソール:

  1. Lambdaコンソールを開く
  2. 関数の作成をクリック
  3. 一から作成を選択
  4. 関数名: lightfile6-optimizer (任意)
  5. ランタイム: Amazon Linux 2023
  6. アーキテクチャ: arm64 または x86_64
  7. 実行ロール: 既存のロールを使用 → 先ほど作成したロールを選択
  8. 関数の作成をクリック
  9. コードタブで アップロード元.zipファイルを選択
  10. ダウンロードしたzipファイルをアップロード

AWS CLI:

aws lambda create-function \
  --function-name lightfile6-optimizer \
  --runtime provided.al2023 \
  --role arn:aws:iam::YOUR_ACCOUNT_ID:role/lightfile6-lambda-role \
  --handler handler \
  --zip-file fileb://lightfile-lambda.zip \
  --architectures arm64 \
  --timeout 45 \
  --memory-size 256

3. 環境変数の設定

Lambda関数に必要な環境変数を設定します。

最小限の設定:

aws lambda update-function-configuration \
  --function-name lightfile6-optimizer \
  --environment Variables="{
    LICENSE_TOKEN=your-license-token-here,
    QUALITY=medium,
    ACL=public-read,
    LANGUAGE=ja,
    LOG_LEVEL=info
  }"

バックアップを有効化する場合:

aws lambda update-function-configuration \
  --function-name lightfile6-optimizer \
  --environment Variables="{
    LICENSE_TOKEN=your-license-token-here,
    QUALITY=medium,
    ACL=public-read,
    BACKUP_BUCKET=your-backup-bucket,
    BACKUP_PREFIX=\${bucket},
    BACKUP_ACL=private,
    LANGUAGE=ja,
    LOG_LEVEL=info
  }"

主要な環境変数:

  • LICENSE_TOKEN (必須): ライセンストークン
  • QUALITY: 品質設定 (low/medium/high)
  • ACL: 最適化後の画像のACL
  • BACKUP_BUCKET: バックアップバケット名
  • MIN_SIZE: 最小ファイルサイズ (デフォルト: 5kb)
  • MAX_SIZE: 最大ファイルサイズ (デフォルト: 3mb)

詳細は環境変数一覧を参照してください。

4. S3バケットの準備

画像保存用のS3バケットを作成します(既存のバケットを使用する場合はスキップ)。

# 画像バケットを作成
aws s3 mb s3://your-image-bucket

# バックアップバケットを作成(オプション)
aws s3 mb s3://your-backup-bucket

# パブリック読み取りを許可する場合(ACL=public-readの場合)
aws s3api put-public-access-block \
  --bucket your-image-bucket \
  --public-access-block-configuration \
    BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false

aws s3api put-bucket-ownership-controls \
  --bucket your-image-bucket \
  --ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"

5. Lambda実行権限をS3に付与

S3がLambda関数を呼び出せるように権限を付与します。

aws lambda add-permission \
  --function-name lightfile6-optimizer \
  --statement-id s3-invoke-permission \
  --action lambda:InvokeFunction \
  --principal s3.amazonaws.com \
  --source-arn arn:aws:s3:::your-image-bucket

6. S3イベント通知の設定

画像がアップロードされたときにLambdaを起動するように設定します。

notification-config.json:

{
  "LambdaFunctionConfigurations": [
    {
      "LambdaFunctionArn": "arn:aws:lambda:REGION:ACCOUNT_ID:function:lightfile6-optimizer",
      "Events": ["s3:ObjectCreated:*"],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "suffix",
              "Value": ".jpg"
            }
          ]
        }
      }
    },
    {
      "LambdaFunctionArn": "arn:aws:lambda:REGION:ACCOUNT_ID:function:lightfile6-optimizer",
      "Events": ["s3:ObjectCreated:*"],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "suffix",
              "Value": ".jpeg"
            }
          ]
        }
      }
    },
    {
      "LambdaFunctionArn": "arn:aws:lambda:REGION:ACCOUNT_ID:function:lightfile6-optimizer",
      "Events": ["s3:ObjectCreated:*"],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "suffix",
              "Value": ".png"
            }
          ]
        }
      }
    }
  ]
}

イベント通知を設定:

aws s3api put-bucket-notification-configuration \
  --bucket your-image-bucket \
  --notification-configuration file://notification-config.json

AWSコンソールでの設定:

  1. S3コンソールでバケットを開く
  2. プロパティタブを選択
  3. イベント通知イベント通知を作成
  4. 名前: lightfile6-trigger
  5. イベントタイプ: すべてのオブジェクト作成イベント
  6. 送信先: Lambda関数
  7. Lambda関数: lightfile6-optimizer
  8. サフィックスフィルター(オプション): .jpg, .jpeg, .png

動作確認

1. テスト画像をアップロード

aws s3 cp test-image.jpg s3://your-image-bucket/

2. CloudWatchログを確認

# ログストリームを確認
aws logs tail /aws/lambda/lightfile6-optimizer --follow

成功時のログ例:

[info] s3://your-image-bucket/test-image.jpg 処理が正常に完了しました

3. 最適化結果を確認

# 最適化された画像をダウンロード
aws s3 cp s3://your-image-bucket/test-image.jpg ./optimized-test-image.jpg

# ファイルサイズを比較
ls -lh test-image.jpg optimized-test-image.jpg

トラブルシューティング

Lambda関数が実行されない

確認事項:

  1. S3イベント通知が正しく設定されているか

    aws s3api get-bucket-notification-configuration \
      --bucket your-image-bucket
  2. Lambda実行権限が付与されているか

    aws lambda get-policy --function-name lightfile6-optimizer

ライセンスエラー

エラー: "License validation failed"

解決策:

  • 環境変数LICENSE_TOKENが正しく設定されているか確認
  • トークン形式が正しいか確認(username!signature
  • トークンの有効期限を確認
aws lambda get-function-configuration \
  --function-name lightfile6-optimizer \
  --query 'Environment.Variables.LICENSE_TOKEN'

権限エラー

エラー: "AccessDenied"

解決策: IAMロールのポリシーで、対象バケットへのアクセスが許可されているか確認。

aws iam get-role-policy \
  --role-name lightfile6-lambda-role \
  --policy-name lightfile6-permissions

アンインストール

手動でインストールした場合の削除手順:

# 1. S3イベント通知を削除
aws s3api put-bucket-notification-configuration \
  --bucket your-image-bucket \
  --notification-configuration '{}'

# 2. Lambda関数を削除
aws lambda delete-function --function-name lightfile6-optimizer

# 3. IAMロールを削除
aws iam delete-role-policy \
  --role-name lightfile6-lambda-role \
  --policy-name lightfile6-permissions

aws iam delete-role --role-name lightfile6-lambda-role

# 4. S3バケットを削除(必要に応じて)
aws s3 rb s3://your-image-bucket --force
aws s3 rb s3://your-backup-bucket --force

参考情報

本番環境ではCloudFormationを使用したインストールをお勧めします。手動インストールは、特殊な要件がある場合や既存の環境に組み込む場合に使用してください。