Lambda関連のことを調べてみた2021年05月27日

Lambda関連のことを調べてみた2021年05月27日
目次

NuxtをコンテナにしてLambdaでデプロイするのが超簡単になった2021年

以前書いた[LaravelをコンテナにしてLambdaでデプロイするのが超簡単になった2021年](https://qiita.com/umihico/items/514cf792d30bf3706ef5)のNuxtバージョンです。[Djangoバージョンはこちら](https://qiita.com/umihico/items/4534e1f84e8de5a62db5)

有名どころで[nuxt-serverless](https://github.com/tonyfromundefined/nuxt-serverless)など色々ありますが、こんな手間・デメリットがあったかと思います。

– 静的ファイル用にS3を用意、同期対応
– API GatewayのURLに付与されるステージ変数の対応
– `npx create-nuxt-app`を使ったセットアップを行えない

そんな中、[それらのデメリットを脱却できそうな記事](https://www.serverless.com/examples/aws-node-vue-nuxt-ssr/)を見つけたので、create-next-

元記事を表示

Pythonのlambda式をなるべく簡単に理解する

Pythonを勉強するにあたり、lambda式と出会いました。
業務で使用することは少ないかもしれないですが、簡略化して書きたいときに使用できると良いかと思い、調べました。
しかし、自分自身なかなか理解できず、この記事にまとめようと思った次第です。
初心者の方の参考になると幸いです。
また、知見のある方で使用方法が誤っている場合はご指摘いただけると幸いです。

使用環境

* windows10
* python:3.7.9
* jupyter Notebook

#目次
* lambda式とは
* lambda式の定義
* lambda式の初歩
* lambda式でlistを用いる
* lambda式でfor文処理を実装
* lambda式でif文処理を実装

## lambda式とは
[ここでは](https://www1.gifu-u.ac.jp/~fujilab/lambda_html/1.html)lambda式とは、
`名前がついていない関数(無名関数)を表現する記法のひとつ`と説明があります。

## lambda式の定義
defを用いた場合の関数定義は以下です。

元記事を表示

PythonでLINE Botのリッチメニュー を活用したアプリを開発したので学んだことを記す

## リッチメニューとは何か
リッチメニューはLINE公式アカウントのトーク画面下部に表示されるメニュー機能。
リッチメニューの各領域にリンクを設定することで、LINE公式アカウントの各機能のほか、外部サイトや予約ページなどにユーザーを誘導することができる。

![Screen Shot 2021-05-25 at 11.05.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411851/fd0298e2-37a3-669b-12a5-f0c3212d6082.png)

## リッチメニューオブジェクト
“`json:json
{
“size”: {
“width”: 2500,
“height”: 1686
},
“selected”: false,
“name”: “Nice richmenu”,
“chatBarText”: “Tap to open”,
“areas”: [
{
“bounds”: {
“x”:

元記事を表示

AWS lambdaについて調べてみた【初学者向け備忘録】

## はじめに

フロントエンドの学習にあたり最近AWS Amplifyを利用し始めました。おそらく昨今のフロントエンドエンジニアはAWSの各種サービスの理解も避けては通れないということでまずはAWS Lambdaについて調べてみました。(2021年5月現在)

## AWS Lambda

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html

AWS Lambdaはサーバーレスでコードの実行環境を提供し、ソースコードをデプロイするだけでプログラムを実行してくれるサービスになります。プログラムとは別にトリガーをというイベントを用意し、イベントが呼ばれるたびにデプロイしたプログラムが実行されます。

例えば、API Gatewayへリクエストがあったときに送られた内容によって外部のDBサービスとやり取りをして結果を返すREST APIのような動きを行ったり、DynamoDBのテーブルが更新されたときに処理を行ったり、S3バケットに画像がアップロードされた時に画像を変化する処理を行ったりと他のAWSサービスと連携し

元記事を表示

NodejsでDynamoDB使ってみた

## 背景
はじめて業務でDynamoDBを使用したため、基本的なものだがメモを残して、自身のナレッジとして蓄えようかと

## 環境
– node.js
– DynamoDB
– Lambda

## 経験した関数
### 登録
– put

#### パラメータ
– TableName: テーブル名
– Item: 登録対象

“`
ex))
TableName: ‘test-table’,
Item: {
‘id’: 1,
‘name’: ‘test’,
}
“`
### 取得
– get

#### パラメータ
– TableName: テーブル名
– Key: AttributeValueのカラム名(一般的なTableのprimary key)

“`
ex))
TableName: ‘test-table’,
Key: {
‘id’: 1
‘sort’: 1
}
“`
### 検索
– scan

#### パラメータ
– TableName: テーブル名
– FilterExpression: SQLの条件式
– Express

元記事を表示

aws-vaultを用いてAWS SAMローカル実行をIDE上で行う方法。

## 事前設定

IDEはPyCharmを使用します。
AWS Toolkit for PyCharmのPluginインストール

## アクセスキーによる認証ではなく、aws-vaultにて認証処理

– ~/.aws/config にて[default]にcredential_process追加します。
※credential_processとは外部プロセスの標準出力から認証情報を取得する仕組みとのことです。セキュリティ面の考慮が必要であることに留意してください。

– 通常使用しているprofileはそのままで大丈夫です。なければ追記をお願いします。

“`
[default]
region = ap-northeast-1
credential_process = aws-vault exec –json default

