- 1. Google Chatのチャットルームへメッセージを投稿するLambda関数
- 2. 【AWS Lambda+API Gateway】Pythonでslack通知アプリ作ってみた
- 3. AWS Lambda基本
- 4. Lambdaでcryptographyを使う(Python3.8 + cryptography)
- 5. コンテナLambdaをデプロイしてみた(躓いたポイントとリソース削除)
- 6. RDSの自動起動と自動停止スクリプト
- 7. SAMでSlack通知Lambdaをデプロイ
- 8. lambda + typescript + s3のリファクタリングをしてテストケースを書いたメモ
- 9. Slackへ勤怠連絡を入力するAlexaスキルを作ってみた
- 10. Lambda@Edge とは
- 11. AWS SAM を用いて Hello World アプリケーションをデプロイしてみる
- 12. Chalice で Lambda Layer を利用する
- 13. AWS Lambdaで関数作ってAPIGatewayで公開するまでの学習
- 14. EC2のプロセス監視と自動再起動
- 15. localstack + aws cdk でAWS S3をローカル環境に立ち上げてLambdaでアクセスするメモ
- 16. AWS CDKでAPIGateway+Lambdaを作る
- 17. TerraformでHTTPS静的サイト(Route53 + ACM + S3 + CloudFront + Lambda@EdgeによるBasic認証)を作ってみた
- 18. SSM・CloudWatch Agentの自動更新とエラー発生時のメール配信
- 19. AWS Lambdaと開発環境(Eclipse)とでRDSの日時の値が異なる
- 20. AWS Lambdaのマルチアカウントデプロイ
Google Chatのチャットルームへメッセージを投稿するLambda関数
# 前提
* Python 3.8
* 標準ライブラリのみ
* 対象チャットルームにて着信Webhook作成済み# コード
【】は各自環境の値で修正“`python
import json
import urllib.requestdef lambda_handler(event, context):
# TODO implement
message_detail = ‘from aws lambda’message = {‘text’: message_detail}
url = ‘【作成した着信WebhookのURL】’
headers = {‘Content-Type’: ‘application/json; charset=UTF-8’}
byte_encoded = json.dumps(message).encode(‘utf-8’)req = urllib.request.Request(
url=url
, data=byte_encoded
【AWS Lambda+API Gateway】Pythonでslack通知アプリ作ってみた
#はじめに
我が社のCTOが、「エンジニアはみんな`Lambda`くらい使えるようになっていてほしいね〜」
とのありがたいお言葉から、「自分もエンジニアになったからには、`Lambda`でAPI作ってみよう!」と、
一念発起して、挑戦してみますた(⌒▽⌒)#LT;DR
– Lambda関数の作成
– Slack Api Incoming WebHooksの作成
– Layerの作成 & 登録
– API GatewayでAPIの作成
– 実践と結果まとめ#Lambda関数の作成
##Lambdaとは
>AWS Lambda は、サーバーのプロビジョニングや管理の必要なしにコードを実行できるコンピューティングサービスです。
Amazon API Gateway を使用すると HTTP リクエストに応答してコードを実行できます。
参照元:[AWS Lambda とは](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)ほうほう、AWSに管理系は丸投げできるんですな。
今回は、`HTTP`リク
AWS Lambda基本
#AWS Lambdaとは?
**「サーバーのプロビジョニングや管理の必要なしにコードを実行できるコンピューティングサービス」**#サーバーレスの特徴
**①インフラのプロビジョニング、管理が不要**
**②自動でスケール**
・リクエスト数に応じて自動的に起動数がコントロールされる
**③価値に対する支払い**
・事前に必要なコストが存在しない
・リクエスト数並びに処理実行時間に対しての課金
・コスト効率がよく、コストゼロからのスタート可能
**④高可用かつ安全**##**Lambda関数(ファンクション)**
・Lambaで実行するアプリケーション
・それぞれが隔離されたコンテナ内で実行される
・利用する言語の関数もしくはメソッドをハンドラーとして指定し、実際の際に呼び出す
・コードは依存関係も含めてビルド、パッケージングした上でアップロード
**ZIP形式**
アップロードしたものは**S3**に保存され実行時以外は暗号化される##**Lambdaファンクション-基本設定-**
・メモリ:**128MBから3008MB**の間で設定可能
容量に応じ
Lambdaでcryptographyを使う(Python3.8 + cryptography)
# はじめに
Lambdaでcryptographyを使う際に、モジュールをレイヤーで追加しました。
その手順の記録です。# 手順
クラウドシェルでPythonS3のライブラリをZip圧縮して、cryptographyのレイヤーを作成します。
一時的に保存するS3は事前に準備しておきます。
## ①cryptographyのファイルを取得する
### クラウドシェルを起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/b0bf86bc-b927-9bda-e284-f6526fb0f818.png)
### Pythonを3.8にする
バージョンを確認“`shell
python3 -V
“`
3.8でなければ、3.8にする。3.7.9だった。“`shell
# Pythonを3.8にする
sudo amazon-linux-extras install python3.8 -y
sudo update-alternatives –install /us
コンテナLambdaをデプロイしてみた(躓いたポイントとリソース削除)
## はじめに
AWS builders-flashにコンテナLambdaの記事が出ていたので試してみました。
躓いたポイントと試した後に実行したリソース削除コマンドだけ書いておきます。https://aws.amazon.com/jp/builders-flash/202103/new-lambda-container-development/
## 躓いたポイント
##### awscli 2.1.6 未満だとコマンド実行エラーになる
> aws lambda create-function \
–function-name func1-container \
–package-type Image \
–code ImageUri=\${ACCOUNTID}.dkr.ecr.\${REGION}.amazonaws.com/func1@\${DIGEST} \
–role ${ROLE_ARN}コンテナLambdaは新しくサポートされた機能なので、バージョンは最新化すべきですね。
RDSの自動起動と自動停止スクリプト
RDSは起動しっぱなしだとお金がかかる。
しかし、停止しても7日後に再度起動してしまう。
特に検証用とかで使用しない間が多い場合、いちいち起動したら停止するという運用はかなり面倒。
そのため、検証時以外は、起動したらすぐ停止するというスクリプトを作成して、**無駄なコスト**がかからないようにする。
そこで使用するのが、AWSのLambdaを使う。
## Lambdaとは何?
Lambdaと聞いてもわからないので調べた。
AWSの「サーバレスコンピューティングとアプリケーション」と言われる。
これまではPHPやPythonをうごかすためのwebサーバーが必要だったが、Lambdaならサーバーレスのため、サーバーを準備しなくても環境が揃っていると言うことである。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255267/1235389f-8f51-f11f-ea6b-dc23ef67432e.png)
**LambdaはJava、Node.js、C#、Pythonの
SAMでSlack通知Lambdaをデプロイ
## はじめに
[AWS Lambda Container Image Support](https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/) や EventBridgeのcron設定、Secrets Managerからシークレット情報の取得を試してみたかったので、以下のような構成図で一気に試してみます。## 構成図
– SAMでSlackにメッセージを通知するLambdaをデプロイする
– Lambdaはイメージ化してECRで管理する
– LambdaはEventBridgeで定期実行する
– SlackのWebhook URLをSecrets Managerで管理する![sam.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917499/eed96002-2bda-33c2-64bf-cfdac785faed.png)
## 手順
1. ECRにリポジトリを作成しておく
2. S
lambda + typescript + s3のリファクタリングをしてテストケースを書いたメモ
## 概要
[前回はS3をローカルで立ち上げた。](https://qiita.com/hibohiboo/items/e81573744466343aec2c)
今回は、[ローカル環境でLambda+S3のテストをする](https://qiita.com/billthelizard/items/22d2457f3d6386d21796)を参考に、リファクタリングをしてテストを行う。[ソースコード](https://github.com/hibohiboo/develop/tree/481815420c60a0933e51483ded6ed53d1da64c03/tutorial/lesson/aws/typescript/projects/cdk_sample)
## 構造
“`
src
– lambda
– handlers
– s3-sample.ts
– service
– s3-sample.ts
test
– fixture
– s3
– message.txt
– lambda
–
Slackへ勤怠連絡を入力するAlexaスキルを作ってみた
# 概要
弊社は出勤や休憩などの勤怠連絡をSlackのチャンネルへのメッセージ送信で行っています
毎日何度も行うことなので手入力は結構面倒です
そこで、最近我が家にやってきたAmazon Echo Showに話しかけて勤怠連絡を行えるAlexaスキルを作りました!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413932/9ec76584-08da-ed4f-8139-d3a2a473f531.png)ちなみに、Echo Showが無くてもスマホのAlexaアプリでAlexaスキルを実行することはできます
音声入力で色々なものを操作するのは魔法感があって楽しいのでAlexaスキル開発はおすすめです!# システム構成
![勤怠入力スキル構成図 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413932/0b8214ed-9921-5472-d822-715873c51e29.jpeg)
Lambda@Edge とは
## 勉強前イメージ
lambda関係してそうだけど、Edgeがわからん
## 調査
### Lambda@Edge とは
cloudfrontのエッジロケーションからコードを実行するLambda関数のことで、
ユーザに近い場所でコードが実行されるので高速なコンテンツ配信が可能になる仕組みです。
コードをLambdaにアップロードするだけで自動的にコードの実行やスケーリングが行われます。
ですので、Lambda@Edgeは Lambdaとcloudfrontから成り立ちます### メリット
– 低レイテンシーのコンテンツを配信
ユーザに近いロケーションからコードを実行するので
低レイテンシーの配信が出来ます– サーバ管理が不要
オリジンサーバを複数のロケーションでプロビジョニング・拡張・管理することもなく、自動的にスケールします。
オリジンで実行しているアプリケーションに何も変更を加えることなく追加できます。### 指定できるcloufrontイベント
cloudfrontには4つの流れがあり、
それぞれ1つのリクエストに対して一意のlambdaのコードを割
AWS SAM を用いて Hello World アプリケーションをデプロイしてみる
AWS SAM を使ってみたいので、API Gateway 経由で Hello World メッセージを表示する Lambda を呼び出すアプリケーションを SAM でデプロイしてみます。
# 前提条件
– AWS アカウントの作成
– Docker のインストール
– AWS SAM CLI のインストール
– “sam –version” と叩いてバージョンが表示されれば OK# サンプルアプリケーションのダウンロード
sam コマンド経由でサンプルとしてダウンロードできるアプリケーションがあるので、ダウンロードしていきます。
まずは下記のコマンドを入力します。“`
$ sam init
“`途中でテンプレートソース、パッケージタイム、ランタイムを選択していきます。
プロジェクト名は任意の名前で問題ありません。
ここでは「hello-sam」としています。“`
$ sam init
Which template source would you like to use?
1 – AWS Quick Start Te
Chalice で Lambda Layer を利用する
# 問題点
Chalice で1つの `app.py` 内に以下のようなコードを書いた場合、API Gateway用の Lambda関数 と 定期実行用の2つの Lambda 関数が作成される。 デフォルトの設定だと `requirements.txt` で指定するすべてのライブラリを各 Lambda 関数内に展開してアップロードするので、2つの Lambda のコードサイズが大きくなる。
“`python:app.py
@app.route(‘/’)
def index():
pass@app.schedule(‘rate(5 minutes)’)
def cron(event):
pass
“`こういった場合には共通ライブラリの配置場所として Lambda Layer を利用できるのだが、昔ドキュメントを読んだときに読み落としていたのか chalice ではまだサポートされていないと思い込んでいた。 改めて調べると、ちゃんと Layer を使うことができたので、そのやり方を示す。
# 対象コードとバージョン
今回は以下のような cryptog
AWS Lambdaで関数作ってAPIGatewayで公開するまでの学習
# 本記事でやること
![スクリーンショット_2021-03-28_17_22_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113504/ea799a62-b7d4-6169-cea7-f51db4cba365.png)
適当なJSONを返す
# 前提
[AWSのアカウント作成後のAdminのIAMユーザー作成](https://qiita.com/Teach/items/8212c06dc9f4a2546800)# Lambdaのスタート
## Lambdaとは?
サーバー管理せずにコードが実行できるサービス## コスト
コード実行していない間は無料
https://aws.amazon.com/jp/lambda/pricing/永久無料枠アリ
## イベント
S3、DynamoDBの変更をトリガーにして発火できる## 学び方
https://docs.aws.amazon.com/lambda/latest/dg/welcome.html#welcome-first
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://qiita.com/hibohiboo/items/4e5fd8c723e0f70c12b1)。[ソースコード](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
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