Lambda関数をVPCにアタッチする
作成するイメージ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
・Lambdaを単独で作成し、公開するのではなく、VPCにアタッチし、インターネットゲートウェイ経由でLambdaからインターネットにアクセスさせる。
※パブリックサブネットとプライベートサブネットの2つの構成にしなくてもよいが
Lambdaはプライベートサブネットに置かれるケースの方が多いのでこのような構成としている。






③作成したルートテーブルを選び、明示的なサブネットの関連付けを行う。

④作成したパブリックサブネットを選び、ルートテーブルを関連付ける。



⑦作成したプライベートサブネットを選び、ルートテーブルを関連付ける。

①以下のようにLambdaからインターネットにアクセスするコードを記述する。
※requestsを使うためにレイヤーを使用しているがここでは説明を省略する。

②作成したLambda関数の「設定」⇒「VPC」→「編集」をクリックする。

③作成したVPC、プライベートサブネットを選び、関連つける。

④テストを実行し、正常に結果が返ってくることを確認する。

既存の外部ライブラリをLambdaレイヤで利用する
Pythonで外部ライブラリをLambdaのレイヤに登録するために
使用するzipファイルの作り方は以下の通り。
なお、環境はdockerに作成したamazon linux:2環境で以下を実行しています。
Windowsや他のLinuxだとそのOS用のライブラリが含まれてしまうこともあり
正常に動かない可能性が高いです。
以下の①~③コマンドはdoccker内のLinuxに接続した状態で実行してください。
①pipコマンドを実行しpandasをインストールする。
pip3 install -t /python pandas
②①をpythonという名前のzip形式のファイルに固める。
zip -r /dist/pandas.zip /python
③dokcerから抜ける。
exit
④②のファイルをローカルPCにコピーする。
docker cp testcont01:/dist/pandas.zip D:\hoge
▼パラメタの説明
testcont01・・・イメージから起動されるコンテナの名前(任意で設定した値でよい)
D:\hoge・・・ローカルPCのパス
パラメータストアを利用する
lambdaで実行する際に利用する値を外部ファイルから取得する方法の1つとして
パラメータストアがあります。(基本無料)
利用例は以下の通り。
●AWS System Manager → パラメータストア →「パラメータストアを作成」を行う
パラメタ名:TEST_PARAM_HOGE
利用枠:標準(無料)

●パラメータストアから値を取得するLambda関数
パラメータの取得には「SSM:GetParameters」権限が必要です。
Lambda関数の実行ロールに「AmazonSSMReadOnlyAccess」など上記を含んだ権限を付与してください。
lambda レイヤーのサンプル
自作のlambda関数を作成して呼び出すまでの手順は以下の通り。
①Layerのファイルを作成する
①-1.ライブラリ化したい関数を作成する

①-2.Python」の名前のフォルダを作成し、作成したファイルを格納する
Python
|------hogelayertest.py
①-3.2のフォルダをZIP形式にしてPython.zipを作成する
※Windowsの機能の右クリック→圧縮先→ZIP形式・・でOK。
②Layerを登録する
②-1.レイヤーの作成をクリックする。

②-2.作成したzipファイルをアップロードする。
名前は作成したzip内のソースや呼び出し時には無関係なので任意で決めてしまってよい。

③Layerの関数を呼び出す
③-1.lambdaを作成し、Layersをクリックする。

③-2.レイヤーの追加をクリックする

③-3.カスタムレイヤーを選択し、②で登録したレイヤーを選ぶ

③-4.レイヤーを呼び出す際のlambdaのコードは以下の通り。
lambdaからS3にファイルを書き込み
lambdaからS3にファイルを書き込みするPythonコードは以下の通り。

AmazonS3FullAccess
GASでJson形式のパラメタを受け取るAPI
Json形式でパラメタを受け取り、Json形式で返すスクリプトは以下の通り。
受け取ったJsonの中にあるkey3の値をmessageの値にセットして返しています。
//HTTP Postをハンドリングする
function doPost(e) {// 値を設定する
numval = "123456789"// JSONパラメタを受け取る(key3というパラメタ名)
var params = JSON.parse(e.postData.getDataAsString());
var value = params.key3;// 結果セットを作る
var result = {
message: value,
num: numval,
val: "test-20240912"
}
var out = ContentService.createTextOutput();//Mime TypeをJSONに設定
out.setMimeType(ContentService.MimeType.JSON);//JSONテキストをセットする
out.setContent(JSON.stringify(result));return out;
}
GASでパラメタを受け取る
e.parameterでパラメタを受け取ることができる。
以下は「inval」という名前のパラメタを受け取っている。
パラメタ名は任意の値をつけてよい。
//HTTP GETをハンドリングする
function doGet(e) {// 値を設定する
value = "hoge ???"
numval = "123456789"// パラメタを受け取る(invalというパラメタ名)
var text = e.parameter.inval;// 結果セットを作る
var result = {
message: value,
num: numval,
val: text
}
var out = ContentService.createTextOutput();//Mime TypeをJSONに設定
out.setMimeType(ContentService.MimeType.JSON);//JSONテキストをセットする
out.setContent(JSON.stringify(result));return out;
}
呼び出すときは以下のように?パラメタ名=値を記述する
url ='https://script.google.com/macros/XXXXXX/exec?inval=9998'