[profile pycharm-test]
source_profile = default
role_arn = arn:aws:iam::xxxxxxxxxxxxxxxxxxxxxx
region = ap-northeast-1
“`

元記事を表示

CloudFront FunctionsでBasic認証ができるか試してみた

# はじめに

結論を申し上げるとできませんでした。悲しみが深いです。
「用法用量を守って正しくお使いください」という言葉がぴったりです。
Basic認証をCloudFrontで実装したいならLambda@Edgeを使いましょう。

参考資料:

– [https://michimani.net/post/aws-about-runtime-of-cloudfront-functions/](https://michimani.net/post/aws-about-runtime-of-cloudfront-functions/)
– [https://dev.classmethod.jp/articles/cloudfront-functions-usecases/](https://dev.classmethod.jp/articles/cloudfront-functions-usecases/)
– [https://aws.amazon.com/jp/blogs/news/introducing-cloudfront-functions-run-your-code-at-th

元記事を表示

AWS Lambda

#Lambda サーバレス

EC2インスタンスの代わりにコードを実行することで、効率的なアーキテクチャを実現する。
利用者は、ソースコードだけを準備すればすぐに実行できるようになり、自動的にスケール等をおこなてくれる。

##Lambdaの特徴
・実行基盤は全てAWSが管理
・AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実行可能
・Node.js/javaで書かれたコードを実行可能
・100ミリ秒単位でコード実行時間に対しての課金でありコスト効率が非常に高い
・オートスケール

##Lambdaがサポートしている言語
・Node.js
・Ruby
・PowerShell
・Python
・C#
・Java
・Go

##Lambda関数
Lambdaを利用するには、Lambda関数という単位で、実行プログラムとその実行トリガーとなるイベントを事前に定義します。

実行数に応じて支払いが発生するため、 Lambda関数が無期限に実行されないようにタイムアウト設定がなされています。 指定されたタイムアウトに達するとLambda関数は実行を終了します。そのた

元記事を表示

[Node]AWS LambdaからDynamoDBを操作する

こんにちは take-2405です。

今回はnodeでAWS Lambda関数を作成しました。(DymanoDBも触りました)

今後開発する際のテンプレートとして残しておきたいと思います。

(今回はDynamoDBのデータを取得しています)

“`javascript:index.js
const AWS = require(“aws-sdk”);
// DBと接続 (regionを指定するとaws accountに紐づくDynamoDBに接続されます。)
const dynamoDB = new AWS.DynamoDB.DocumentClient({
// region は人によって変わります。日本だとap-northeast-1かな?
region: “ap-northeast-1”
});
exports.handler = async (event) => {
//DynamoDB のクエリを記載する
let getDatas = async (argument) => {
const params = {

元記事を表示

PostmanでJSONをPOSTし、DynamoDBに格納したときのメモ

# 概要
Postmanを用いてJSONをPOSTし、JSON内の情報をDynamoDBに格納するための環境を構築したためメモを残します。

# 1.DynamoDBのテーブル作成
パーティションキーとソートキーは以下のように設定しました。右下の青い作成ボタンを押すとテーブルが作成されます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1516301/d18c0a13-717d-dd56-63b3-024cd26b76bd.png)

# 2.Lambda関数の作成
JSONの情報をDynamoDBに格納する仕事をしてくれるLambda関数を作成します。ランタイムはPython 3.7を用いました。
IAMでLambdaがDynamoDBに書き込みできるようにロールを作成し、適用してください。

“`python:data-store.py
import boto3
from decimal import Decimal

dynamodb = boto3.resource(‘dy

元記事を表示

EC2/Win の Software Inventory を作ってみた。 Describe して DynamoDB に Put。lambda/python 3.8 で。

動作イメージ。
1.ec2/describe_instances を実行し、InstanceIDを取得
2.「1」で取得した InstanceID を引数として、ssm/list_inventory_entries を実行し、Software の Entry を取得
3.「1」と「2」の結果を引数として、dynamodb.put_item を実行し、DDBテーブルに入力。
を繰り返す。

以下では、各ステップの動作を確認した上で、最後にがっちゃんこする。

###Step1. EC2のリストを取得してみる。
“`python:lambda
import boto3
import json

def lambda_handler(event, context):

#EC2クライアント定義
ec2_client = boto3.client(‘ec2’)

#EC2インスタンスのリストを取得するため、describe。
response = ec2_client.describe_instances()

#インスタンス台数分Inventoryを

元記事を表示

EC2 インスタンスの特定の情報を収集する

素人が自分のノートとして書いてますが、改善点あれば是非コメントください

###リージョン指定
ec2クライアント定義時に、region_name = ‘us-west-2’ 。

“`python:lambda-python38
import json
import boto3

def lambda_handler(event, context):

#ec2 client を定義、引数の region_name = ‘xxx’ でリージョン指定。
ec2client = boto3.client(‘ec2’, region_name = ‘us-west-2’)

#describe した値を response に入力
response = ec2client.describe_instances()

#response を出力
print(response)
“`

### Describeで出力される順番を使った特定のインスタンスを指定。
response[‘Reservati

元記事を表示

ssm inventory を aws lambda / python3.8 でたたいてみた。

素人が自分のノートとして書いてますが、改善点あれば是非コメントください

###まず AWS CLI でコマンドを確認
InstanceID と インベントリタイプの指定が必要。

“`awscli:aws-cli
aws ssm list-inventory-entries –instance-id i-xxxxxxxxxxxx –type-name AWS:Application
“`
今回リストしたかったのは PV Driver。確認出来た。

“`awscli出力:awscli出力(一部抽出)
{
“TypeName”: “AWS:Application”,
“InstanceId”: “i-xxxxxxxxxxxxxxx”,
“SchemaVersion”: “1.1”,
“CaptureTime”: “2021-05-17T10:44:06Z”,
“Entries”: [
{
“Architecture”: “x86_64”,
“Ins

元記事を表示

describe 等で取得した情報を Dynamo DB に保存する

素人が自分のノートとして書いてますが、改善点あれば是非コメントください

DynamoDBテーブルに入力する値を渡された関数だけをピックアップ。

“`python:aws-lambda-python3_8
import json
import boto3

def lambda_handler():

#DynamoDBテーブルはあらかじめ作ってある前提。本来なら、テーブルが無ければ作るみたいな感じにすべき。
table_name = ‘test’

#DynamoDBテーブルに行として追加する情報を item として定義
item = {
“db-instance-id”: ‘i-xxxxxxxxxxxx’,
“db-instance-version”: ‘1.23.3’
}

#DynamoDBクライアントを定義
dynamodb_client = boto3.resource(‘dynamodb’)

#テーブルにItemを入力
d

元記事を表示

aws lambda で「Task timed out after 3.00 seconds」エラー

【Task timed out】
timeout だよ。lambda 関数の実行時間はデフォルト3秒に制限されているので、処理終了が3秒以上かかるときは変更が必要です!

“`json:エラー
{
“errorMessage”: “2021-05-18T04:20:10.454Z 95510f9b-1d66-48f6-bad0-xxxxxxxxx Task timed out after 3.00 seconds”
}
“`

設定 → 一般設定 → タイムアウト で、デフォルト3秒を変更。

元記事を表示

“errorMessage”: “name ‘instnaceid’ is not defined” エラー

素人が自分のノートとして書いてますが、改善点あれば是非コメントください

32行目 の【instnaceid】という文字が定義されていないよ。というエラー。
まぁ、だいたい入力間違い。w
よく文字を見直してね。
67行目 がクローズアップされているのは67行目から呼び出された関数内での事象だから。

“`json:エラー
{
“errorMessage”: “name ‘instnaceid’ is not defined”,
“errorType”: “NameError”,
“stackTrace”: [
” File \”/var/task/lambda_function.py\”, line 67, in lambda_handler\n get_inventory(instanceid)\n”,
” File \”/var/task/lambda_function.py\”, line 32, in get_inventory\n print(instanceid_name, instnaceid, n

元記事を表示

EC2 を台数分リストする

素人が自分のノートとして書いてますが、改善点あれば是非コメントください

EC2 を台数分リストします。

“`python:aws-lambda-python38
import boto3
import json

def lambda_handler(event, context):

#EC2クライアント定義
ec2_client = boto3.client(‘ec2’)

#EC2インスタンスのリストを取得するため、describe。
response = ec2_client.describe_instances()

#インスタンス台数分 for 文で回す
for reservation in response[“Reservations”]:
for instance in reservation[‘Instances’]:
instanceid = instance[‘InstanceId’]
#表示
pr

元記事を表示

“errorMessage”: “Syntax error in module ‘lambda_function’: invalid syntax (lambda_function.py, line 14)”エラー

【Syntax error in module ‘lambda_function’:】
構文ミスです。

例の場合は、関数定義の行末に「:」が抜けてたもの。
ほぼ間違いなく、指摘のある行数(今回は14行目)のどこかに、正しくない構文(何かが足りないとか、コロンとセミコロンがまちがってるとか)があるので、おちついてじっくり1文字ずつ見直そう!

“`json:エラー
{
“errorMessage”: “Syntax error in module ‘lambda_function’: invalid syntax (lambda_function.py, line 14)”,
“errorType”: “Runtime.UserCodeSyntaxError”,
“stackTrace”: [
” File \”/var/task/lambda_function.py\” Line 14\n def get_inventory(instanceid)\n”
]
}

元記事を表示

“errorMessage”: “An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation.”, エラー

【An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation】
DescribeInstances するための権限がない。というエラー。

“`json:エラー
{
“errorMessage”: “An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation.”,
“errorType”: “ClientError”,
“stackTrace”: [
” File \”/var/task/lambda_function.py\”, line 10, in lambda_handler\n response = ec2_client.describe_instances()\n”,
” File \”/var/runtime/

元記事を表示

AWS Lambdaの中からPythonでAWSアカウントIDを取得

Pythonで書かれたAWS Lambdaの中からAWSのアカウントIDを取得するには、

“`python
account_id = boto3.client(“sts”).get_caller_identity()[“Account”]
“`

これで12桁の文字列を取得できす。

なお、リージョンやLambdaの名前などは環境変数から取得できます。

[AWS Lambda 環境変数の使用 – AWS Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html)

例: `os.environ[“AWS_REGION”]`

# 試したサンプルコード

ここではServerless Frameworkを使っています。

Serverless Frameworkのプロジェクト作成

“`console
$ serverless create –template aws-python3
“`

`serverless.yml` 作成

“`yaml
serv

元記事を表示

OTHERカテゴリの最新記事