AWS Lambda 関数のコードをインポート・エクスポートする方法

皆さんこんにちは。
秋といったら焼き芋。いとさんです。

さて今回Lambda関数のコードをインポート・エクスポートする方法をご紹介いたします。

はじめに

コードの作成時にメモ帳などのテキストエディタを利用し、コピー&ペーストによるコード移行を行う際、まれにコンテキストエラーが発生する場合があります。このようなエラーは、意図しない文字列の変換や改行コードの違い、隠れた文字やフォーマットの不一致などが原因となることがあり、正常に動作していたコードが突如としてエラーを引き起こすリスクとなります。

このような現象を確実に回避するためには、テストが正常に完了した関数やプログラムを、Zipファイルなどのアーカイブ形式でエクスポートし、必要な環境へインポートする方法が非常に有効です。ファイル単位でのエクスポート・インポートを行うことで、元のコードの構造や文字コード、フォーマットが保全され、手動でのコピペ作業による予期せぬエラーの発生を防止しましょう。

 

ファンクションコード.zipファイルとAWS SAMファイルの違い

ダウンロード形式には『AWS SAMファイル』『ファンクションコード.zipファイル』の2種類があります。
AWS SAMファイルは「どういうサーバーレスアプリをAWS上で動かしたいか」をひとまとめに記述する設計図です。
コード(zip)本体ではなく、“どんなリソースを、どんな繋がり・設定で”作るかを管理するファイルです

AWS CLI(コマンドラインツール)を使いSAMコマンドを実行すると中身がCloudFormationテンプレートとしてAWSに送信され自動でAWS本番/テスト環境を構築・更新することが出来ます。

(コード例)

# この AWS SAM テンプレートは、関数の設定から生成されました。関数に 1 つ以上のトリガーがある場合は、これらのトリガーに関連付けられている AWS
# リソースがこのテンプレートで完全に指定されておらず、プレースホルダ値も含まれていないことに注意してください。AWS Infrastructure
# Composer またはお気に入りの IDE でこのテンプレートを開き、他の AWS リソースでサーバーレスアプリケーションを指定するように変更します。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: An AWS Serverless Application Model template describing your function.
Resources:
  Testlambdafunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Description: ''
      MemorySize: 128
      Timeout: 3
      Handler: lambda_function.lambda_handler
      Runtime: python3.13
      Architectures:
        - x86_64
      EphemeralStorage:
        Size: 512
      EventInvokeConfig:
        MaximumEventAgeInSeconds: 21600
        MaximumRetryAttempts: 2
      PackageType: Zip
      Policies:
        - Statement: []
      RecursiveLoop: Terminate
      SnapStart:
        ApplyOn: None
      RuntimeManagementConfig:
        UpdateRuntimeOn: Auto
 

今回はコードのみを移行する方法として、zipファイルでのダウンロードを行います。

 

やってみよう

それでは早速やってみましょう。
使用したいLambda関数に移動しファンクションコード.zipをダウンロードを選択します。

ファンクションコード.zipファイルは実行プログラムを、zip形式でまとめた圧縮ファイルであり中身はLambda関数として稼働するコードとなっています。
他のLambdaで再利用・バックアップ・ローカル編集用として使用できます。

今回エクスポートしたzipファイルの中身はこのようになっております。
テキストエディタやVScodeで確認ができるので自分の使用したい関数が出ているか確認しましょう。

import boto3
import json
import re
import os

ses = boto3.client('ses')
FROM = os.environ['FROM_ADDRESS']  # SES認証済みアドレス
TO = [os.environ['TO_ADDRESS']]    # 宛先アドレス(複数可)

def lambda_handler(event, context):
    message = event['Records'][0]['Sns']['Message']

    # 特定のリンクを除去(例:全リンク)
    sanitized_message = re.sub(r'https?://[^\s]+', '[リンク削除]', message)

    response = ses.send_email(
        Source=FROM,
        Destination={'ToAddresses': TO},
        Message={
            'Subject': {'Data': '[SecurityHub] 検出通知', 'Charset': 'UTF-8'},
            'Body': {'Text': {'Data': sanitized_message, 'Charset': 'UTF-8'}}
        }
    )
    return {
        'statusCode': 200,
        'body': json.dumps('Email sent')
    } 

zipファイルがダウンロードされますのでこれをLambda関数でインポートします。

インポートしたいLambda関数に移動しアップロード元>zipファイルを選択します。

アップロードを押下し使用したいzipファイルを選択します。

これでLambda関数のコードをインポート・エクスポートが完了しました。

 

最後に

検証環境と本番環境といった異なる環境間で同じコードを使用する場合は、このZipファイルによるパッケージング・移行機能の活用が非常に重要です。こうした工夫を取り入れることで、環境ごとの差異に起因する不具合を未然に防ぎ、安定した運用体制を構築することができます。

コードの移行や環境を跨いだ運用に際しては、是非この方法を取り入れ、より安全かつ効率的な開発・検証を実現しましょう。

著者について

運営担当のものです
◼️認定資格
・AWS Certified Cloud Practitioner
現在All AWS Certifications Engineers 目指して奮闘中
かわいいものと擬人化が大好き

いとさんをフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWS
シェアする
タイトルとURLをコピーしました