- 1. 【AWS/Lambda】lambdaに固定IPをつける/VPCに所属させる
- 2. Elastic Beanstalk 指定時間だけインスタンスタイプを上げる
- 3. Lambda Node.js8.10から10.xへの バージョンアップに伴うImageMagickの対応
- 4. 画像から人物の性別、年齢を推測するLine botを作ってみた
- 5. MediaLiveで出力したアーカイブファイルをMP4に自動変換する
- 6. DynamoDBでPromiseが使えた(Lambda Node.js)
- 7. Lambda + API GatewayでCORSを有効にしているのにCORSでエラーになる
- 8. ServerlessでさくっとWebサイトを構築する
- 9. ElixirでAWS LambdaでGithubActionsで継続デプロイ
- 10. 【AWS】API GateWay + LambdaでSlakcアプリケーションの認証を行う方法
- 11. AuroraServerlessを操作するAPI(GET、PUT、POST)+lambdaを作る。
- 12. codecommitのPullRequestをredmineのチケットに連携する
- 13. Elastic Beanstalkのインスタンスやボリュームのタグをデプロイ時に更新
- 14. codecommitとredmineを連携させる
- 15. APIGateway+Lambda+ServerlessFramework(言語:Python&Golang)の色々。offlineモードとかバイナリアップロードとか
- 16. LambdaでPHPを実行する手順
- 17. Amazon API GatewayのHTTP API使ってみた
- 18. スロークエリをSlackに通知してみた
- 19. node.js製のlambdaアプリをコマンド一発でアップロードする方法
- 20. Github Actionsを使ってRuby製のAWS Lambda関数を更新する
【AWS/Lambda】lambdaに固定IPをつける/VPCに所属させる
「困ったら大体lambda(とS3)」「lambda イズ 仙道」、AWSの基本ですね()
ただ彼は基本的に固定IPを持ちません。仙道同様、気まぐれです。
今回はそんな彼に**固定IPを付与する方法**をまとめます。
また、結果として**VPC&サブネットへ所属させる方法**にもなります。
# どんな時に役立つか
例えば– 申請式で特定IPからのアクセスしか認められないサービスとの連携
– インスタンス内で動くIP制限付きサイトの死活監視
– プライベートサブネット内のインスタンスと通信※インスタンスそのものの監視はcloudwatchでどうぞ
# 構成図
以下の形です。
![lambdaから外へ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488789/4b7a4f6f-eaf0-a254-287c-d4c18e82e4a6.png)
# 手順
手順的には大まかに以下の形です。
1. lambdaをVPC内のプライベートサブネットに設置
2. lambdaのロールにvpc、eniに関する権限
Elastic Beanstalk 指定時間だけインスタンスタイプを上げる
#改善
12:00~13:00のみ負荷のかかるElastic Beanstalkの環境がある。
インスタンスタイプの調整で費用を抑える。
PMから指示がなくてもインフラはそうする。#lambda_function.lambda_handler
“`python:python3.8
import json
import boto3
from datetime import datetimedef lambda_handler(event, context):
envName = str(event[‘env-name’])instanceType = ”
currHour = datetime.now().hour + 9if currHour > 24:
currHour = currHour – 24print(currHour)
if(currHour == 11): #11時代に上げる
instanceType = ‘c5.xlarge’
elif
Lambda Node.js8.10から10.xへの バージョンアップに伴うImageMagickの対応
# はじめに
今回、LambdaランタイムNode.js8.10のサポート終了に伴い、Node.js10.xへアップデートを行いました。
結構詰まった部分などが合ったので、その備忘録として残します。## LambdaランタイムNode.js8.10のサポート終了について
以下、AWS公式より
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html2020/2/3を持ってLambdaのランタイムNode.js8.10の更新が終了します。
これに伴い、Node.js8.10で実装しているLambdaのランタイムを10.xにバージョンアップをしま
画像から人物の性別、年齢を推測するLine botを作ってみた
# 概要
lineを使って、送信した画像から
性別、年齢予想、表情分析を実施するbotを作成しました。こんな感じ
画像を送ると、分析した結果が返ってくる(3人まで同時に写っててOK)
ソースコードは[こちら](https://github.com/vesono/photo_recog_line_b
MediaLiveで出力したアーカイブファイルをMP4に自動変換する
#はじめに
MediaLiveでライブ配信を行う際、アーカイブを残しておくことがあるかと思います。
2020年1月現在では、MediaLiveのアーカイブ出力はtsファイル形式のみ対応しています。tsファイルはVLCなどの動画プレイヤーを使わないと再生することができないため、
利用しやすいmp4ファイルに変換する必要があるという機会に何度か遭遇しました。そのときに構築した自動でmp4に変換する仕組みを簡単に記載しておきます。
##ざっくり構成図
MediaLive -> S3 -> Lambda -> MediaConvert -> S3
##MediaLive
Output Groupで「Archive」を選択します。##S3
tsファイルを置くフォルダと
mp4フ
DynamoDBでPromiseが使えた(Lambda Node.js)
# はじめに
Lambda(Node.js)でDynamoDBに接続し、値を取得したいときに、
非同期であるために、自分でPromiseで返す関数を作成していた。コード
“`javascript
/**
* データの挿入を行う。
* @param ddb
* @param params
* @returns {Promise}
*/
exports.addItem = function (ddb, params) {
return new Promise(function (resolve) {
ddb.putItem(params, function (err, data) {
if (err) {
console.log(“PUT失敗”, err, err.stack);
} else {
console.log(“PUT成功”);
resolve(data);
Lambda + API GatewayでCORSを有効にしているのにCORSでエラーになる
Amazon Pinpoint を使用するために、[チュートリアル: E メール設定管理システムの設定](https://docs.aws.amazon.com/ja_jp/pinpoint/latest/developerguide/tutorials-email-prefs.html)をやってみたら、[ステップ 6: ウェブフォームを作成してデプロイする](https://docs.aws.amazon.com/ja_jp/pinpoint/latest/developerguide/tutorials-email-prefs-part-6.html)で引っかかったので。
## API GatewayでCORSは有効になっている
API Gatewayのメソッドレスポンスではこんな感じで設定済みなのに、いざ違うドメインから実行しようとするとブロックされてしまう。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260487/df29519c-640f-b9ec-239e-1145590f6c
ServerlessでさくっとWebサイトを構築する
社内ユースのちょっとしたツールや検証用に画面があると便利だなということで、ServerlessでWebサイトを作ってみました。
今回はR&Dの成果物について、エンジニア以外のメンバーからフィードバックしてもらう目的でWebサイトを作成します。プロダクション環境に導入する際は、アーキテクチャ面でいろいろ考慮する必要がありそうですが、とにかく動けばいいといったものであれば本当にさくっと作れました。
# 1.構成
![composition.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551923/60e15ae2-eed9-2165-f940-dc6a30ed173e.png)– S3
– API Gateway
– Lambda
– DynamoDB全てAWSのサービスを利用します。社内ユースということで、S3、API GatewayへのアクセスはIPアドレスで制限します。
# 2.Lambda
Pythonで書こうと思ったのですが、外部ライブラリをLambdaで利用するにはローカルでP
ElixirでAWS LambdaでGithubActionsで継続デプロイ
# はじめに
「Elixirで簡単にAWS Lambdaの開発ができるようになれば、もっとElixirが流行るのでは?」
そんな想いから、Elixirで実装されたAWS Lambdaの関数をGithubにプッシュすると、Github Actionsが自動でビルドしAWSにデプロイしてくれる仕組みを試してみました。
# ElixirでAWS Lambda
AWSの公式としてElixir用のAWS Lambdaランタイムは用意されていないので、ElixirでAWS Lambdaを動かすためには、Elixirで実装したコードを動かすためのカスタムのAWS Lambdaランタイムを用意する必要があります。
また、Elixirでは`mix release`でElixirやErlang不要で実行可能なパッケージを作成することができるのですが、このパッケージを実行するためには、パッケージを実行する環境で作成する必要があり、AWS Lambdaの場合は、Amazon Linuxの環境でビルドする必要があります。
つまり、ElixirでAWS Lambdaを動かす場合、Amazon Linu
【AWS】API GateWay + LambdaでSlakcアプリケーションの認証を行う方法
SlackのEventをAPI GateWayで処理し、Lambdaを起動しています。
APIのアドレスが漏れた場合、攻撃を受ける可能性が有る為、API GateWayで何かしらの対策ができないかと思い記事を書こうと思いました。# Slackの認証方法について
以下の2種類があります。– リクエストのBody内の文字列を利用した認証
– Signing Secretを用いた認証# リクエストのBody内の文字列を利用した認証
## SlackのEvent APIについて
Eventが発生すると、下記のようなJSONが発行されます。“`json:Slackのイベント
{
“token”: “XXYYZZ”,
“team_id”: “TXXXXXXXX”,
“api_app_id”: “AXXXXXXXXX”,
“event”: {
“type”: “name_of_event”,
“event_ts”: “1234567890.123456”
AuroraServerlessを操作するAPI(GET、PUT、POST)+lambdaを作る。
# 作るもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/3f0e6d96-28eb-8fa9-1aac-4da612896558.png)
今回、DBに入れるデータは以下のものとして進める。
|id|name|age|
|:—:|:—:|:—:|
|1|Apigateway|12|
|2|lambda|34|
|3|Dynamodb|56|_contents_
* Aurora serverless、シークレットマネージャとは
* Aurora serverlessのDBの作り方。
* lambdaからAurora serverlessへアクセスする方法。
* APIでGET、PUT、POSTする方法## Aurora serverlessとは?
DBのインスタンス部分とストレージ部分が分離した構造を取っており、アクセスがない時にはインスタンス部分は起動しておらず、ストレージ部分のみが存在する。アクセスを受けると、負荷に応じてインスタンスが
codecommitのPullRequestをredmineのチケットに連携する
概要
—
[これのシリーズもの](https://qiita.com/turbo5522mame/items/d5a7e126f993eb185d29)
codecommitでpullrequestしたときに、関連するredmineのチケットのコメントに通知を出したくてごにょごにょした記録。
手順にはなってませんが、ヒントにはなるかな、と。
こんな感じで。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251329/0166898c-fe7e-8260-e997-edbebc4e1401.png)やりたい構成図
—
ざっくりこんなかんじ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251329/4198e024-7d14-81a2-593a-81ff811cf828.png)やったこと概要
—
### 前提
codecommitでブランチを切るときに必ずred
Elastic Beanstalkのインスタンスやボリュームのタグをデプロイ時に更新
#なぜ
* .ebextensionsで環境プロパティからインスタンスやボリュームにカスタムタグを追加している。管理ルールが変わりタグ更新が必要になったため、何気なく更新したらデプロイに失敗した。目的の環境プロパティをタグ以外の処で参照していた。
* シンプルに.ebextensionsを修正する何のことでもないことだが、保守担当に説明すると承認が必要のこと。これは時間がかかりそうだ。#遠回り
改善策でサーバ構成もプログラムも遠回りしてはいけない。根本原因をつぶすのがベストだ。しかし、
承認とリリースまで1~2ヵ月はかかりそうなことと、以前からLambdaのイベントトリガーを試してみたかったことがあり今回は遠回りをする。![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249425/90b47277-865f-e9e2-67a6-5066270e43f4.png)
## Lambda
* LambdaのRoleは事前登録しておく“`python:Python3.8
imp
codecommitとredmineを連携させる
概要
—
世の中的にgit→redmineはやり方整ってるけど、codecommit→redmineは無いのでごにょごにょした記録。
手順にはなってませんが、ヒントにはなるかな、と。[※こっちはPullRequestの連携](https://qiita.com/turbo5522mame/items/48f1fdcd95a7fd4409f4)
やりたい構成図
—
ざっくりこんなかんじ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251329/2dc0fef5-7639-70a6-fb89-dc30d28ab2dd.png)やったこと概要
—
### redmine側の設定
– redmineにgit連携のプラグイン[github_hook](https://github.com/koppen/redmine_github_hook)を入れる
– redmineのサーバにcodecommit上のリポジトリのbareリポジトリを作る参考にしたサイトは[こちら](
APIGateway+Lambda+ServerlessFramework(言語:Python&Golang)の色々。offlineモードとかバイナリアップロードとか
##はじめに
APIGateway+Lambdaを使って、RESTfullなAPIによるPDF生成APIをデプロイメントする時に色々とハマったので、その時の備忘録を記事にしました。基本はServerlessFrameworkを使ったデプロイメントの自動化を目指して作業をしていった内容をまとめています。
##APIGatewayでメディアタイプの追加
まず、APIGatewayのバイナリレスポンス対応がどういうフローになるかを説明しておきます。– 【リクエスト】
ブラウザ → (jsonリクエスト) → APIGateway → Lambda– 【レスポンス】
Lambda → (ファイルを文字列:Base64変換) → APIGateway → (文字列をデコード:Base64変換) → ブラウザ上記のようにLambdaからはBase64変換されたバイナリデータの文字列が返却される事が期待されています。Lambdaで返却する時の処理として、ここがまずポイントになります。
###APIGatewayのバイナリサポート周辺
APIGatewayでPDFファイルを直接返す
LambdaでPHPを実行する手順
なるべく、簡潔にできるようにまとめてみました。
##前提
Mac
AWSアカウント作成済
Dockerインストール済##手順
1. Docker内で、PHPの実行環境を作り、それをzip化
2. そのzipファイルをLambdaにアップロード
3. API GatewayでAPI作成##1. Docker内で、PHPの実行環境を作り、それをzip化
[stackery/phplambdalayer](https://github.com/stackery/php-lambda-layer)というツールを使うと、**makeコマンド一つ**で簡単にできました。このツールには、PHPの実行環境をzip化するために必要なスクリプトや、Lambdaでカスタムランタイム自体を動作させるboostrapファイル等がまとめて入っている
“`
$ git clone https://github.com/stackery/php-lambda-layer.git
$ cd php-lambda-layer
$ make php71.zip
“``php71.zip`という
Amazon API GatewayのHTTP API使ってみた
# はじめに
lambdaをさわっててAPIGatewayのコンソールを覗いてみたら見覚えのない選択肢がありました。
この`HTTP API`なるもの、新機能らしいです。
しかも出たばかり。
ホットなので使ってみました。※検証時点ではプレビュー版となります。
# HTTP API
クラスメソッドさんが解説してくれてます。
いつも助かります。Amazon API Gatewayは「HTTP API」と「REST API」のどちらを選択すれば良いのか? #reinvent
なにやら従来のREST APIよりも簡単に使えそうな雰囲気ですね。
# やりたい事
curlでapi叩いてlambda動かしたい。
認証も噛ませたい。# やってみた
## lambda作る
* ウィザードに従い、ぽちぽち作る。
* 言語はpython3.7を指定。
* ソースはこんな感じ。“`
import jsondef lambda_handler(event, context):
return {
‘isBase64Encoded’: False,
スロークエリをSlackに通知してみた
最近スロークエリをSlackに通知するようにしたので、そのやり方をまとめておきます。Slackに通知したいと思った背景などは以下の記事をご参照ください。
https://qiita.com/yuzoiwasaki/items/d8b56a98822e2b2bb6e7上の記事で全く技術的なことを書けなかったので、この記事では主に技術の話をします。
## スロークエリをSlackに通知する方法
こちらの記事を参考にさせていただきました。ありがとうございます。
基本的には上記の記事の内容で事足りたのですが、運用していくうちにいくつか無視したいクエリが出てきました。アプリケーション側でキャッシュしているためそれほど気にする必要がないクエリや、管理画面のLIKE検索などすぐには解決が難しいが優先度は低いものなどです。
Slack通知が無視して良い項目で埋まってしまうと本当に重要なクエリを見落とす危険性があったため、無視して良いものは通知から除外するようにしました。
#
node.js製のlambdaアプリをコマンド一発でアップロードする方法
node.jsでlambdaのアプリを作っているのですが、コードやパッケージが増えてくるとインライン編集出来なくなったり、zipでアップロードする必要が出てきます。ちょっとした変更でもわざわざawsのサイトに行ってアップロードするのは面倒ですし、複数のlambdaアプリを作っていたら間違えて別の関数にアップロードしてしまった、といった事故も起きるかもしれません。そこで、コンソールからコマンドでアップロードできるようにする方法を書きます。
※動作確認環境: macOS 10.14.6
# aws CLIの設定
まずawsのCLIをインストールします。バージョンが出ればOKです。
“`
$ brew install python3
$ pip3 install aws
$ aws –version
“`次にawsのユーザー情報を設定する必要がありますが、アクセスキーが必要になります。IAMでAdministratorAccessポリシーを持ったユーザーを作成しておきます。
アクセスキー、シーク
Github Actionsを使ってRuby製のAWS Lambda関数を更新する
# モチベーション
AWSコンソールを開いたり、AWS CLIを使わずに、gitの操作だけでAWS Lambda関数のデプロイを完了します。近年、[Github Acitons](https://github.com/features/actions)というGithub純正のCI/CDツールがリリースされました。
これを使って、Githubで管理しているAWS Lambda関数の変更を、AWSに反映します。# 前提条件
今回はRubyで作成されたAWS Lambda関数を更新します。
Lambda関数とデプロイスクリプトが同じ言語だとメンテナンスが楽なので、デプロイにもRubyを使います。## 先駆者
検索すると、AWS Lambda関数をデプロイするGithub Acitonsがいくつか公開されているのが見つかります。[^1]
[^1]: https://github.com/marketplace?utf8=%E2%9C%93&type=actions&query=lambda
例えば [Deploy AWS Lambda function](https://