- 1. LambdaでEC2内のシェルスクリプトを実行
- 2. Lambda関数を設定してS3イベントで動かそう!
- 3. RDS Proxy ちょっと試してみた。
- 4. TABLE 形式の Aurora(MySQL 互換)スロークエリログを Elasticsearch Service (6.8) に取り込み S3 に保存するメモ(Lambda Python 3.8 版)
- 5. Amazon Lexで簡単なボットを作成してみた
- 6. serverless framworkでLambda+APIGatewayをdeployする
- 7. AWS Lambdaでslackに新着論文通知
- 8. AWS Lambdaと仲良くなれるかもしれないまとめ
- 9. apacheからS3に静的ページを移行してパス補完で詰まった話
- 10. AWS Lambdaでカナリアリリースする
- 11. 「セキュアで堅牢なAWSアカウント」を実現する CloudFormationテンプレート – ④アクセスキーのローテーションと削除
- 12. 【Slack】インタラクティブメッセージについて
- 13. 特定のタグを含むツイートに英訳をつけてインスタに投稿したかった
- 14. S3にCSVファイルがアップロードされるとLambdaがDynamoDBへデータを挿入します
- 15. 今日から始めるSAM CLI【API Gateway + Lambda + DynamoDB】
- 16. LambdaでS3オブジェクトに独自メタデータの追加・更新を行う
- 17. AWS LambdaのNode.jsのランタイム更新時確認手順書
- 18. [Node.js]Google Cloud Functionsでimport/exrpot構文を使う
- 19. Lambdaにライブラリを乗せるときにLayersを使ったら便利
- 20. DynamoDBのチュートリアルを読み解く【5: トリガーを作成してテストする】
LambdaでEC2内のシェルスクリプトを実行
## はじめに
### 本記事の対象となる読者
特定のトリガーでLambdaを起動して、EC2内のシェルスクリプトを実行したい
### システム概要
上記のやりたかったことを実現するために使用したサービスは以下です。
* AWS Lambda(以後Lambda)
* AWS System Manager(以後SSM)
* AWS Elastic Computer Cloud(以後EC2)### 書かないこと
* EC2インスタンスの構築方法
## EC2
Amazon Linux2を使用して、無料利用枠でインスタンスを用意します。
### EC2インスタンスを作成
EC2インスタンスを作成する前に以下のポリシーをアタッチしたIAMロールを作成しておきます。仮に名前は`AWSServiceSSMRole`としておきます。
* AmazonEC2RoleforSSM
* AmazonSSMFullAccess上記で作成したロールをインスタンスに割り当てインスタンスを作成します。
> ssm-agentのインストールは必要ありません。
### インスタンス内
Lambda関数を設定してS3イベントで動かそう!
#Lambdaってなに?
AWSの提供するサービスの一つで、サーバ管理をすることなく処理を実行することができるサービスです。例えばLambdaを利用しない場合、EC2でサーバを作成し処理実行に必要なミドルウェアや言語をインストールし、環境設定をすることで初めて処理が実行されます。
しかし、Lambdaではそのようなサーバのプロビジョニングをすることなく、処理を書くだけで実行することが可能になります。
これにより、
★サーバ自体の管理・メンテナンスが不要
★処理が実行されている時間のみ課金されるので処理の頻度によってはコストを大幅削減可能
★他AWSサービスと容易に連携できるので、AWSメインのアーキテクチャでは大変便利
というメリットがあります。#トリガーとは?
書いた処理を実行させるにはトリガーというものを設定する必要があります。
AWSのあらゆるサービスと連携ができ、CloudWatchでアラームが出たら実行、kinesis data stream にデータが存在するとき実行、S3にファイルが置かれたら実行などが代表的な例になります。つまりLambdaは**実行する
RDS Proxy ちょっと試してみた。
AWSの一番好きなサービスはAWS Lambda な人です(再々掲)
—
## 注意書き
`Preview版のサービスなので、GAになるまでに色々と変更される可能性は大いにあります。`—
AWS re:invent前後に発表されたVPC Lambda関係のアップデートやってみたシリーズラストかな?
ちょっと時間経っちゃいましたけど。### サンプルコード
サンプルソースはこんな感じ。汚くてすみません。
Node.js v12.xで確認済みです。[Airport, airline and route data](https://openflights.org/data.html) にあるroute.csv を加工したものを、
RDSに放り込んで、乱数生成して、それにあった航空会社のIATA2レターコード※ を参照しているだけです。“`javascript:handler.js
‘use strict’;
const mysql = require(‘mysql’);
const util = require(‘util’);const dbHost
TABLE 形式の Aurora(MySQL 互換)スロークエリログを Elasticsearch Service (6.8) に取り込み S3 に保存するメモ(Lambda Python 3.8 版)
こちらは、
– **[TABLE形式のAurora(MySQL互換)スロークエリログをElasticsearch Service (6.0/6.2) に取り込みS3に保存するメモ](https://qiita.com/hmatsu47/items/8c92b1a43fd412c054cf)**
の Elasticsearch Service 6.8 / Lambda Python 3.8 対応化メモです。
1 ヶ月ほど前に、
– **[ALB のアクセスログを Elasticsearch Service 6.8 に取り込むメモ(Lambda Python 3.8 版)](https://qiita.com/hmatsu47/items/432b1f18f40bba16f5d1)**
– **[CloudFront のアクセスログを Elasticsearch Service 6.8 に取り込むメモ(Lambda Python 3.8 版)](https://qiita.com/hmatsu47/items/e61e1065ba521896225c)**
– **[Ela
Amazon Lexで簡単なボットを作成してみた
# はじめに
この記事はLexの勉強用として試したことをまとめたものです。
書籍「[AWSでつくる-AIプログラミング入門](https://www.amazon.co.jp/AWS%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B-AI%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%9D%BE%E6%B5%A6-%E5%81%A5%E4%B8%80%E9%83%8E/dp/4798059056)」を参考にして対話ボットを作成してみました。# Amazon Lexについて
* 対話型インターフェイスを作成することができるAIサービスである。
* 会話ボットを簡単に構築することができる。
* Amazon Alexaで使われている深層学習技術と同じ技術を使用している。
* 現時点で日本語未対応である。# IAMロールを作成
* Lexに権限を与えるためのロール「AWSServiceRoleForLexBots」を作成する。
* http
serverless framworkでLambda+APIGatewayをdeployする
## はじめに
アプリケーションを Lambda にデプロイする際どんな方法を使用しているだろうか?
AWS SUM ,code deploy と使用してきたがコマンドを複数回叩かないといけなかったりとちょっと面倒臭かった。
そこで最近自分の周りで話題になっている serverless framwork を試してみる。
何やらコマンド一つでビルド・デプロイを行ってくれたりとかなり便利らしい。
## Serverless Framework インストール
以下のコマンドを実行し Serverless Framework をインストールする。“`
$ npm install -g serverless
“`> ローカル端末で Serverl
AWS Lambdaでslackに新着論文通知
# TL;DR
AWS Lambdaを用いてMicrosoft Academicで新着論文を検索してSlackに通知するツールを作った。
# はじめに
研究室等のSlackに新着論文通知出せたら便利ですよね。
以前はjournalのRSSを使ってましたが、あまり関係ない論文が飛んできてイマイチ機能していなかったので自分でフェッチツールを作ることにしました。
(実際、皆さんどうしてるんでしょうか)
通知を出すだけなので、[AWS Lambda](https://aws.amazon.com/jp/lambda/)や[Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/)といったサーバーレスアーキテクチャを用いれば非常に安価で簡単に構築できます。
今回はAWS Lambdaを用い、また論文検索には[Microsoft Academic](https://academic.microsoft.com/home)のAPI、[Academic Knowledge API](https://doc
AWS Lambdaと仲良くなれるかもしれないまとめ
– AWS Lambdaに関してざっとまとめてます
– 具体的な使い方ではなく、サービスの位置付けや概念に関してまとめています## 概要
[AWS Lambda とは](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)によると>AWS Lambda はサーバーをプロビジョニングしたり管理する必要なくコードを実行できるコンピューティングサービスです。
>
>AWS Lambda は必要時にのみてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします。使用したコンピューティング時間に対してのみお支払いいただきます- コードが実行中でなければ料金はかかりません。
>
>AWS Lambda では、管理を全く必要とせずに、任意のアプリケーションやバックエンドサービスで仮想的にコードを実行できます。AWS Lambda は、高度な可用性のコンピューティングインフラストラクチャでコードを実行し、サーバーとオペレーティングシステム、システムのメンテナンス、容
apacheからS3に静的ページを移行してパス補完で詰まった話
# 何を書いた記事か
AWS S3を用いて静的ページをホスティングする際のTipsです。
特に、apacheなどで配信されていた静的ページをS3に移行する際に使えると思います。apacheなどのMWがよしなに解析してくれていたURI PathをS3を用いたホスティングでどのように実現するかについて記載します。
# ストーリー
とあるWebサイトのクラウド移行案件を進めることになりました。
そのWebサイトには、静的コンテンツ(HTML/CSS/JavaScript)のみで構成されたLP(静的ページ)が存在することがわかり、せっかくクラウドに移行するので、信頼性の高いS3から配信するようにしようと考えました。
また、対象のLPは接続できるIPに制限をかける必要があり、その実現についても考える必要がありました。## As-Is
– apacheで静的ページを配信
– LoadBalancerでSSLを終端し、FirewallでIP制限を実施
– アクセスログはapache→fluentdで取得## To-Be
– 静的コンテンツはS3上に配置
– SSL通信を実現する
AWS Lambdaでカナリアリリースする
# LambdaのVersionとAlias
AWS LambdaではPublishすると固有のVersion番号が割り当てられる。
Versionには任意の名前のAliasをつけることが可能で、Aliasに関連付けるVersionを変更することで、Aliasを指定してFunctionを呼び出しているユーザが利用するVersionを変更することができる。
![Lambda_Version_Alias.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13038/02427f6b-9a54-a781-62a1-0305578379c9.png)# Additional versionを用いて、新しいVersionをカナリアリリースする
Aliasには Additional versionというオプションが存在し、主として指定したVersionとは異なるVersionとその呼び出し割合を指定することができる。
Additional versionの有無や呼び出し割合は任意のタイミングで変更ができ、新しいVe
「セキュアで堅牢なAWSアカウント」を実現する CloudFormationテンプレート – ④アクセスキーのローテーションと削除
# はじめに
AWSには、アカウントやリソースへの脅威検知に対応した、**AWS IAM Access Analyzer**, **AWS Security Hub**, **Amazon Inspector**, **Amazon GuardDuty**, **AWS CloudTrail**, **AWS Config** などのサービスが用意されています。
また、[**CIS AWS Foundations Benchmark**](https://d1.awsstatic.com/whitepapers/compliance/AWS_CIS_Foundations_Benchmark.pdf) という**セキュリティガイドライン**が公開されており、このガイドラインは、**AWSアカウントをセキュアに保つために必要なAWSのセキュリティ設定**を集めた**ベストプラクティス集**として活用できます。自身のAWSアカウントがこのガイドラインにどの程度準拠しているのかを確認/監査する手段として、**AWS Security Hub**で、**CIS AWS Foundation
【Slack】インタラクティブメッセージについて
この記事の内容は[この](https://api.slack.com/messaging/interactivity)公式ページを参考に作成しました。
SlackのインタラクティブメッセージはSlackアプリを強力なワークフローパートナーになりうる物です。
# メッセージ内アプリの対話性
[Block Kit](https://api.slack.com/messaging/composing/layouts#adding-blocks)を利用してリッチなメッセージレイアウトを作成する事ができます。
また、Block Kitには、インタラクティブ機能を有効にするコンポーネントも含まれています。
これらの対話型コンポーネントを利用して、単純な情報通知アプリから、ユーザー向けの強力なパートナーアプリを作成できます。## Block Kitに含まれるインタラクティブ機能
– ボタン
– リスト選択
– 複数選択リスト
– オーバーフローメニュー
– 日付ピッカー
– プレーンテキスト入力フィールド
– ラジオボタン# インタラクティブメッセージの使用方法
## Lambdaの作
特定のタグを含むツイートに英訳をつけてインスタに投稿したかった
## やりたかったこと
**特定のタグを含むツイートに英訳をつけてインスタに投稿したい**
なんでこんなことをしようとしたのか。
2019年6月からPS4でFF14をやっていまして、あるツイートをしたところ、
ちょっと反響がありました。
2020年になり、せっかくなら毎日投稿しようと思い、1月から日々投稿しています。
ただし、TwitterのアカウントがFF14以外のことをツイートしていること、
インスタ界隈も盛り上がっていることから、FF14用のアカウントをインスタで作成し、
インスタで投稿を始めました。ところが、インスタでは外国人のアカウントが多数。
もっと見てもらうには、英訳も必要なのです。
S3にCSVファイルがアップロードされるとLambdaがDynamoDBへデータを挿入します
#概要
S3へjsonファイルがアップロードされるとLambdaがそのファイルの中身を解析して、DynamoDBへデータを挿入します。#jsonファイルの構成
`data`キーに配列があり、配列の要素はオブジェクトとなっています。“`json
{
“data”: [
{
“item1”: “sample data1”,
“item2”: 123,
“item3”: “test data1”
},
{
“item1”: “sample data2”,
“item2”: 1234,
“item3”: “test data2”
},
]
}
“`#主な流れ
1. S3へファイルがアップロードされるとLambdaが起動
2. アップロードされたファイルの中身を取得
3. `data`キーから配列を取得
4. 配列を`forEach`で各要素をDynamoD
今日から始めるSAM CLI【API Gateway + Lambda + DynamoDB】
## SAM CLIでAPI Gateway + Lambda + DynamoDBを使う
AWSでのサーバレス構築を考えた時に最も無難でポピュラーな構成(悪く言えばあまり面白みのない)として挙げられる、
– API Gateway
– Lambda
– DynamoDBの構築を、SAM(Serverless Application Model) で行います。
## 書くこと
1. SAM CLIでプロジェクトの作成
2. SAMプロジェクトのデプロイ
3. SAMプロジェクトを修正してDynamoDBにテーブルを作成
4. SAMプロジェクトの更新## SAM CLIでプロジェクトの作成
まずSAM CLIをインストールします。
[Installing the AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)
“`
$ sam –version
SAM CLI,
LambdaでS3オブジェクトに独自メタデータの追加・更新を行う
# はじめに
LambdaでS3オブジェクトを制御したかったので、オブジェクトに独自のメタデータ(ユーザ定義メタデータ)を追加・更新して対処した。
本文では、ユーザ定義メタデータについて、実際のソースと実行結果について記す。# ユーザ定義メタデータとは
Content-Lengthなどのオブジェクトの追加情報を`メタデータ`という。
メタデータには2種類あり、主にAWSシステム上で制御される`システムメタデータ`とユーザが独自で定義できる`ユーザ定義メタデータ`がある。
今回はファイルの上書き回数(メタデータ名を`x-amz-meta-count`とする)をユーザ定義メタデータとして定義する。# Lambdaソース
下記LambdaをCloudWatchEventsなどをトリガーとして実行する。
指定したバケット、ディレクトリ配下のファイルを取得し、そのファイルのメタデータに`x-amz-meta-count`がなければ追加する。
あれば、メタデータの値を+1する。
最後に追加更新した内容でファイルを上書き(copy_object())する。“`python
im
AWS LambdaのNode.jsのランタイム更新時確認手順書
なかったんで用意しておきました。まだ本番環境でサポート期限間近のランタイムを使っている人は参考にしてください。
※当時はNode.js 8.10系が対象でした。## TL;DR
– AWS Lambdaのランタイムの更新はダウンタイムがないので本番環境への適用もサービス稼働中でOK
– ランタイム更新時の動作確認は推奨
– 更新はAWSがランタイムサポートポリシーで定めている日付より前に実施する## 手順
1. 本番環境以外の環境で本番環境にデプロイされている資源と同じものをデプロイする
2. デプロイした環境のLambdaのランタイムを上げる
3. 動作確認を実施
4. 問題なければ本番環境(ST環境 → 本番環境の順番でも)のLambdaのランタイムを更新する## 気になるところ
#### 廃止(更新)をすぎても更新可能なのか
これについてAWSサポートに問い合わせてみました。
AWSサポート内の過去事例として、廃止(更新)以降でもランタイムの移行(サポート対象バージョンへの移行)が可能だった例があったそうですが、ドキュメントにも明記がないように、それが必ずしも可能と
[Node.js]Google Cloud Functionsでimport/exrpot構文を使う
#Overview
フロントエンドはReact、バックエンドはNode.jsで作っていると、どちらでも利用する処理はソースコードを共有したくなります。
別の記事でesmというパッケージを知り、Google Cloud Functions(以降、GCF)でもimport/export構文を使いたくなりました。
GCFのフレームワーク内で動くから厳しいかな?と思っていたのですが、至って簡単だったので残しておきます。#Target reader
– JavaScriptとNode.jsでソースコードを共有したい方。
#Prerequisite
– バックエンドはGCFを利用する、つまりNodeの起動オプションを指定するようなことはできない。
– Node.jsのバージョンはGoogle Cloud Function(GCF)に依存し、現時点ではV10系とする。#Body
##どうしてimport/export構文にするの?
私のPJの場合、バックエンドで作成した機能をフロントエンドで実行するかも?という機能がいくつかあります。
そうなるとどちらも同じJSだし、フロント
Lambdaにライブラリを乗せるときにLayersを使ったら便利
Lambdaにデプロイするときライブラリも一緒にデプロイする場合があると思いますが、いざデプロイするとちょっとした修正がコンソール上でできず、ちょっとめんどくさかったです。
それについてぼやいたらLayersを使えばどうかとアドバイスをもらったので、その備忘録。## デプロイする関数
APIをちょっとたたく関数。言語はPython。## LambdaのLayers機能
公式。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html
ライブラリをレイヤーとして取り込め、共通ライブラリとして利用できる。
そのためLambda関数にライブラリを取り入れる必要がない。
他のユーザが公開してるLayerも使えるらしい。## そのままデプロイすると
ライブラリだけで4.5MBでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452110/5c17653e-7869-eb74-e0b
DynamoDBのチュートリアルを読み解く【5: トリガーを作成してテストする】
# はじめに
今回も[DynamoDBのチュートリアル](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html)を実施しました。
最後はLambdaでのトリガー作成です。(バックナンバー)
[1.DynamoDB テーブル作成](https://qiita.com/kkino1985/items/f9091c1e1efb35009ce7)
[2.IAMポリシー/ロール作成](https://qiita.com/kkino1985/items/a087bc3077f36b4b1e21)
[3.SNSトピック作成](https://qiita.com/kkino1985/items/f40d950cfd6d464635fa)
[4.Lambda関数作成/テスト](https://qiita.com/kkino1985/items/4850f4bba7b8418c2cc8)# 5.1 トリガー作成用ARN情報取得
今回はDynamoDB