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

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

EC2のプロセス監視と自動再起動

EC2で稼働しているプロセスがダウンした時に、自動起動する仕組みを作っていきたいと思います
今回は、dockerプロセスがダウンした場合を例とします

# 前提条件
* Amazon Linux2
* amazon-ssm-agentインストール済み
* cloudwatch-agentインストール済み
* dockerインストール済み
* EC2のIAMロールにAmazonSSMFullAccessのポリシーがアタッチ済み

# プロセスの監視を設定します

## Systems Manager パラメータストアの設定
CloudWatchのメトリクスに入れるための定義を作成します
AWSマネジメントコンソールからSystem Manager、パラメータストアをたどり、「パラメータを作成」を実行します
タイプはString、データ型はtextで、以下を値に設定します

“`json:値
{
“metrics”: {
“append_dimensions”: {
“ImageId”: “${aws:ImageId}”,

元記事を表示

localstack + aws cdk でAWS S3をローカル環境に立ち上げてLambdaでアクセスするメモ

## 概要
[前回はローカルでデバッグ実行をできるようにした。](https://qiita.com/hibohiboo/items/fa76084a207e5a3d5955)
今回はS3をローカルで実行する。

[ソースコード](https://github.com/hibohiboo/develop/tree/2dca5633f60621882e853598463da20d547e07e8/tutorial/lesson/aws/typescript/projects/cdk_sample)

## 環境
* windows 10
* Docker version 20.10.5, build 55c4c88
* aws-cdk 1.95.1
* aws-cdk-local 1.65.4
* aws-cli/2.1.29 Python/3.8.8 Windows/10 exe/AMD64 prompt/off
* node v14.16.0

## ローカルでS3を動かす
### 検討: localstack
ローカルでS3を実行する方法は、[Minio](https://gith

元記事を表示

AWS CDKでAPIGateway+Lambdaを作る

cdkの入門として、シンプルにAPIGateway+Lambdaを作っていく流れを書きます

## はじめに
* Ubuntu 18.04.4 LTS (WSL利用)
* VSCode
* aws-cdk 1.94.1
* typescript

## AWS CDKをインストール
“`bash
$ npm install -g aws-cdk
$ cdk –version
“`

## AWS CDKのプロジェクト作成
“`bash
# プロジェクトディレクトリを作成
$ mkdir cdk-api-lambda

# 移動
$ cd cdk-api-lambda/

# プロジェクト作成
$ cdk init app –language=typescript
“`

## パッケージインストール
“`bash
$ npm install @aws-cdk/aws-lambda @aws-cdk/aws-apigateway
“`

## lambdaコードを格納するフォルダを作成
“`bash
$ mkdir lib/lambda/
“`
## lambdaコー

元記事を表示

TerraformでHTTPS静的サイト(Route53 + ACM + S3 + CloudFront + Lambda@EdgeによるBasic認証)を作ってみた

# 概要
Terraformでvueなどで作られた静的サイトを独自ドメインでHTTPS配信するためのインフラを構築していきます。
サンプルソースをリポジトリにまとめてみたのでこれを参考に紹介していきます。

## サンプルリポジトリ
サンプルとなるソースをリポジトリにまとめてみたのでこれを参考に紹介していきます。

https://github.com/grasswake/terraform_aws_static_site

※本記事の内容と基本的に一緒ですが、一気に作るのでなくRoute53とACM、CloudFrontの3ディレクトリに分けてます。
その為remote stateを使用した構成になっています。因みにaccess_keyなどの扱いが雑ですので使ってみる場合は使いやすい形に直してください。

# 前提
– 独自ドメインでのアクセスを行うために、お名前.comなどでドメインを購入してください。この記事ではお名前.comで`example.com`というドメインを購入していると想定でいます
– アクセスURLは`example.com`になります。`www.example.

元記事を表示

SSM・CloudWatch Agentの自動更新とエラー発生時のメール配信

クマ松です。

皆さん、AWS Systems Managerはお使いでしょうか。
AWS Systems ManagerはAWS環境のEC2やオンプレのサーバを効率よく運用することが出来るサービスです。
サーバ構成のインベントリをコンソールから確認したり、決められた時間にパッチを適用したり等、よくある定型作業の自動化を実現してくれます。

今回はこのSystems Managerの機能の1つである「State Manager」を用いて、EC2にインストールしたSystems Manager AgentとCloudWatch Agentを定期的にアップデートしてくれる構成を作ろうと思います。

![アラートメール配信アーキテクト.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307047/78dd37f5-0a5d-52cf-22d3-09e12469605f.jpeg)

#前提知識
##State Managerについて
###Black Beltの説明
AWSのBlack Beltの文言を借りる

元記事を表示

AWS Lambdaと開発環境(Eclipse)とでRDSの日時の値が異なる

