Lambda関連のことを調べてみた2019年11月24日

Lambda関連のことを調べてみた2019年11月24日
目次

Greengrass(v1.9.4)上でNode.js(v8.10)のLambdaのデプロイができない問題の解決法

※追記
Greengrass Nodejs SDKのGitHubに書いてますね。。
https://github.com/aws/aws-greengrass-core-sdk-js

> Rename the file to nodejs8.10
> Make sure the file is not a symlink.

シンボリックリンクもだめらしいです。

GreengrassにNode.js(v8.10)のLambdaをデプロイすると、エラーになります。

“`
Deployment xxxxx of type NewDeployment for group xxxxx failed error: worker with xxxxx failed to initialize
“`

ログを確認すると、`nodejs8.10`というバイナリがないよと言っているようです。

“`console:/greengrass/ggc/var/log/system/runtime.log
[ERROR]-runtime execution error: unable to

元記事を表示

【AWS】CloudFormation::Macroを使って多数のIPを接続許可する

初めての記事投稿です。
よろしくお願いします。

# 使うもの

– CloudFormation
– Lambda(Python3)

めんどくさいからソースと作り方だけくれって人向けにgithubに置いておきます。
コードは記事に書いてあるのと同じです。
https://github.com/nekotouma0114/CloudFormationMacroDemo

# 事の始まり

僕「テスト環境の接続許可するIPって何があります?
お客さん「xxxとyyyとzzz….(数十個羅列※)お願いね!」
僕「あ、はい」

※IPはばらばらでCIDRでまとめれないような状態

AWSのユーザガイド([AWS::EC2::SecurityGroup Ingres](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule-1.html))を見る限りまとめてIPは指定できず、
CloudFormationにはループ構造が見当

元記事を表示

Amazon Cognito を利用して、会員登録を行う。

## はじめに
ここでは、Amazon Cognito を使用して、メールアドレスとパスワードを登録するためのソースコードを書きます。ただし、既に[ユーザープールを作成し、ユーザープールにアプリを追加ている](https://aws.amazon.com/jp/getting-started/projects/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/module-2/)ものとします。

## AWS Amplify ライブラリをインストール
Amazon Cognito を使用するには、[AWS Amplify ライブラリ](https://github.com/aws-amplify/amplify-js)が必要なのでインストールします。

“`terminal
$ npm install aws-amplify –save
“`
ちなみに [「Amazon Cognito ID SDK for JavaScript」が「AWS Amplify ライブラリ」 の一部になった](https://

元記事を表示

LambdaからSystems Managerを実行してEC2のバックアップを取得する

## はじめに
EC2の定期バックアップを取得をするのに良い方法はないかと思っていたところ、SSMでスナップショットが取得できることを知ったので、Lambdaから実行してみました。
サーバーの作成は省略しますが、Systems Managerを使用するので、SSMエージェントがデフォルトインストールされているWindows Server 2019を使用しています。

参考
[Windows インスタンスで SSM エージェント をインストールし設定する](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-ssm-win.html)

# やったこと
– Windowsサーバーの作成
– Systems Managerからバックアップ取得
– LambdaからSystems Manager ドキュメントの実行

# Windowsサーバーの作成とIAMロール設定
バックアップを取得するため、EC2を1台作成します。
![image.png](https://qiita-im

元記事を表示

Serverless Framework で 自身のAPIのURLを取得したい

### はじめに

Serverless FrameworkでAPI Gatewayを利用した際に
死活監視やなんらかの目的で
内部的にAPIを呼び出したい場合があるかと思います。

ただ、デプロイされたあとにURLを確認し
Lambdaの環境変数に・・・などはちょっと面倒くさいので
serverless.yml内だけで設定できないかやってみました。

### customにてURLを生成

本題部分です、API Gatewayで生成されるURLを文字連結します。
これでAPI GatewayのURLが生成できます。

“` yml
custom:
region: ap-northeast-1
stage: ${opt:stage,”default”}
my_url:
{
“Fn::Join”:
[
“”,
[
“https://”,
{ “Ref”: “ApiGatewayRestApi” },
“.execute-api.

元記事を表示

JenkinsからAWS Lambdaをデプロイする

# Jenkinsとは
初心者ですが、私の解釈としては自由度の高いCI/CDツールという位置付けです。
実行したい内容をJobという形で登録しておくことで自動で実行してくれます。
今回初めて触ってみたので、忘れないうちにメモしておきます。

#手順 
– コンソールから「新規ジョブ作成」を選択します。

![スクリーンショット 2019-11-22 11.41.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/98c74577-8b2c-b2ab-4737-49fcc347c22b.png)

– そのジョブの中に入り「新規アイテム作成」を選択。
基本的に一番上のフリースタイルでいいと思います。
![スクリーンショット 2019-11-22 11.47.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/3afb99f4-5792-f3e4-6973-4354258ac4e4.png)

元記事を表示

LambdaからLightsail上のコンテナDB(MariaDB)へとアクセスする

初投稿の記事です。

私の環境ではEC2ではなくLightsailを使ってます。そして、その上にdocker-composeにてコンテナのDBを動かしています。この状況でLambdaからコンテナ上のDBへとアクセスする方法を探したのですが、ググった感じ日本語の記事など見つからず。
結論としてはVPCにLambdaを入れ、LightsailもVPC Peeringすれば普通にアクセスできました。分かってる人にしてみると、当たり前なのでわざわざ記事するほどでも無いんでしょうね…。

###### 誰向け?
私と同じくAWSを始めたばかりや、初心者向けの内容だと思います。

###### 前提
+ Lightsail上にdocker-composeによるDB(MaridaDB)がすでに立っている環境。
+ 恐らくこんな構成だと思います。
![aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537256/1c1d45d2-d921-6459-6f31-7fdc1570d571.png)

以下の手順で実施

元記事を表示

IAMの既存ポリシーの名前に惑わされない

最近こういう事件がありました。

> AWS上のDynamoDBに対する権限を本来持っていないはずのエンジニアが、ローカルでDynamoDB localを試そうとして色々作業していたら、AWS上にテーブルを作成していた。やばい。

最初は「マジか。」となったんですが、幸いDynamoDBのテーブルをまったく作ったことのないAWSアカウント上だったので大事にいたりませんでした。

めでたしめでたし?

となるはずはもちろんないので、原因を探りました。

# IAMをよく見てみた

結論から言うと、`AWSLambdaFullAccess` という既存のポリシーをアタッチしたIAMユーザーのAccess Key IDとSecret Access Keyを設定したSDKでテーブルの作成を実行していたことが原因でした。

このポリシーの概要を確認すると

“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”:

元記事を表示

AWS Lambda を CloudFormation でサクッと作って awscli から実行する

# 概要

## 要旨
CloudFormation で Lambda を作って、Lambda を awsali から実行(invoke)する。

## やりたいこと
– Lambda Function を CloudFormation で作成、削除したい
– CloudFormation のテンプレートに関数を埋め込んで一つのファイルだけで管理したい
– pros: テンプレートに埋め込むとs3へアップロードしておく等の事前準備が不要になる
– cons: 標準モジュール以外を使用する場合はテンプレート埋め込みの方法は使えない
– awscli から lambda を実行できれば十分
– HTTP公開は認証やDDoS対策が面倒
– HTTP公開やイベント登録はしない
– HTTP公開はAPIの設定が必要になる

# 作業

## 前提
– awscliがインストールされており、認証もされている
– 以下のロールを持っている(もっと削れるかも)
– AWSLambdaBasicExecutionRole
– AWSLamb

元記事を表示

LambdaでElasticsearch Serviceの手動スナップショットを取得する仕組みをCFnで一括デプロイ

Amazon Elasticsearch Service (AES) で手動スナップショット取得の仕組みをCloudformationで一気にデプロイします。かつCurator使って古いスナップショットは自動的に削除する設定になっています。スナップショット取るだけで意外に大変です。

PythonスクリプトはこちらのAWSのドキュメントにあるものベースにしてます。

https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/curator.html

# やりたいこと
これを作ります。スクリプトはAWSのドキュメントにあるものを、ほぼそのまま使っているので、読めばすぐわかるレベルだと思います。コメントも残ってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/fd25ed74-896a-60f6-77fb-fc1ebf2bd53f.png)

# 手動スナップショ

元記事を表示

[AWS]インスタンス起動時にIPアドレスを自動でRoute53に登録する

# Elastic IP をケチりたい

たまにしか起動しないインスタンスに Elastic IP をアタッチするのはもったいない。といって、起動するたびにIPアドレスが変わるとホスト名でアクセスできなくて面倒くさい。

……というテーマで以前、[記事](https://qiita.com/keys/items/264a64c2841875d51cdd)を書きました。

今回はそれを推し進めて CloudWatch Event でインスタンスの起動を監視して、起動したら自動でIPアドレスを Route53 のAレコードに登録する、という Lambda を書きました。これでEIP(と無駄な支出)とはおさらばだ!

あと、余計かもしれないけどインスタンスを停止したときにレコードを削除するようにしてみました。意味あるかなぁ。

## 必要な権限

登録したい Route 53 のホストゾーンのレコード一覧を取得・変更するための権限:

– `route53:ChangeResourceRecordSets`
– `route53:ListResourceRecordSets`

インスタンス

元記事を表示

データをアップロードするとファイル名チェックをするAWS Lambda

# はじめに

* AWS S3にアップロードされたデータが、ファイル命名規則に沿っているかチェックします。
* チェック結果はSlackに通知
* 規則に沿っている場合、後工程に繋げることもできます(ex.機械学習モデルのの推論呼び出し)。
* 今回はその前段階です。
* AWS上での機械学習モデルの学習や、推論は以下の記事を参照ください。
* [Amazon SageMakerで猫と犬の検出と種類の特定をしてみた](https://dev.classmethod.jp/machine-learning/sagemaker-cat-dog-detection/)

# 前提

* AWSのアカウントは作成済み
* SlackのWorkspaceに所属している

# 手順

* Step.1 Slackの設定
* Step.2 データをアップロードするS3の作成
* Step.3 Lambda関数の作成
* Step.4 Lambda関数の修正

# Step.1 : Slackの設定

* 参考:[AWS Lambdaで作るSlack bo

元記事を表示

[awscli] nodejs8.10を使用しているlambdaを洗い出すワンライナー

# モチベーション

`AWS Lambda: Node.js 8.10 is EOL, please migrate your functions to a newer runtime version.` らしいので、nodejs8.10を使ってるlambda関数を洗い出したかった

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html
https://qiita.com/kapioz/items/1e0fb80afc7d98bbde52

# ワンライナー

`aws lambda list-functions | jq -r (‘.Functions’|.[]|'{ FunctionName: .FunctionName, Runtime: .Runtime}’) | jq -r ‘select(.Runtime == “nodejs8.10”)’`

こっちだと関数名のみ

`aws lambda list-functions | jq -r (‘.Functions’|

元記事を表示

IoTポストで投函されたら電話が鳴るようにしてみた

この投稿は、[こちらの記事(IoTポストの紹介)](https://qiita.com/roi-dev/private/5d4acc399e1f78002d1a) の続きです。

# IoTスマートポストに投函されたら電話を鳴らしてみる
前回のIoTポストでは投函されたらメールが届いていましたが、ここではAWSの機能を利用して、電話が鳴るようにしてみました。

AWSのサーバレス「Lambda」経由で「Amazon Connect」という電話コールセンターの仕組みを一部利用して、投函物を検知したら、所定の電話番号に通話が開始されて、投函物が来た旨のお知らせができるようになりました。

具体的には下記の図のように、マイコンボードから Amazon API Gateway から「Lambda」上のPythonの関数を起動し、Amazon Connectに接続して、指定の電話番号に通話する機能を構築しています。Amazon Connectを利用するメリットとしては、電話が鳴って出ると、合成音声によって、LambdaのPython上の文字列をそのまま日本語で読み上げられるというのが実現できるこ

元記事を表示

AWS CloudFormationをちょっとだけ理解した

やっとなんとなく意味がわかってきたCloudFormation。AWSのインスタンスやいろんな設定を簡単にデプロイできるツール、みたいな説明はいっぱい見かけるけど、覚えないといけない仕組みが増えただけでaws cliでできることとなにが違うのかがいままでよくわからなかったのです。

理解した内容は、

1. CloudFormationは冪等性を担保しやすいこと
2. 複数のリソースを一括で管理できること

詳細

1. インフラ構築をaws cliでがんばってスクリプト化しても「Infrastructure as Code」は実現できるかもしれないが、aws cliではcreateなんちゃら系をするコマンドは2回目以降にエラーになっちゃったりして、きちんと動くようにするにはいろいろ大変。CloudFormationであれば記述をシンプルにできるし、何度実行しても最新の記述に更新できる冪等性を実現できます。

2. EC2とRDSの組み合わせなど複数のリソースからなる一連の仕組みを一発で作れるだけでなく、削除も簡単です。EC2やRDSなどのリソースをCloudFormationのスタッ

元記事を表示

Nuxt.js(SSR)をLambdaで配信する【個人開発】

## 概要
Qiitaのストックを整理するためのサービス「Mindexer(ミンデクサー)」のフロントエンドを
Vue.jsで構築したSPAのアプリケーションからNuxt.jsでSSRを行うように再構築しました。

LambdaでExpressサーバーを動かし、その上でNuxt.jsを動かしています。
この記事では、今回の開発で得られたNuxt.jsに関するTipsやインフラ構成などについて解説していきたいと思います。

なお、Vue.jsからの移行に関する解説は含みません。

## サービスについて
「Mindexer(ミンデクサー)」については、こちらの記事で解説しています。
バックエンドで利用している技術についても解説していますので、合わせてご覧いただけると嬉しいです。

[:link: AWS + Laravel + Vue.js でQiitaのストックを整理するサービスを作りました!【個人開発】](https://qiita.com/kobayashi-m42/items/14e137727ffda3bf79e7)
[:link: 個人開発のインフラをEC2からFargate

元記事を表示

素人がAWSに手を出してみた様子-2

どうもはじめまして。

前回初めてAWSのEC2インスタンス作成してみました。

前回:【素人がAWSに手を出してみた様子-1】
https://qiita.com/entakar/items/4ee87782e02e34eac14d

EC2でインスタンス立ち上げただけなのですがね

## nginxの設定を終え
EC2でなんとかnginxの設定を完了させindex.htmlの表示が完成
ただそれだとEC2じゃなくてS3で十分じゃん!!!

## 何をするのか
そもそもAWSに手を出したのはlinebotをphpで作成した環境が
さくらスタンダードの環境があったので試してみた。
から始まっています。
その時に、そうかこれはAWSを構築してBOT用のPHPをAWSにおいてみれば
AWS構築の勉強にもなるじゃないか!

でした

## そして・・・課金の壁
linebotで使用するmessageAPIそのフックとなるのが
【Webhook URL】これがhttpsでないと設定不可(2019年11月時点)
もしかしたら前はhttpでも大丈夫だったかもしれないけれど、
近年https通信が

元記事を表示

FunctionsでGoogle Cloud Storageにデータをアップロードするならupload()ではなくsave()がお勧め

#概要

Google Cloud Storageの入門して間もない初心者が対象なので、タイトルで意味の分かる方はスルーでOKです。

各ベンダーの提供するFunctionsはサーバーレスであることから、ファイルへの入出力を推奨していない。
永続的なものはStorageに保存し、一時的なものはメモリー(基本は変数)を使用することになる。
しかしGoogle Cloud Storageのドキュメントを見ると、ファイルを前提としたupload()が使用されています。
Functionsから使用するサンプルとしては適していないため、Functions用に残しておきます。

私はNode.jsの信者なので、その他の言語はドキュメントで該当するメソッドをお調べください:sweat_smile:

#読者対象

– Google Cloud Functionsの初心者
– Google Cloud Storageの初心者

#解説

##まずは公式ドキュメントのおさらい

遷移先でコードが表示されない場合は、「コードサンプル」=>「NODE.JS」の順でクリックしてください。

アップロード
ht

元記事を表示

Deeplearning on AWS をやってみたの巻き

#目的
Deep Learning を学ぶ

#目標
よくある犬の学習をやってみる
学習させてみる
Deep Learning 周辺ツールを使ってみる

#結果
sage maker を使うと学習効率がいいね!

機械学習を学びたい人にとって、環境設定やAPI 連携などの”機械学習を使うための環境構築” は、障壁になりそう。
最初は、AWS トレーニング等を通じて、1回教えてもらうと学びたいところへジャンプしやすそう。

周辺ツールとして、
コンテナ やLambda などのオンプレミスサーバ構築と比べ、高速化を実感しながら、機械学習を体験できた。
今までより、OS起動、OS設定でつまずかない分、気楽でした!

#できたこと
よくある画像認識のスコアリング。今回は、ビーグル犬を判定!
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184724/099572ca-b427-b46c-dd27-9294f4e4a0cf.png)

#やったこと
サンプル画像とサンプルコードで、コンテナ作った

元記事を表示

API Gateway + Lambda + DynamoDBでサーバーレス環境を構築する

# API Gateway + Lambda + DynamoDB = Serverless

AWSでサーバーレスを構築するアーキテクチャを考えた時に、もっとも基本的でわかりやすい構成は、API Gateway + Lambda + DynamoDB(ないしはS3)の組み合わせだと思います。

## このエントリーで触れること
– Lambda関数の作り方
– API Gatewayでのリソースの作り方
– API GatewayとLambda関数の紐づけ方
– Lambda関数でのDynamoDBのいじり方

AWS SAMには触れないです。

## Lambdaで関数を作る

Lambdaで関数を作ってデプロイするのは非常に簡単な作業です。

ランタイムはnode.jsを使います。

関数を作成する方法としては、
1. AWSコンソール上で関数を作成する
2. ローカルで関数を作成してzip化し、Lambdaにアップロードする
3. ローカルで関数を作成してzip化し、S3にアップロードした後に、Lambdaからそれを呼ぶ
4. ローカルで関数を作成してzip化し、cliでデプロ

元記事を表示

OTHERカテゴリの最新記事