Lambda関連のことを調べてみた2020年02月14日

Lambda関連のことを調べてみた2020年02月14日
目次

aws lambda layers でライブラリをアップロードするときは決まったディレクトリ構成でなければならない

# 概要
aws lambda layers でライブラリをアップロードするときは決まったディレクトリ構成でなければいけません。

# 解説
例えば、nodejs の場合だと、nodejsディレクトリにnode_modulesディレクトリを入れます。
zipのファイル名は何でもokです。

“`
xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk
“`

知らないとはまる可能性があるので共有でした。

当然 nodejs 以外の言語でもディレクトリ構成が決まっているので、下記公式ドキュメントで確認してください。

AWS Lambda レイヤー
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html

元記事を表示

Chalice ー Python Serverless Microframework for AWS

PythonのAPIを作りたいと思って調べていたところ、Chaliceを見つけました。
今回はちょっとした備忘録記事です。

Chaliceは一言で言えば、AWSによるPythonのサーバーレスフレームワークです。
AWSからGitHubに公開されており、怪しい挙動はきっとあまりしないでしょう。
https://github.com/aws/chalice

ChaliceはデプロイするとApiGateway + lambdaを利用してサーバーレスに公開してくれます。

# 環境

– macOS Catalina 10.15.1
– python 3.6.4
– chalice 1.12.0

# Chaliceのインストール
“`
$ pip install chalice
$ chalice –version
“`

# AWS IAMの設定
ApiGatewayとlambdaの操作権限を持つユーザーから操作しないとデプロイできません。
今回は簡単にポリシー「AdministratorAccess」を与えたユーザーから操作させます。
本当ならより権限を絞って最低限の開発

元記事を表示

LambdaでEC2内のシェルスクリプトを実行

## はじめに

### 本記事の対象となる読者

特定のトリガーでLambdaを起動して、EC2内のシェルスクリプトを実行したい

### システム概要

上記のやりたかったことを実現するために使用したサービスは以下です。

* AWS Lambda(以後Lambda)
* AWS System Manager(以後SSM)
* AWS Elastic Computer Cloud(以後EC2)

### 書かないこと

* EC2インスタンスの構築方法

## EC2

Amazon Linux2を使用して、無料利用枠でインスタンスを用意します。

### EC2インスタンスを作成

EC2インスタンスを作成する前に以下のポリシーをアタッチしたIAMロールを作成しておきます。仮に名前は`AWSServiceSSMRole`としておきます。

* AmazonEC2RoleforSSM
* AmazonSSMFullAccess

上記で作成したロールをインスタンスに割り当てインスタンスを作成します。

> ssm-agentのインストールは必要ありません。

### インスタンス内

元記事を表示

Lambda関数を設定してS3イベントで動かそう!

#Lambdaってなに?
AWSの提供するサービスの一つで、サーバ管理をすることなく処理を実行することができるサービスです。

例えばLambdaを利用しない場合、EC2でサーバを作成し処理実行に必要なミドルウェアや言語をインストールし、環境設定をすることで初めて処理が実行されます。

しかし、Lambdaではそのようなサーバのプロビジョニングをすることなく、処理を書くだけで実行することが可能になります。

これにより、
★サーバ自体の管理・メンテナンスが不要
★処理が実行されている時間のみ課金されるので処理の頻度によってはコストを大幅削減可能
★他AWSサービスと容易に連携できるので、AWSメインのアーキテクチャでは大変便利
というメリットがあります。

#トリガーとは?
書いた処理を実行させるにはトリガーというものを設定する必要があります。
AWSのあらゆるサービスと連携ができ、CloudWatchでアラームが出たら実行、kinesis data stream にデータが存在するとき実行、S3にファイルが置かれたら実行などが代表的な例になります。

つまりLambdaは**実行する

元記事を表示

RDS Proxy ちょっと試してみた。

AWSの一番好きなサービスはAWS Lambda な人です(再々掲)

## 注意書き
`Preview版のサービスなので、GAになるまでに色々と変更される可能性は大いにあります。`

AWS re:invent前後に発表されたVPC Lambda関係のアップデートやってみたシリーズラストかな?
ちょっと時間経っちゃいましたけど。

### サンプルコード
サンプルソースはこんな感じ。汚くてすみません。
Node.js v12.xで確認済みです。

