- 1. Puppeteer on Lambda (Node.js 12.x) で日本語ページのキャプチャを取る方法 簡単
- 2. 【AWS】API Gateway + LambdaでAPIをつくる
- 3. メールでGitHubに新規issueを追加する (Amazon SES活用版)
- 4. 猫の画像が次々届くサーバーレスなシステム
- 5. Rustに入門する〜2日目 reqwestでGET通信をする〜
- 6. 複数のバックエンドのリソースをAmazon API Gatewayで統合する
- 7. Rustに入門する〜1日目 SAMを使ってAWS Lambda上で動作させる〜
- 8. 【AWS10分間チュートリアル】Hello, World!をサーバーレスで実行する(Lambda)
- 9. SSMパラメータストアから10件以上のデータを取得する
- 10. AWS SAMにハンズオンで入門してみた
- 11. AWS API Gateway+EC2でセキュアなREST APIを構築する
- 12. AWS Lambdaに外部モジュール(numpy,scipy,requests等)をデプロイする
- 13. 【備忘録】AWS Lambda関数でLambda関数を呼ぶ invoke
- 14. AWS Lambda関数でNode.js レイヤーを作る
- 15. 【AWS CDK】AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに自動通知する構成を速攻で作る
- 16. AWSのCICDの練習(CodePipeline/ECS/Lambda)
- 17. APIGatewayでWebSocketを利用した場合のOpen時の認証処理
- 18. DynamoDBとStepFunctionsで初めてサーバーレスバッチ処理をつくってみた
- 19. lambda で heic 形式の画像を扱うためにやったこと
- 20. Lambda関数をBlue/GreenデプロイメントするCodePipelineをCloudFormationで自動構築する
Puppeteer on Lambda (Node.js 12.x) で日本語ページのキャプチャを取る方法 簡単
## やりたいこと
Lambda上でPuppeteerを動かしてキャプチャを取るとき、日本語フォントを正しく表示させる。
(デフォルトではLambdaに日本語フォントが入っていないため、何もしないと日本語がすべて豆腐になってしまうのだ。)## 環境
* AWS Lambda
* Node.js 12.x
* ローカル
* Windows10
* Node.js v12.16.2
* npm 6.14.4## やり方(ざっくり)
* Lambda Layerに日本語フォントをzip化してアップロードする。
* Lambda関数にそのLayerを追加する。
* Lambda関数内でLayerのフォントファイルを参照できるようにindex.jsで`process.env[‘HOME’] = “/opt”;`を定義する。## やり方(詳細)
“`shell:ローカルのディレクトリ構成
puppeteer_sample
├─ modules # Layerに登録するnpmモジュール群
│ ├─ node_modules
│ └─ packa
【AWS】API Gateway + LambdaでAPIをつくる
## やりたいこと
サーバを使わずにAPIを作成したい。
EC2インスタンスからAPI Gatewayで作成したREST APIにリクエストを投げて返ってくるのを確認します。
## 手順
Amazon API GatewayとLambdaを使用して、REST APIを作成してみます。[1. Lambda関数を作成する](#1-lambda%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
[2. API GatewayでREST APIを作成する](#2-api-gateway%E3%81%A7rest-api%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
[
メールでGitHubに新規issueを追加する (Amazon SES活用版)
# はじめに
以前、IFTTTのEmailサービス[^iftttemail]をメールの受け口にしてAWS Lambda経由でGitHub API[^githubapi]を叩き、[メールでGitHubに新規issueを追加する](https://qiita.com/nikotan/items/ff516aa90eb87c5140e7)機能を作りました。自作サービスのバグや改善点に気づいたときに、メール一本でGitHubのissueを立てられる、というのは実はとても便利です。今後も継続的に使いそうなので、メールの受け口も含めてAWS上で動くよう作り直してみました。# 方針
メールの受け口として、Amazon SES (Simple Email Service)[^ses]を使います。自分で管理しているドメインのメール配送先をSESの受信用エンドポイントに向けることで、メールを、Amazon SES → Amazon S3 → AWS Lambdaとバケツリレー。メールの中身に応じてGitHub API[^githubapi]を叩きGitHubレポジトリにissueを追加するLambda
猫の画像が次々届くサーバーレスなシステム
# はじめに
コロナ禍ですっかり疲れ切っている方も多いと思いますが、そんな時こそ一服の清涼剤が必要…ということで、**Slackのチャンネルに猫の画像が定期的に届くサーバーレスなシステム**を作ってみました。
なお、今回は[The Cat API](https://thecatapi.com/)から猫の画像を拝借しています。
# 1. Cat APIのAPIキーの取得
* [The Cat API](https://thecatapi.com/)のページを開いて、`SIGNUP FOR FREE`と書かれたボタンを押します。
![cat_api_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/ada25a20-6ef3-63bc-0a93-5cfb0150f874.png)
* 遷移先のページで、メールアドレスを記入して`SIGNUP`を押してしばらく待つと、`Welcome to The Cat API!Welcome to The Cat API!`というタイトル
Rustに入門する〜2日目 reqwestでGET通信をする〜
# 初めに
1日目の続きです。
# 釈明
(釈明の日本語の使い方あってるのか)
本当はGoogleカレンダーからの情報取得までを予定していましたが、
方針があちこち飛びHTTP(S)リクエスト自体に以上に労力を使ったので表題の部分までになりました。こうなった背景としては以下の通りです。
– `google-calendar3のサンプルの依存パッケージのバージョンが割と古くてコピペ+αでどうにもならなかった
– 正直パッケージを古いのにしてやればこんなことにはならなかったから自分が悪い
– 一応頑張るだけがんばったけどこのままの方針でどうにかできる自信がなかった
– 利用するパッケージが`await/async`まみれだが別言語でも書く機会がなくふんわり概念止まりだったのでそこから学習が必要だった
– あんま関係ないけどRustの非同期処理自体がようやくちょっと前に安定したらしく情報の交錯がすごかった
– `openssl-sys`を`AWS Lambda`向けにコンパイルできなかった
– これについては回避できず今後解決していく必要があるの
複数のバックエンドのリソースをAmazon API Gatewayで統合する
# 前提
システム開発をしていると「A機能はLambdaで作るべきで、B機能はコンテナで作るべきで、でもそれぞれ実はURIは同じにしておく方がREST的にキレイになるんだよね」なことがある。…いや、あまりないか?ともあれ、そんな時にはnginxとかでプロキシを作って振り分けても良いのだけど、せっかくパブリッククラウドを使っているのだからマネージドサービス使ってみたいよね、と思ってやってみた。Spring BootなWebアプリの動いているコンテナと、Lambda関数がそれぞれあるような構成。
# Lambda関数
この記事のために作り直すのも面倒なので、以下の記事で作ったものを転用する。[Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する](https://qiita.com/neruneruo/items/8673af2a3ae0f8076627)
# Spring BootなWebアプリの動いているコンテナ
あまりこだわりもないので、適当なパラメータを受けてJSONを返すコンテナを作ってみる
Rustに入門する〜1日目 SAMを使ってAWS Lambda上で動作させる〜
# 初めに
今年の正月くらいにRustの公式の入門みたいなページを読んだはいいけど何も作らず今日まで来てしまったので、
いい加減何か作ろうと思ったらちょうどいい題材があったのでそれで入門しようという感じ。
家のサーバで動かしてもいいですが `AWS Lambda` がコスト的にも管理的にも楽なのでこれでやります。
アプリはあんま作らないので割と初心気味最終的に作るものですが、
このコロナのご時世で会社全体でリモートとなり、今まで雑にやってきたけどSlackのステータスはしっかり変更しようね!
…とはなったけどめんどくさいとか忘れてたとなるのでその辺りをいい感じにしてくれるものを作ろうと思います。# 方針
ステータスの方針についてはまだ決まってないのもあるのでとりあえずですが、
1日一回業務開始時間に実行させ、
今日が土日か自分の終日予定に休み系のワードがあればステータスを休暇に変え、なければステータスなしに変更するものを作ります。
もしくは業務終了時間に固定で業務終了に切り替えるもの。まず ` AWS Lambda` でRustで動かします。
# 公式のサンプル
【AWS10分間チュートリアル】Hello, World!をサーバーレスで実行する(Lambda)
# 概要
社内でAWSを使ったシステム設計を任される予定があり、AWSのサービスを勉強中です。
チュートリアルと画面が異なるため、記事にしています。以下もご覧いただけると幸いです。
[【AWS10分間チュートリアル】Docker コンテナのデプロイ](https://qiita.com/tyariponzu614/items/573231bf72115034eca2)
[【AWS10分間チュートリアル】ReactJSアプリをデプロイしてホストしてみた(CI/CD)](https://qiita.com/tyariponzu614/items/0b3b9c4c47bf4542d308)
[【AWS10分間チュートリアル】Lightsail でWordPressインスタンスにアクセスする](https://qiita.com/tyariponzu614/items/c1fb2cee1ace2d5f25b2)# 教材
10分間チュートリアル
https://aws.amazon.com/jp/getting-started/tutorials/「Hello, World!」をサー
SSMパラメータストアから10件以上のデータを取得する
SSMパラメータストアから複数のパラメータを一括で取得したい!というときには`get_parameters`や`get_parameters_by_path`を使うといい感じに取れる。
ただ、これ知らなかったが一度に10件までしか取得できないようで、それ以降取得するには返却されるトークンを使ってリトライしないといけないらしい。
SSMパラメータストアの`/HOGE/`以下のパスに11件のパラメータを作っておきlambda(python3.8)で実験。
“`python:lambda
import json
import boto3ssm = boto3.client(“ssm”)
def lambda_handler(event, context):
params = dict()
responseSSM = ssm.get_parameters_by_path(
Path = “/HOGE”,
WithDecryption = False
)
for param in responseSSM[“Parame
AWS SAMにハンズオンで入門してみた
#はじめに
4月22日に行われたAWS主催の「さぁ!サーバーレスを始めよう!サーバーレスハンズオンもくもく会」に参加し、その際に行ったハンズオン「[サーバーレス環境 構築自動化 編](go.aws/2vuWHuy)」の備忘録となります。#目的
**AWSは触らないと忘れる!だから触る!!**#ハンズオンの内容
>AWS Hands-on for Beginners – Serverless #2 では、前回の Serverless #1 で構築した翻訳 Web API を AWS Serverless Application Model (AWS SAM) を用いてテンプレートから構築します。前回のハンズオンでは全ての工程を手作業で(マネージメントコンソール上で)構築していきました。今回のハンズオンではこの構築作業をテンプレート化し、作成したテンプレートから AWS リソースを構築していきます。テンプレート化することで、そのテンプレートをバージョン管理できるようになる、チーム内でレビューがしやすくなる、といった利点があり、プロダクト開発をより効率的に進めることができます。す
AWS API Gateway+EC2でセキュアなREST APIを構築する
# 背景
「AWSを使ってAPIを構築したい」という要望は山程あると思います。
その場合、API GatewayとLambdaを用いてサーバレスに構築することがほとんどです。
しかし、Lambdaにはメモリ・実行時間の制限があったり、Lambdaベースでコーディングしなければならなかったりといった不自由な点も存在します。
もしかしたらこれらの条件が理由でLambdaではなくEC2上にサーバを構築したいということがあるかもしれません。AWSに不慣れな場合、この方が手っ取り早い場合もあります。そこで、今回はAPI Gatewayを通してEC2内に立てた任意のポートにリクエストを送る手順をご紹介します。
# 設計
API Gateway+EC2といいましたが、間にLambdaを噛ませています。
LambdaからこのEC2サーバにHTTP経由でリクエストを送信します。
通常、Lambdaはネットワーク接続不可能に設定されていますが、private subnet内に設置することによって同VPC内へのアクセスを実現しています。![Screen Shot 2020-04-22 at 1
AWS Lambdaに外部モジュール(numpy,scipy,requests等)をデプロイする
AWS Lambda(以下、Lambda)に外部モジュールをデプロイする方法を見ていきたいと思います。ここではPythonを例に見ていきます。
実行順序
1. Amazon Linux 2(Lambdaの実行環境)を準備する
2. ソースファイルとともにLambdaにデプロイ
2. Lambda Layerを使う方法*2はどちらを選んでも構いません。
## 1. Amazon Linux 2(Lambdaの実行環境)を準備する
requestsモジュール等、内部でC言語などを使わず、Pure Pythonで書かれたモジュールの場合、このステップは不要です。
***しかし、numpyやscipyといった、C言語に依存するモジュールの場合、Lambdaの実行環境と同じ環境で開発するのが開発しやすくなります。 windowsやMacでインストールしたnumpyをzipで固めてデプロイしてもエラーとなります。***ここでは、Amazon Linux 2の環境として、公に公開されているDockerイメージ、***lambci/lambda:build-python3.7*** を使い
【備忘録】AWS Lambda関数でLambda関数を呼ぶ invoke
###Lambda関数から別のLambhda関数を呼びに行きたい時ってありますよね!
そんな時に使える方法を備忘録として残します。[公式ドキュメント該当ページ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html)
呼び出す側のLambda関数 main
“`index.js
const AWS = require(‘aws-sdk’)
const lambda = new AWS.Lambda()let params = {
FunctionName: `invoked`,
InvocationType: ‘Event’,
Payload: JSON.stringify({
id: “xxxxxxxxxx”,
message: “xxxx”
})
}
con
AWS Lambda関数でNode.js レイヤーを作る
#対象者
AWSでLamdbaを使っている人/どんなことができるのか調べている人
LINEBotをサーバーレスで作りたい人
Lambdaのレイヤーという機能を知らない人/興味ある人
#下準備
とりあえずデスクトップに移動
`$ cd Desktop`
ディレクトリ作る
`$ mkdir nodejs`
nodejsディレクトリに移動
`$ cd nodejs`
初期化
`$ npm init -y `
レイヤーにしたいパッケージをインストール
`$ npm i xxxxx`
ex)LINEBotのSDKをインストールする場合
`$ npm i @line/bot-sdk`
nodejsディレクトリ自体をzipファイルに圧縮して下準備完了#AWSコンソール
ログイン→Lambda→レイヤー→レイヤーの作成
【AWS CDK】AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに自動通知する構成を速攻で作るAWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに通知したいことがあるかと思います。
今回はその構成をCDKで作成してみました。## 環境
CDK CLI: 1.32.0
ローカルのNode: 11.15.0## 構成
今回は、`trigger-chat-cdk`というLambda関数を監視対象とし、「1分間に2回以上、関数が呼び出されたらエラーを挙げる」という条件を設定します。
以下は手順になりますが、[このリポジトリ](https://github.com/nomi3/cdk-alarm-to-hungout-chat)をcloneすれば、手順の3,4は省略できるので、より速攻で
AWSのCICDの練習(CodePipeline/ECS/Lambda)
AWSでCICD、FargateのBlueGreenDeployの練習を行う。
# 使用サービス
– CodeCommit/Build/Deploy/Pipeline
– CloudWatch Events
– Fargate
– Lambda作業で使用する資材は以下となる。
“`shell
.
├── 01-codecommit-ecr.yaml
├── 02-codebuild-pipeline-events.yaml
├── 03-ecs-alb.yaml
├── 04-codebuild-pipeline-events-update.yaml
└── httpd-repo
├── appspec.yaml
├── buildspec.yml
├── Dockerfile
├── fargate-task.json
└── index.html
“`資材のGithubの[リンク](https://github.com/udtren/aws-cicd-pipeline-ecs-customlambda)
# 作業内容
##
APIGatewayでWebSocketを利用した場合のOpen時の認証処理
# はじめに
AWSのAPI GatewayがWebSocket対応しています。
この接続を認証したもののみでOpenするのにどうするか?の話です。
wscatなどでコマンドで叩かれると接続だけはできちゃったりするので、そのあたりをどう防止できるかというものです。
今回は別のシステムなりで認証後に発行されたIDがDynamoDBにあり、ブラウザ側へ送信されてるのを前提とします。
$connect時にそのIDがついてる時だけconnectionIdをDynamoDBに格納したい時にどのように出来るかの話となります。# $connect時のみGetパラメータが取れる
もう結論出てるんですが、API Gatewayで設定したものはブラウザ上でnew WebSocket()などでOpenした時に、URLについたGetパラメータがいつも通りにLambda側で取得できます。ブラウザ側
“`
const socket = new WebSocket(“wss://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod?id=xyz”)
DynamoDBとStepFunctionsで初めてサーバーレスバッチ処理をつくってみた
# AWSでサーバーレスなバッチ
2つのAWSアカウント間(VPC Peering済み)で、一方のデータベースからデータ加工してもう一方のデータベースへ、のようなバッチをつくります。![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86958/b7864d8e-aab0-eac5-7906-a253e09f7425.png)
勉強も兼ねてAWSのサービスを積極的に使っていこうということで、
まずは間に [DynamoDB](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Introduction.html) を挟み、分割した [Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html) function で処理する形にしました。![qiita2.png](https://qiita-image-stor
lambda で heic 形式の画像を扱うためにやったこと
## 背景
iphone のカメラで保存された画像はデフォで heic という形式になっており、web ブラウザは現状解釈してくれない。そのため、他のjpgなどの画像と同じように扱うためにはサーバ側で加工する必要がある。[^1] 今回は、サーバ側でどうにかする手段をやってみたので残しとこうと思う。
## 内容
### 結論
lambda に imagemagick を仕込んだ lambda layer を連携させて、imagemagick を叩けばok
### 実装方法
lambda の runtime は node v12
lambda の管理には serverless framework
lambda layer はこの[リポジトリ](https://github.com/serverlesspub/imagemagick-aws-lambda-2)のものを使う。ただ、 heic を扱うためのライブラリが入っていないので同リポジトリに上がっていたPRからビルド手段を持ってきました。imagemagick のビルドフラグで heic を追加したり、必要なモジュールである、
Lambda関数をBlue/GreenデプロイメントするCodePipelineをCloudFormationで自動構築する
# 前提条件
以下の記事で手動構築していたCodePipelineのCI/CDパイプラインをCloudFormationで自動構築してみる記事。なので、構成やアプリケーションの内容は読んで把握しておくことが望ましい。[Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する](https://qiita.com/neruneruo/items/8673af2a3ae0f8076627)
[ALBのバックエンドで動作するJava実装のLambda関数をBlue/GreenデプロイメントするCodePipelineを作る](https://qiita.com/neruneruo/items/73906cdc3c2aa699644f)最終的に目指すCI/CDパイプラインの構成イメージは以下。Lambda関数のフロントにALBがいる想定だが、このパイプラインでは触らない(厳密には、リスナーとターゲットグループは触る)ので割愛する。
![LambdaCFn.png](https://qiita-image-stor