# 背景

AWS Lambda処理内で、RDSのデータを読み書きする機能を開発していました。
プログラム上で日時を生成してテーブルに格納するのですが、実行環境(ローカル or AWS Lambda)によって日時の値が異なってしまっていました。

# 環境・前提

– Java8
– Eclipse(2020-12 M3)
– RDS(MySQL 8.0)
– AWS Lambda

ローカルで開発中は Eclipse で JUnit を実行し、ローカルから RDS の読み書きを行います。
AWS Lambda へプログラムのデプロイ後は、AWS Lambda を実行し、 RDS の読み書きを行います。

# 検証

## ① ローカル(Eclipse)から、RDSへ

| プログラム上の日時(UTC)[^1] | RDS上の日時 |
| —————————– | —————– |
| 2021/3/25 12:00:00 | 2021/3/25 3:00:00 |

[^1]: `Times

元記事を表示

AWS Lambdaのマルチアカウントデプロイ

クマ松です。

「テスト用/本番用とで環境毎にAWSアカウントを分けてはいるけれども、利用しているLambdaは同じ」
という場合、テストしたLambdaをコピペして本番環境にデプロイをしたくはないですよね。

ですので、**テスト環境のCodeCommitへのマージイベント**をトリガーに**本番環境にLambdaをデプロイする**構成のCodePipelineを作りました。
ほぼ全てCloudFormationで実現していますので、お手元のAWSアカウントで試してみてください。

## 想定する環境

– テスト環境用AWSアカウントが1つ
– 本番環境用AWSアカウントが複数
– テスト環境と本番環境とで同じLambdaを使っている

## 実現したいこと
– テスト環境のLambdaを本番環境にもデプロイしたい
– テスト環境のマージイベントをトリガーに、本番環境のCodePipelineを起動したい

## ブログ
設計方針やCloudFormationのテンプレートはブログに掲載しています。
[Lambdaのマルチアカウントデプロイ 設計編](https://cloud

元記事を表示

AWS CDK + SAMでローカル実行しているLambdaにattachしてデバッグ実行したメモ

## 概要
[前回はローカルでMongoを動かした。](https://qiita.com/hibohiboo/items/15db5256624c7a8e8b8c)
今回はローカルで実行しているlambdaにデバッグ実行を試してみる。
[ソースコード](https://github.com/hibohiboo/develop/tree/0466b37b367ea738564395fb82ac6a8dc1d31547/tutorial/lesson/aws/typescript/projects/cdk_sample)

## 環境
* Windows 10
* aws-cdk 1.95.1
* SAM CLI. 1.20.0
* VSCode 1.54.3

## やること
* attachしてデバッグ実行
* launch.jsonの自動生成

## フォルダ階層

“`yaml
– .vscode
– launch.json # VSCodeのデバッガ設定
– cdk # cdk用の設定フォルダ
– lib
– s

元記事を表示

Lambda関数を作成する開発者に必要な権限を考えてみた

## はじめに
日頃Lambda関数の構築において、都度インフラ管理者に依頼して、IAMポリシーとIAMロールを作成してもらうようにしていますが、後から必要な権限が出てきたりして、開発がなかなか進まないこともありますよね。
Lambda関数にアタッチするIAMポリシーとIAMロールを自分で作って試せると嬉しいなと思い、Lambda関数を構築する開発者に必要なIAM周りのIAMポリシーについて考えてみました。

**先にお伝えすると、下記のポリシーだと穴があるので、ご使用はお控えください。**
別のアイデア大歓迎です!コメントください!

## 前提条件
AWSの環境は次の通りとします。

### Assume Roleを使う
Assume Roleを使っている場合、ユーザーに権限をつける際は下記のようなフローになります。

**① IAMポリシーの作成**
必要な権限をつけたIAMポリシーを作成する。

**② IAMロールの作成**
①で作成したポリシーをAssume用のロールにアタッチする。

**③ IAMポリシーの作成**
②のIAMロールにAssumeできる権限をつけたIA

元記事を表示

API Gateway + Lambda Authorizer + Lambdaプロキシ統合 + AWS SAM CLIを組み合わせたときのCORS設定

表題の通りです。苦しめられたので解決方法を共有します。

ポイントとしては、