[Airport, airline and route data](https://openflights.org/data.html) にあるroute.csv を加工したものを、
RDSに放り込んで、乱数生成して、それにあった航空会社のIATA2レターコード※ を参照しているだけです。

“`javascript:handler.js
‘use strict’;
const mysql = require(‘mysql’);
const util = require(‘util’);

const dbHost

元記事を表示

TABLE 形式の Aurora(MySQL 互換)スロークエリログを Elasticsearch Service (6.8) に取り込み S3 に保存するメモ(Lambda Python 3.8 版)

こちらは、

– **[TABLE形式のAurora(MySQL互換)スロークエリログをElasticsearch Service (6.0/6.2) に取り込みS3に保存するメモ](https://qiita.com/hmatsu47/items/8c92b1a43fd412c054cf)**

の Elasticsearch Service 6.8 / Lambda Python 3.8 対応化メモです。

1 ヶ月ほど前に、

– **[ALB のアクセスログを Elasticsearch Service 6.8 に取り込むメモ(Lambda Python 3.8 版)](https://qiita.com/hmatsu47/items/432b1f18f40bba16f5d1)**
– **[CloudFront のアクセスログを Elasticsearch Service 6.8 に取り込むメモ(Lambda Python 3.8 版)](https://qiita.com/hmatsu47/items/e61e1065ba521896225c)**
– **[Ela

元記事を表示

Amazon Lexで簡単なボットを作成してみた

# はじめに
この記事はLexの勉強用として試したことをまとめたものです。
書籍「[AWSでつくる-AIプログラミング入門](https://www.amazon.co.jp/AWS%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B-AI%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%9D%BE%E6%B5%A6-%E5%81%A5%E4%B8%80%E9%83%8E/dp/4798059056)」を参考にして対話ボットを作成してみました。

# Amazon Lexについて
* 対話型インターフェイスを作成することができるAIサービスである。
* 会話ボットを簡単に構築することができる。
* Amazon Alexaで使われている深層学習技術と同じ技術を使用している。
* 現時点で日本語未対応である。

# IAMロールを作成
* Lexに権限を与えるためのロール「AWSServiceRoleForLexBots」を作成する。
* http

元記事を表示

serverless framworkでLambda+APIGatewayをdeployする

## はじめに
アプリケーションを Lambda にデプロイする際どんな方法を使用しているだろうか?
AWS SUM ,code deploy と使用してきたがコマンドを複数回叩かないといけなかったりとちょっと面倒臭かった。
そこで最近自分の周りで話題になっている serverless framwork を試してみる。
何やらコマンド一つでビルド・デプロイを行ってくれたりとかなり便利らしい。
スクリーンショット 2020-02-09 11.34.10.png

## Serverless Framework インストール
以下のコマンドを実行し Serverless Framework をインストールする。

“`
$ npm install -g serverless
“`

> ローカル端末で Serverl

元記事を表示

AWS Lambdaでslackに新着論文通知

# TL;DR

AWS Lambdaを用いてMicrosoft Academicで新着論文を検索してSlackに通知するツールを作った。

# はじめに

研究室等のSlackに新着論文通知出せたら便利ですよね。

以前はjournalのRSSを使ってましたが、あまり関係ない論文が飛んできてイマイチ機能していなかったので自分でフェッチツールを作ることにしました。

(実際、皆さんどうしてるんでしょうか)

通知を出すだけなので、[AWS Lambda](https://aws.amazon.com/jp/lambda/)や[Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/)といったサーバーレスアーキテクチャを用いれば非常に安価で簡単に構築できます。

今回はAWS Lambdaを用い、また論文検索には[Microsoft Academic](https://academic.microsoft.com/home)のAPI、[Academic Knowledge API](https://doc

元記事を表示

AWS Lambdaと仲良くなれるかもしれないまとめ

– AWS Lambdaに関してざっとまとめてます
– 具体的な使い方ではなく、サービスの位置付けや概念に関してまとめています

## 概要
[AWS Lambda とは](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)によると

>AWS Lambda はサーバーをプロビジョニングしたり管理する必要なくコードを実行できるコンピューティングサービスです。
>
>AWS Lambda は必要時にのみてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします。使用したコンピューティング時間に対してのみお支払いいただきます- コードが実行中でなければ料金はかかりません。
>
>AWS Lambda では、管理を全く必要とせずに、任意のアプリケーションやバックエンドサービスで仮想的にコードを実行できます。AWS Lambda は、高度な可用性のコンピューティングインフラストラクチャでコードを実行し、サーバーとオペレーティングシステム、システムのメンテナンス、容

元記事を表示

apacheからS3に静的ページを移行してパス補完で詰まった話

# 何を書いた記事か

AWS S3を用いて静的ページをホスティングする際のTipsです。
特に、apacheなどで配信されていた静的ページをS3に移行する際に使えると思います。

apacheなどのMWがよしなに解析してくれていたURI PathをS3を用いたホスティングでどのように実現するかについて記載します。

# ストーリー

とあるWebサイトのクラウド移行案件を進めることになりました。
そのWebサイトには、静的コンテンツ(HTML/CSS/JavaScript)のみで構成されたLP(静的ページ)が存在することがわかり、せっかくクラウドに移行するので、信頼性の高いS3から配信するようにしようと考えました。
また、対象のLPは接続できるIPに制限をかける必要があり、その実現についても考える必要がありました。

## As-Is

– apacheで静的ページを配信
– LoadBalancerでSSLを終端し、FirewallでIP制限を実施
– アクセスログはapache→fluentdで取得

## To-Be

– 静的コンテンツはS3上に配置
– SSL通信を実現する

元記事を表示

AWS Lambdaでカナリアリリースする

# LambdaのVersionとAlias
AWS LambdaではPublishすると固有のVersion番号が割り当てられる。
Versionには任意の名前のAliasをつけることが可能で、Aliasに関連付けるVersionを変更することで、Aliasを指定してFunctionを呼び出しているユーザが利用するVersionを変更することができる。
![Lambda_Version_Alias.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13038/02427f6b-9a54-a781-62a1-0305578379c9.png)

# Additional versionを用いて、新しいVersionをカナリアリリースする
Aliasには Additional versionというオプションが存在し、主として指定したVersionとは異なるVersionとその呼び出し割合を指定することができる。
Additional versionの有無や呼び出し割合は任意のタイミングで変更ができ、新しいVe

元記事を表示

「セキュアで堅牢なAWSアカウント」を実現する CloudFormationテンプレート – ④アクセスキーのローテーションと削除

# はじめに

AWSには、アカウントやリソースへの脅威検知に対応した、**AWS IAM Access Analyzer**, **AWS Security Hub**, **Amazon Inspector**, **Amazon GuardDuty**, **AWS CloudTrail**, **AWS Config** などのサービスが用意されています。

また、[**CIS AWS Foundations Benchmark**](https://d1.awsstatic.com/whitepapers/compliance/AWS_CIS_Foundations_Benchmark.pdf) という**セキュリティガイドライン**が公開されており、このガイドラインは、**AWSアカウントをセキュアに保つために必要なAWSのセキュリティ設定**を集めた**ベストプラクティス集**として活用できます。自身のAWSアカウントがこのガイドラインにどの程度準拠しているのかを確認/監査する手段として、**AWS Security Hub**で、**CIS AWS Foundation

元記事を表示

【Slack】インタラクティブメッセージについて

この記事の内容は[この](https://api.slack.com/messaging/interactivity)公式ページを参考に作成しました。

SlackのインタラクティブメッセージはSlackアプリを強力なワークフローパートナーになりうる物です。

# メッセージ内アプリの対話性
[Block Kit](https://api.slack.com/messaging/composing/layouts#adding-blocks)を利用してリッチなメッセージレイアウトを作成する事ができます。
また、Block Kitには、インタラクティブ機能を有効にするコンポーネントも含まれています。
これらの対話型コンポーネントを利用して、単純な情報通知アプリから、ユーザー向けの強力なパートナーアプリを作成できます。

## Block Kitに含まれるインタラクティブ機能
– ボタン
– リスト選択
– 複数選択リスト
– オーバーフローメニュー
– 日付ピッカー
– プレーンテキスト入力フィールド
– ラジオボタン

# インタラクティブメッセージの使用方法

## Lambdaの作

元記事を表示

特定のタグを含むツイートに英訳をつけてインスタに投稿したかった

## やりたかったこと

**特定のタグを含むツイートに英訳をつけてインスタに投稿したい**
なんでこんなことをしようとしたのか。
2019年6月からPS4でFF14をやっていまして、あるツイートをしたところ、
ちょっと反響がありました。
d0dfa62c-4f40-9e98-e63c-e2730f1f5a27.jpeg

2020年になり、せっかくなら毎日投稿しようと思い、1月から日々投稿しています。
ただし、TwitterのアカウントがFF14以外のことをツイートしていること、
インスタ界隈も盛り上がっていることから、FF14用のアカウントをインスタで作成し、
インスタで投稿を始めました。

ところが、インスタでは外国人のアカウントが多数。
もっと見てもらうには、英訳も必要なのです。

元記事を表示

S3にCSVファイルがアップロードされるとLambdaがDynamoDBへデータを挿入します

#概要
S3へjsonファイルがアップロードされるとLambdaがそのファイルの中身を解析して、DynamoDBへデータを挿入します。

#jsonファイルの構成
`data`キーに配列があり、配列の要素はオブジェクトとなっています。

“`json
{
“data”: [
{
“item1”: “sample data1”,
“item2”: 123,
“item3”: “test data1”
},
{
“item1”: “sample data2”,
“item2”: 1234,
“item3”: “test data2”
},
]
}
“`

#主な流れ

1. S3へファイルがアップロードされるとLambdaが起動
2. アップロードされたファイルの中身を取得
3. `data`キーから配列を取得
4. 配列を`forEach`で各要素をDynamoD

元記事を表示

今日から始めるSAM CLI【API Gateway + Lambda + DynamoDB】

## SAM CLIでAPI Gateway + Lambda + DynamoDBを使う

AWSでのサーバレス構築を考えた時に最も無難でポピュラーな構成(悪く言えばあまり面白みのない)として挙げられる、

– API Gateway
– Lambda
– DynamoDB

の構築を、SAM(Serverless Application Model) で行います。

## 書くこと
1. SAM CLIでプロジェクトの作成
2. SAMプロジェクトのデプロイ
3. SAMプロジェクトを修正してDynamoDBにテーブルを作成
4. SAMプロジェクトの更新

## SAM CLIでプロジェクトの作成

まずSAM CLIをインストールします。

[Installing the AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)

“`
$ sam –version
SAM CLI,

元記事を表示

LambdaでS3オブジェクトに独自メタデータの追加・更新を行う

# はじめに

LambdaでS3オブジェクトを制御したかったので、オブジェクトに独自のメタデータ(ユーザ定義メタデータ)を追加・更新して対処した。
本文では、ユーザ定義メタデータについて、実際のソースと実行結果について記す。

# ユーザ定義メタデータとは

Content-Lengthなどのオブジェクトの追加情報を`メタデータ`という。
メタデータには2種類あり、主にAWSシステム上で制御される`システムメタデータ`とユーザが独自で定義できる`ユーザ定義メタデータ`がある。
今回はファイルの上書き回数(メタデータ名を`x-amz-meta-count`とする)をユーザ定義メタデータとして定義する。

# Lambdaソース

下記LambdaをCloudWatchEventsなどをトリガーとして実行する。
指定したバケット、ディレクトリ配下のファイルを取得し、そのファイルのメタデータに`x-amz-meta-count`がなければ追加する。
あれば、メタデータの値を+1する。
最後に追加更新した内容でファイルを上書き(copy_object())する。

“`python

im

元記事を表示

AWS LambdaのNode.jsのランタイム更新時確認手順書

なかったんで用意しておきました。まだ本番環境でサポート期限間近のランタイムを使っている人は参考にしてください。
※当時はNode.js 8.10系が対象でした。

## TL;DR
– AWS Lambdaのランタイムの更新はダウンタイムがないので本番環境への適用もサービス稼働中でOK
– ランタイム更新時の動作確認は推奨
– 更新はAWSがランタイムサポートポリシーで定めている日付より前に実施する

## 手順
1. 本番環境以外の環境で本番環境にデプロイされている資源と同じものをデプロイする
2. デプロイした環境のLambdaのランタイムを上げる
3. 動作確認を実施
4. 問題なければ本番環境(ST環境 → 本番環境の順番でも)のLambdaのランタイムを更新する

## 気になるところ

#### 廃止(更新)をすぎても更新可能なのか
これについてAWSサポートに問い合わせてみました。
AWSサポート内の過去事例として、廃止(更新)以降でもランタイムの移行(サポート対象バージョンへの移行)が可能だった例があったそうですが、ドキュメントにも明記がないように、それが必ずしも可能と

元記事を表示

[Node.js]Google Cloud Functionsでimport/exrpot構文を使う

#Overview

フロントエンドはReact、バックエンドはNode.jsで作っていると、どちらでも利用する処理はソースコードを共有したくなります。
別の記事でesmというパッケージを知り、Google Cloud Functions(以降、GCF)でもimport/export構文を使いたくなりました。
GCFのフレームワーク内で動くから厳しいかな?と思っていたのですが、至って簡単だったので残しておきます。

#Target reader

– JavaScriptとNode.jsでソースコードを共有したい方。

#Prerequisite

– バックエンドはGCFを利用する、つまりNodeの起動オプションを指定するようなことはできない。
– Node.jsのバージョンはGoogle Cloud Function(GCF)に依存し、現時点ではV10系とする。

#Body

##どうしてimport/export構文にするの?

私のPJの場合、バックエンドで作成した機能をフロントエンドで実行するかも?という機能がいくつかあります。
そうなるとどちらも同じJSだし、フロント

元記事を表示

OTHERカテゴリの最新記事