- 1. Slackに共有されたファイルをサーバーレスでGoogle Driveにアップロードする仕組みを作るまで
- 2. API GatewayとStep Functionsを組み合わせた非同期APIが最強だった話
- 3. Lambda&Serverless Frameworkで、multipart/form-data形式でデータを受け取る
- 4. Lambda・Serverless Frameworkあれこれ(ざっくりとした概要やコマンド)
- 5. ECSからLambdaを実行するときに必要なIAMロール
- 6. 【AWS】APIGatewayにキャッシュを設定する際にハマったこと
- 7. AWS S3で公開している静的サイトにBasic認証をかける
- 8. brefphpを使って簡単にLaravelをサーバレス環境で動かす
- 9. フリートプロビジョニング前にフックするLambdaの作成例
- 10. Seleniumとheadless chromeをAWS lambdaに入れてみました。(Win10環境下の注意点等)
- 11. API実行ログをSlackに出力する
- 12. AWS Lambda LayersへZenpyをデプロイしてみる
- 13. lambda_handlerの引数eventの中身を知る方法
- 14. API Gateway 開発者に読んでほしい、意味がわかると便利な実行ログ
- 15. 【AWS Lambda】推しを広めるTwitterBotをほぼ無料で運用した
- 16. Apex UpでNode.js × expressをAWS Lambda, API Gatewayに速攻デプロイしてみる
- 17. AWS Chaliceの開発環境をdockerで構築し、超高速でサーバーレスアプリケーションをデプロイしてみた
- 18. 白いマスクから怪人マスクへ、AWSでサーバレスLINE写真処理アプリの開発記
- 19. AWSSAAに落ちた時の悔しさを書く
- 20. WebアプリへのLINEログイン実装で少しハマったところ
Slackに共有されたファイルをサーバーレスでGoogle Driveにアップロードする仕組みを作るまで
# はじめに
社内の要望を受け、Slackに共有されたファイルをGoogleドライブに簡単にアップロードできるSlackアプリを完全サーバーレスで開発した話です。
「要件を整頓する」「アーキテクチャを考える」「Lambdaを利用して開発する」など…
全てが初めてでしたので、どうか温かい目で読んでいただければと思います。#作ったもの
### **格納くん**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/65b4ac83-09ed-e4d2-3a0b-ac2351ef5e2a.png)
(弊社の画伯にアイコンを作成いただきました!)
格納くんは社内の資料管理用に作られたSlackアプリによるツールです。## 使い方
– ファイルが添付されたメッセージのメニューから起動します。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/0b27c75e-8bcf-7fd5-1
API GatewayとStep Functionsを組み合わせた非同期APIが最強だった話
最強というかカンタン?
サーバーレスの構成として一般的な
API Gateway&Lambdaですが**API Gatewayは29秒制限**、
**Lambdaは15分制限**があるわけですねLambdaの性能を目一杯使いつつ、
そのギャップを埋めるため
**なるべくシンプルな構成で非同期APIにしたい** ってこと
あると思います。そのときに必要なのは
– LambdaをキックするためのAPI
– キックしたLambdaが完了したか判断し、レスポンスを受け取るためのAPIだと思いますが、下記Step Functionsにはその**両方が備わっています**
# Step Functions
Step Functionsでは、
マイクロサービスの連携などワークフローを視覚的でイケメンな感じに
構成することができます。**公式例:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285581/8d8acfed-7f47-5a2d-589d-feb66a03f
Lambda&Serverless Frameworkで、multipart/form-data形式でデータを受け取る
## 前書き
最近業務でAWSのLambdaとServerless Frameworkを使うことが多いです。
業務の流れが早く、次から次へと新しいツールを触ってすべて忘れていきそうなので、個人的なまとめとして、記事を作成します。
言語はnode.js, TypeScriptを使用しています。## multipart/form-dataとは?
>multipart/form-dataは、前述の通り複数の種類のデータを一度に扱える形式で、主な利用シーンはHTMLフォームです。特にファイルアップロードでよく利用されます。
引用元:
[フロントエンド] multipart/form-dataを理解してみよう
https://www.yoheim.net/blog.php?q=20171201ボディはBoundaryという区切り文字で、ファイル送信時に指定したnameごとに区切られます。
“`
——WebKitFormBoundaryO5quBRiT4G7Vm3R7
Content-Disposition: form-data; name=”message”Hello
Lambda・Serverless Frameworkあれこれ(ざっくりとした概要やコマンド)
## 前書き
最近業務でAWSのLambdaとServerless Frameworkを使うことが多いです。
業務の流れが早く、次から次へと新しいツールを触ってすべて忘れていきそうなので、個人的なまとめとして、記事を作成します。
正確性よりも、概要というかざっくりとした全体像みたいなものを把握することを目的としています。
>Done is better than perfect## Lambdaとは?
「サーバーレス」という種類に属する「サーバー」です(え笑)。
公式(https://aws.amazon.com/jp/lambda/) には、
> AWS Lambda を使用することで、サーバーのプロビジョニングや管理をすることなく、コードを実行できます。料金は、コンピューティングに使用した時間に対してのみ発生します。と記載されています。
感覚で説明すると、「設定や管理が不要で、プログラムをLambdaの”関数”としてデプロイしておき、そのエンドポイント(URL)にアクセスする、もしくは、関数の実行条件(トリガー)を設定しておくと、プログラム(関数)を実行させることができる
ECSからLambdaを実行するときに必要なIAMロール
# やりたいこと
ECS TaskからLambdaを呼び出したい。ECSとそれに付与するIAMロールはCloudFormationで定義しているが、IAMロールが正しいところに対して設定できていないとエラーが発生する。
#### エラーの例
`message:Unable to locate credentials`# 環境
– 起動タイプ
– Fargate
– OS
– linux(alpine)# 書き方
詳細については後述“`sample.yml
AWSTemplateFormatVersion: 2010-09-09Resources:
TaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
– Effect: Allow
Principal:
Service:
【AWS】APIGatewayにキャッシュを設定する際にハマったこと
#はじめに
先日APIGatewayにキャッシュを設定しようとしてハマったので記事にしておきます。#キャッシュを無効化させたくない!
エンドポイントへのHTTPリクエストヘッダに**[Cache-Control: max-age=0]**が含まれていた場合も、APIGatewayの後ろに控えたLambdaを実行させたくない!**キャッシュがある場合は必ずキャッシュを受け取ってほしい**。#APIGateway設定
キャッシュの設定自体はキャッシュ有効化にチェックをつけ、キャパシティーやTTL等を自由に設定しておしまいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/7843e19e-48d7-2e63-3951-76ec4bdfa081.png)
キャッシュコントロールヘッダについての設定は「キーごとのキャッシュの無効化」にあたります。
画像の設定では「認可されたリクエストで無ければ、HTTPリクエストに**[Cache-Control: max-age=0]*
AWS S3で公開している静的サイトにBasic認証をかける
AWS S3で公開している静的サイトにBasic認証をかける方法です。
S3の他に、LambdaとCloudFrontの設定が必要になります。# S3バケットの作成
まずはBasic認証をかけたいS3のバケットを用意します。
パブリックアクセスの許可や、Static website hostingの設定は必要ありません。# CloudFrontの設定
Create distribution -> Web側のGet Startedを選択し、CloudFrontの設定に進みます。
![CloudFront Get Started](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/2eed0ac0-2f77-2f3b-99bb-7a2a9041a4d5.png)
`Origin Domain Name` にBasic認証をかけたいS3のバケットを指定します。
`Origin ID` は自動的に設定されます。
`Restrict Bucket Access` を `Yes` にします。
`Ori
brefphpを使って簡単にLaravelをサーバレス環境で動かす
# はじめに
ここではbrefについてと、実際の使い方や使ってみた所感などをまとめてみようと思います。
## [brefphp](https://bref.sh/) とは?
PHPアプリケーションをAWS Lambdaに簡単にデプロイするための [Composer](https://getcomposer.org/) パッケージです。
コマンド1つでサーバーからアプリケーションのデプロイまで行えます。# :information_source: 使い方
## Step :one: serverless のインストール
bref は serverless コマンドを使用してAWS環境にデプロイを行います。
以下のコマンドでインストールしましょう。npmの場合
“`
npm install -g serverless
“`yarnの場合
“`
yarn global add serverless
“`追加したら以下のコマンドでちゃんと実行できるか確認しましょう
“`
$ serverless –version
Framework Core: 2.
フリートプロビジョニング前にフックするLambdaの作成例
https://qiita.com/takmot/items/eda7c2f519581b40ec3f
前回記事の続きとして、フリートプロビジョニング前にフックするLambdaの作成例を記載します。## プロビジョニング許可/拒否判定方法
1. シリアルナンバーと、プロビジョニング許可/拒否を表す値を記載したCSVファイルをS3に格納
2. LambdaからこのCSVファイルを参照し、デバイスから通知されたシリアルナンバーからプロビジョニング許可/拒否判定以下CSVファイル例
“`
SerialNumber,Effect
1,Allow
2,Deny
3,Allow
“`## Lambda関数
### 変更前コード
“`python
import jsonprovision_response = {‘allowProvisioning’: False}
def isBlacklisted(serial_number):
#check serial against database of blacklisted serials
…def l
Seleniumとheadless chromeをAWS lambdaに入れてみました。(Win10環境下の注意点等)
Python でWeb Scraper を作る時に、対象ターゲットのがclient-side javascript で取得している際、単純にurlopenではほしい情報を取得できないことが多いです。そのため、SeleniumかAPI(もしあれば)で取得することが多いと思います。
一方で、定期的に、かつ経済的に何かを実行したい時には、on-demand のAWS lambdaとCloudEvent を使用するのが良いでしょう。
では、スタート
## 手順
### 環境構築
Windows環境下でAmazon LinuxをOSにしたAWS lambdaを使うには、**Ubuntu on Windows 10** かその他remote linux server の支援が必要です。今回はより経済的な方法として、Ubuntu on Windows 10 を選択。
具体的なインストール方法は以下参照すると良いでしょう。
[Windows 10でLinuxを使う](https://qiita.com/whim0321/items/093fd3bb2dd287a72fba)
次に、P
API実行ログをSlackに出力する
##はじめに
[前回の記事](https://qiita.com/ktsuchi/items/f99a7b5017306f4e6537)の続きです。前回は、WebページのボタンからAPIを実行させるところまでを実装しました。
今回は実行ログの出力について記載します。前回作成したAPIは限定された人しか実行できないようにしている訳ではなく、
Webページにアクセスできる人であれば誰でもボタンを押すことで実行できてしまいます。そのため、どのIPから、どのような端末で、いつ実行したのかが記録として残るように、
API実行ログを出力させる方法にしました。##構成図
赤枠で囲った部分が、今回のログをSlackに出力する構成です。
2つのLambdaを使って、API GatewayからCloudWatch Logsに出力されたログを整形してSNSに送り、
SNSに来たメッセージをSlackに送信してます。
(もっと効率的な方法があるかもしれませんが)![ScreenShot 2020-10-08 9.06.38.png](https://qiita-image-store
AWS Lambda LayersへZenpyをデプロイしてみる
[Zendesk API](https://develop.zendesk.com/hc/en-us/categories/360000003388)をPythonから簡単に呼び出せるようにするラッパー[Zenpy](http://docs.facetoe.com.au/zenpy.html#)をAWS Lambda Layerに入れてみます。
# なぜLambda Layerを使うのか?
AWS Lambdaへプログラムをデプロイする際に関連するライブラリ群も一緒に入れる必要があります。そのため、複雑なプログラムになるとデプロイパッケージが肥大化しがちでした。
ライブラリやカスタムランタイム、その他の依存関係をまとめたZIPパッケージです。– AWS公式ドキュメント: [AWS Lambda レイヤー](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html)
# この記事で行うこと
AWS Lambda Layerへ`Zenpy`ライブラリをデプロイする。# 事前準備
*
lambda_handlerの引数eventの中身を知る方法
何かのイベントにフックしてlambdaを実行する際、eventの中身がわからくて困ったとき用メモ
“`
import json
import urllib.request
def post_slack(message):
send_data = {
“text”: message,
}
send_text = json.dumps(send_data)
request = urllib.request.Request(
‘slackのwebhookURL’,
data = send_text.encode(‘utf-8’),
method = “POST”
)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode(‘utf-8’)def lambda_handler(event, context):
message =
API Gateway 開発者に読んでほしい、意味がわかると便利な実行ログ
API Gateway (REST API) では、開発やトラシューに役立つ実行ログ (Execution Logs) を出力することができます。
AWS サポートに問い合わせる際にも、この実行ログがあるとスムーズです。実行ログは、ステージから設定できます。
![スクリーンショット 2020-10-06 16.07.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651869/1b6b93fc-aef5-04d6-db91-f2dc16371b81.png)設定後、API Gateway にリクエストを投げると、CloudWatch Logs に出力されます。
ロググループ名は、API-Gateway-Execution-Logs_\/\<ステージ名> です。
![スクリーンショット 2020-10-07 17.50.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651869/475c6
【AWS Lambda】推しを広めるTwitterBotをほぼ無料で運用した
# 作ったモノ
## 谷崎早耶?さややん?画像bot
谷崎早耶ちゃん(さややん)の画像・動画をツイートするボットを趣味で作りました。
2019年の5月に公開して、1.5年くらい運用しています。![スクリーンショット 2020-10-06 11.18.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255210/2b0b8ef5-ad11-abf2-a65c-cff437efdea8.png)
可愛いと思ったらリツイートお願いします!#谷崎早耶 Apex UpでNode.js × expressをAWS Lambda, API Gatewayに速攻デプロイしてみる
# はじめに
Node.js × expressのAPIのデプロイ先としてLambdaを使おうと思ったのですが
手取り早くデプロイして試したかったので、Apex Upを使ってみた。今回はその時の備忘録# Upとは
APIや静的ウェブサイトをLambda × API Gatewayに`up`コマンドでデプロイしてくれるツールです。# 使ってみる
Upのインストール
“`
curl -sf https://up.apex.sh/install | sh
“`プロジェクト作成
“`bash
mkdir node-up
cd node-up
npm init
entry point: (index.js) app.js # 自分はapp.jsに変更
“`expressのインストール
“`bash
npm install express
touch app.js
touch up.json # Upの設定ファイル
“`app.js
“`javascript
const express = require(‘express’)
const app = eAWS Chaliceの開発環境をdockerで構築し、超高速でサーバーレスアプリケーションをデプロイしてみた
# AWS Chaliceの開発環境をdockerで構築し、超高速でサーバーレスアプリケーションをデプロイしてみた
ChaliceもLambdaも初めてですが、
初めてのサーバーレスアプリケーションに興奮したので書きますソースコード [naokit-dev/python3_chalice_on_docker](https://github.com/naokit-dev/python3_chalice_on_docker)
## Chalice (チャリス?)
AWSが提供するPythonフレームワーク
Lambdaを使ったサーバーレスアプリケーションを簡単にデプロイできる
[Documentation — AWS Chalice](https://aws.github.io/chalice/index.html)## 環境
– macOS Catalina
– VS Code
– Docker Desktop“`
docker –version
Docker version 19.03.13, build 4484c46d9d
docker-compose –
白いマスクから怪人マスクへ、AWSでサーバレスLINE写真処理アプリの開発記
# 0.はじめに
初めまして、中国から参りましたポンです。
今は野村総合研究所で働いている新人エンジニアです。
日本語がまだ下手ですから、もし変な日本語が入りましたらご容赦ください。
どうぞよろしくお願いいたします。コロナ時期の旅行写真には、白いマスクが多すぎで、
もう我慢できないですよね?
ちょうど今は新人開発研修があって、これを研修の課題にしました。
これを解決するため、写真中の白いマスクを怪人マスクに変換するアプリケーションを開発しました。
「できるだけ作業量を減らす」というコンセプトに基づいて、
AWSの色々なサービスを活用してサーバレスLINE写真処理アプリとして開発しました。
**マスクだらけの写真にうんざりした方**も、**サーバレスに興味ある方**も、
ぜひ、この開発記をお楽しみください。# 1.なぜこのアプリを開発?
AWSSAAに落ちた時の悔しさを書く
## はじめに
##### 自分のスキル感
+ 実務4ヶ月程度(メインはバックエンド)
+ AWSたまに触るぐらい(超主要なサービスは理解していた)よーするに**AWSあんまり知らない駆け出しエンジニア**ということになります。
#####資格を取りたいと思った理由は以下の2つ
+ 昨今AWSがインフラに使われるのは主流になってきていて自分も体系的な知識をつけたいと思っていたから。
+ 資格を持っていると**AWSに関してこれぐらいの知識ありますよ〜**という明確な基準ができるから。一口に「AWS触ったことがある」と言ってもどのサービスなのか、どれぐらいの知識があるのかなど、線引きがしづらいと思っていた。
そこで資格の勉強をしてみようと思いました。## 勉強したこと
勉強期間は**1ヶ月ちょっと**です。
基本的に勉強したのは下記の2つのみです[この1冊で合格!AWS認定ソリューションアーキテクトアソシエイト テキスト&問題集](https://www.amazon.co.jp/%E3%81%93%E3%81%AE1%E5%86%8A%E3%81%A7
WebアプリへのLINEログイン実装で少しハマったところ
WebサイトへLambda+Node.js+APIGateWayを含めて、LINEログイン機能を実装しようとした。
参考にしたサイトが
**「WebアプリにLINEログイン機能を組み込む」**
[URL] http://xp-cloud.jp/blog/2019/11/27/6116/非常に分かり易くて参考になったが、一部どうしても動かない(LINE認証画面が出てこない)為、エラーメッセージを眺めてみると、「stateが無い」といったことを言われているので、あらためて、LINE公式を確認すると
“`
“queryStringParameters”: {
“error”: “invalid_request”,
“error_description”: “‘state’ is not specified.”
},
“`stateというパラメータは「必須」ということだった。
![20201006-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509691/bef57cfc-93b9