* プリフライト用にOPTIONSメソッドを受け入れる必要がある (Access-Control系のヘッダーも返す)
* AWS::Serverless::ApiのCorsプロパティを定義すれば、自動的にOPTIONSメソッドが作成され設定したヘッダーが返されるようになる
* [CorsConfiguration \- AWS Serverless Application Model](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-property-api-corsconfiguration.html)
* LambdaでAccess-Control系のヘッダーを返す
* 普通にレスポンスにヘッダーを含めればOK
* ↓「Lambda または HTTP プロキシ統合への CORS のサポートを有効にする」の項目を参照
* [REST AP

元記事を表示

Lambda関数から別アカウントのDynamoDBに接続

## 記事を書いた経緯
– 初めてAWSを触った!記録取っておこう!
– Lamdba関数から他アカウントのDynamoDBにアクセスを経験!個人的に詰まったところもあったので、同じミスはしないように記録として残そう!
– ナレッジ化して共有できればいいなー

って感じです。初投稿なので、「ん?」って思うところがあるかもしれないですが、参考になれば幸いです。

## 環境
– Typescript
– DynamoDB
– Lambda

## まず驚いたこと
Lamdba関数からただ単に`aws-sdk`の`DynamoDB Client`を作ってアクセスをしたら`ResourceNotFoundException`になった。。。
なぜだ。。。

### NGコード
“`typescript
import {DynamoDB} from “aws-sdk”

const client = new DynamoDB.DocumentClient()
const param = {
TableName: “sample”,
Key: {
‘id’: 1
},
}
c

元記事を表示

Lambda + Goでネストされたアプリケーションを構築

![1280px-Go_Logo_Aqua.svg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/2b8f3e0b-9e8b-1355-2e71-ffd3570f9337.png)

LambdaでGoを使ったAPIを作成したときの話
あるサービスでGoを採用し、Lambda上でapiを作成することになった、最初は小規模の認識で開発を行っていたが、仕様がどんどん膨らみ気づいた時にはエンドポイントが150を超え、そしてやってきたリソース制限

“`
Template format error: Number of resources, 206, is greater than maximum allowed, 200
“`

ネストさせることで回避できることを知り、ネストするも“`sam build“`できず、結局ネストされた各アプリケションを個別にビルドし、マージするシェルを書いて運用していた。
苦労した話を書こうと思い調べていると、いつの間にかネストされたアプリケーションのビルド

元記事を表示

AWS Lambda (Python 3.8)からWrikeのAPIを叩いてみる

#この記事の概要
AWS API Gatewayでリクエスト受けてLambdaを実行するという記事は以外にあるのですが、逆にLambdaから他の外部APIを叩くのにサンプルがほしかったのでLabmda & Python 3.8(&標準ライブラリ)からWrikeのAPIを叩いてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671/90aaf978-d6da-eee8-9124-ee2025c738d6.png)
bearerトークンが使えるAPIが公開されているWeb serviceなら他のサービスでも流用できると思います。

#本記事の投稿者
Python&Lambda初心者(両方とも初めて書いてみた)のでとりあえず動けばいいというレベルです。
#大まかな手順
Wrikeで永続トークンを生成し、LabmdaでPythonの関数つくって実行。

#Wrike公式APIリファレンス(英語)
https://developers.wrike.com/

#永続アクセストークンの取

元記事を表示

AWS ChaliceでEC2とRDSを自動で起動停止するLambdaを作成

任意のタグが付いたEC2、RDSインスタンスをスケジュールで起動停止するためのLambdaです。

[Chalice](https://github.com/aws/chalice)で作ってあるのでハンドラーを変えればAPIエンドポイントから実行したりもできます。

以下実装です。

「AutoStartStop」タグが付けられたインスタンスを対象にして、平日の10時に起動、平日の19時に停止します。

“`python:app.py
from chalice import Chalice
import logging
import os
import boto3

app = Chalice(app_name=’schedule-startstop’)
app.log.setLevel(logging.DEBUG)

env_dryrun = False if os.environ[‘DRYRUN’].upper() == ‘FALSE’ else True

def change_instances_state(event, state=’Start’, dryrun=True

元記事を表示

AWSから行うセキュア動画配信 ~MediaConvertで動画変換~

## はじめに

個人情報を含む動画をAWSからセキュアな環境で配信してみる、の中編の投稿になります。

* [前編](https://qiita.com/r-mizuno/items/79ec52ca77ac0bb1b503): 配信するための動画を、AWS Key Management System (KMS) から生成した共通鍵で暗号化し、S3へ格納する
* 中編: **AWS Elemental MediaConvert を利用して、HLS+AES暗号化の形へ動画を変換する(今回)**
* 後編: Cloudfrontの署名付きCookieを利用して、アクセス可能なユーザを制限する

前回は、KMSを使用してS3へ格納する動画を暗号化(CSE)する方法をご紹介しました。
今回は、S3へ保存された動画をMediaConvertを使用して、HLS+AESの形へ動画を変換して配信用のバケットへ保存していきます。

## 構築予定の環境

構築予定のシステム構成図は以下のようになります。
本記事では、赤字となっている部分を解説します。

![image.png](https://qii

元記事を表示

Alexaスキル開発チュートリアル(AWS Lamda, node.js)

# Alexaスキル開発チュートリアル(AWS Lamda, node.js)
個人で開発した、Alexaスキル開発チュートリアルを記載します。

**今回は自分の目標設定をAlexaに記憶させて、次回起動時に目標期限を自動で算出して教えてくれるAlexaスキルを開発してみようと思います。**

### 完成イメージ

“`
◼︎ 初回起動時
(自分)アレクサ、目標リマインダーを開いて
(Alexa)こんにちは、目標リマインダーへようこそ。目標達成希望日時を教えてください。
(自分)2020年10月9日
(Alexa)ありがとうございます。目標達成日時は2020年10月9日ですね。

◼︎ 次回起動時
(自分)アレクサ、目標リマインダー
(Alexa)おかえりなさい、次の目標達成日時まで1年、残り12日です。目標達成に向けて本日も頑張りましょう
“`

### 前提知識
“`
1. AWS Lambdaについての最低限の知識
2. JavsaScriptについての最低限の知識
3. Alexa(スマートスピーカー)についての最低限の知識
“`

## STEP1 「ログイン」

元記事を表示

AWS LambdaでRESTでデータ取得してSplunkに送信してみる (Python編)

#はじめに

– [AWS LambdaでRESTでデータ取得してSplunkに送信してみる](https://qiita.com/symmr/items/c25fd31ebde1e8ebb095)ではBlueprintを使用してLambdaからSplunkへのHEC送信に成功しました。
– しかしBlueprintはNode.jsでした。Splunk管理者はPythonの方が得意だと思いますので(偏見)、Pythonでできないか調べました。
– PythonでSplunk HECに送信するClass([Splunk-Class-httpevent](https://github.com/georgestarcher/Splunk-Class-httpevent))がありましたので、今回はこちらを使って実現します。
– Splunk-Class-httpeventはレイヤーにしてLambda上のPythonから呼び出せるようにします。
– Splunkで毎日運勢を占えるようになりました。

#環境
– Lambdaからアクセス可能するためEC2などでグローバルIPを持つSplunk E

元記事を表示

【AWS IoT】IoT CoreのRuleでできること:アラート通知とシステムの疎結合化

#はじめに
今回はIoT Ruleでできることというテーマで、アラート通知とシステムの疎結合化の方法について書きました。具体的にはエッジデバイスからMQTT通信でIoT CoreにJSON形式のメッセージを定期的に送信する際、異常な値が検知された場合に誰かに通知したり、特定のサービスを止めたりする想定で、Ruleの解説をしていきます。
**※この記事内で紹介するコードは動作確認していないものも含まれるのでご了承ください。**

#共通部分-Ruleの作成
IoT Coreの画面から「ACT」→「ルール」→「作成」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/6d6be26d-15f8-640a-5ae5-c07aa85653cc.png)
**メッセージのフィルタリングにSQL構文が使えます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/

元記事を表示

Amplify×Lambda×SESでメール配信

## 概要
開発中のアプリにレポートを投稿した際にメール通知が必要ということでAWSのSESを利用した検証を行いました。
メール通知やメール配信を考えている方の少しでも参考になればと思います。

## 事前に

### アプリケーション
[Amplify SNS Wrokshop](https://amplify-sns.workshop.aws/ja/10_getting_started/00_what_you_build.html)の「[FOLLOW/TIMELINE機能の実装](https://amplify-sns.workshop.aws/ja/50_follow_timeline.html)」までを実装済みの方を前提としています。
しかし、SESの実装自体は簡単ですので、Amplify SNS Wrokshopをやっていない方でも実装できると思います。

### Email認証
SESの送信元は検証済みのEメールアドレスが必要となります。
検証済みのEメールアドレスがない方は[こちら](https://docs.aws.amazon.com/ja_jp/ses/latest

元記事を表示

LambdaとSNSでごみ収集日をメール通知

##はじめに
平日休みだと、日課のごみ出しを忘れてしまうことがあるので、前日に通知しておきたいと思いました。
せっかくなのでLambda(Python)とSNSを使ってメール通知したいと思います。

##今回構成するサービス
「毎日20時に翌日のごみ収集内容をEメール通知する」というサービスを作ってみようと思います。

大まかな流れは以下の流れで行います。
①SNSでTopicとサブスクリプションの作成
②Topicに対し、テストメッセージを送る
③IAMロールの作成
④Lamdaでテストコードの実行
⑤明日の曜日を判定するコードの作成
⑥SNSでメッセージの送信
⑦Lambda関数の定期的な実行

##SNSでTopicとサブスクリプションの作成
SNSのサービス画面でTopicを作成します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/991082/5ef4b46e-728b-5aa5-a531-389f2a4cc2e4.png)
画面上の指示に従い、以下のようにTopicを作成します。

元記事を表示

OTHERカテゴリの最新記事