- 1. LambdaでSlack通知してみる
- 2. EC2にSSHコマンドで接続した際、Permission denied (publickey,gssapi-keyex,gssapi-with-mic).が出た場合
- 3. Step Functionsで作成する、人による処理が介在するワークフロー(その1)
- 4. AWSの10分間チュートリアルをやってみる 8.Deploy and Monitor an Application from the Command Line
- 5. Terraformでmoduleを使ってみる。
- 6. RubyでS3内の5GB以上のファイルをコピーする
- 7. Serverless Frameworkを使ったLambda+Pythonのローカル開発環境を構築
- 8. python3でAPIをコールする。
- 9. EC2概要
- 10. CognitoにSDKやAWSCLI無しでアクセスする(curlなど)
- 11. AWSにおけるサーバ構築手順メモ
- 12. AWSCLI Version2 実行環境
- 13. AWS CDKで既存VPCと既存Subnetを名指しで使う
- 14. Cloudformationでcognitoを作ったときにハマったメモ
- 15. Cognitoのトークンと有効期限について
- 16. AWS GuarDutyでS3バケットへのログ保存について
- 17. Slack の Events API でドはまりした件(message.groups と message.channnels の違い)
- 18. AWS学習 〜EC2(Elastic Compute Cloud)学習メモ〜
- 19. AWS SageMaker Studioに含まれる個別機能を一通り触ってみた
- 20. S3 で SPA をホスティングするとき、アクセスする URL が 404 のときに index.html を返す方法
LambdaでSlack通知してみる
## やること
[PowerShellでSlack通知してみる](https://qiita.com/zgw426/items/738793e2e426f52d7d42)の続き、AWS Lambdaで通知してみる
## 前提
AWSアカウントとSlackアプリの`Incoming Webhook URL`を取得していることが前提で始めます。
—
## IAMロール作成
Lambda実行に必要な権限(IAMロール)を作成します。
必要なポリシーを選択します。今回はLambdaが動けばいいので、`AWSLambdaBasicExecutionRole`を選択しました。
EC2にSSHコマンドで接続した際、Permission denied (publickey,gssapi-keyex,gssapi-with-mic).が出た場合
AWS学習中、上記エラーにぶつかったので備忘のために残す。
“`
ssh -i ***.pem ec2-user@IPアドレス
“`
このコマンドを入力すると、“`
Warning: Identity file ***.pem not accessible: No such file or directory.
ec2-user@IPアドレス: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
“`このエラー。
[EC2へのSSH接続でPermission denied (publickey). が出たとき](https://qiita.com/aroundFifty/items/0896d6b7b0b3e2987035)を参照し、コマンド入力するも同様のエラーが続く。
試行錯誤していると、***.pemへのパスが間違っていることに気づく・・・。
“`
ssh -i Desktop/***.pem ec2-user@IPアドレス
“`
これで無事解決!“`
@@@@@@@@
Step Functionsで作成する、人による処理が介在するワークフロー(その1)
#はじめに
Step Functionsで(以下SF)、**人による処理が介在する**ワークフローをどう実現するのか。
免許証画像による年令確認フローをネタに検証したので要点をメモ。
(検証したのは2017年末ぐらいなのですが。笑)#重要なポイント
1. 非同期処理は**アクティビティ**で実現する。アクティビティは人による処理をアクティビティとして定義する。このアクティビティは特定のSFに属さない独立したものである。
2. Stateの定義で、Typeは**Task**、ResourceはアクティビティのARNにする。この時、非同期処理に渡したいインプットをInputPathを用いて整える。
3. アクティビティのARNを指定して、処理が必要なアクティビティをポーリングする。ロングポーリングなので要件次第ではコストがかさむので、必要に応じてコールバックパターン等を用いた処理を検討する。
4. ポーリングで処理対象のアクティビティがあると、”input”と”taskToken”が返ってくる。
5. アクティビティで渡すinputに渡していなくても、後続のStateに前のStateか
AWSの10分間チュートリアルをやってみる 8.Deploy and Monitor an Application from the Command Line
こんにちは。トリドリといいます。
新卒で入社した会社でJavaを数年やった後、1年ほど前に転職してからはRailsを中心に使用してアプリケーションの開発をしているしがないエンジニアです。今回、AWSの勉強をするために公式の10分間チュートリアルをやってみることにしたので、備忘のために記事に残していこうと思います。
AWSに関しては、1年ほど前転職活動をしていた時期にEC2とRDSを少し触っていた以外ほとんど触ったことが無い初心者です。
(ただし、このときにアカウントを作ったので、12ヶ月の無料枠は切れていました)[前回](https://qiita.com/toridori111/items/bdde6e868863ba4c8193)は、Elastic BeanstalkをCLIで使用するためのユーザーの作成やCLIのインストールを行う、「Set up the Elastic Beanstalk Command Line Interface」というチュートリアルをやりました
今回は、その続きで実際にElastic Beanstalkを操作する、「Deploy and Monit
Terraformでmoduleを使ってみる。
Terraformにはモジュールで処理を使いまわせる機能がありますが
IaC初心者には理解が難しかったので備忘録がてらメモです。https://www.terraform.io/docs/configuration/modules.html
#ディレクトリ構造
“`
work/
├── module
│ └── ec2_module.tf
└── test.tf
“`#ec2_module.tf
モジュールの中身
“`tf
##########################################################
///moduleでリソースを作成するときに指定する変数
##########################################################
variable “ami_id” {}
variable “instance_type” {}
variable “tags_name” {}#####################################################
RubyでS3内の5GB以上のファイルをコピーする
S3で5GB以上のファイルをコピーするには、普通のコピーでは出来ずMultipart Copyを使う必要があります。
RailsサーバからS3内の5GB以上のファイルを同じS3内にコピーする記事が無かったのでやり方を書きます。# gemのインストール
“`
gem ‘aws-sdk’
“`# コピー処理
Aws::S3::Resourceのcopy_toを使用します。
Aws::S3::Clientのcopy_objectだと恐らくMultipart Copyが出来ません。“`
s3 = Aws::S3::Resource.new(
region: ‘reagion_name’,
access_key_id: ‘access_key’,
secret_access_key: ‘secret_key’,
)
bucket = s3.bucket(‘bucket_name’)
object = bucket.object(“src/file”) # コピー元のobject key
object.copy_to(bucket: ‘
Serverless Frameworkを使ったLambda+Pythonのローカル開発環境を構築
Windows上にServerless Frameworkを使ったLambda+Pythonのローカル開発環境を構築した時のメモ。実際にAWSにデプロイせずにローカルで単体テストまでできる環境を構築します。
# Pythonのインストール
[本家のWindows用ダウンロードサイト](https://www.python.org/downloads/windows/)から最新版(執筆時点では[3.8.1](https://www.python.org/ftp/python/3.8.1/python-3.8.1-amd64.exe))をダウンロードし、実行する。最初の画面で「Add Python 3.8 to PATH」にチェックを入れて「Install Now」で標準インストールする。最後の画面で「Disable path length limit」をクリックして、パス文字列長の制限を解除しておく。
“`
>python –version
Python 3.8.1
“`
バージョンが正しく表示されればOK。# pipenvのインストール
Pythonのパッケージ管理シ
python3でAPIをコールする。
pythonの`urllib.request`モジュールを用いてAPIをコールするメモ。
# 下準備
* 適当なlambdaとAPI Gatewayを用意。
lambdaは受け取った`event`を返却するようにする。
“`python
import jsondef lambda_handler(event, context):
return {
‘statusCode’: 200,
‘body’: event
}
“`API Gatewayでは各種メソッド(GET、POST、PUT)を用意。
* メソッドリクエスト → APIキーの必要性`true`に指定。
* 統合リクエスト → lambda関数を指定。[APIのデプロイ]を実行し、URIを取得。(API Gatewayで何かの更新をしたのなら都度デプロイすること!でないと反映されない。←めっちゃこれハマる。)
[使用量プラン]から[作成]を選び、APIステージを選択、レート・バースト・クォータを設定、APIキーを作成する。
# 本題のAPIを叩くlam
EC2概要
# EC2の構成要素
| 役割 | AWS |
|:————|:——————|
| OS | AMI |
| CPU | インスタンスタイプ |
| Memory | インスタンスタイプ |
| SSD | EBS |
| NIC(※1) | ENI(※2) |※1.Network Interface Cardの略
※2.Elastic Network Interfaceの略## AMI
– Amazon Machine Imageの略
– EC2インスタンスが起動するための設定ファイル
– どのOSやミドルウェア、アプリをインストールするか
– どのユーザがAMIを起動できるかという設定
– EBSのボリューム設定
– 異なるリージョンにコピーすることもできる
– ひとつのAMIでEC2を何台も複製できる
– OSやアプリケーシ
CognitoにSDKやAWSCLI無しでアクセスする(curlなど)
# はじめに
AWSのAPIGatewyの認証としてLambdaAuthorizerは使用したことがありますが、Congnito認証は使用したことが無かったため試してみました。またクライアントがCognitoにアクセスする際、ググるとほとんどがSDKやAWSCLIを使用していました。AWSのサポートに「curlなどで普通にアクセスできないのか?」と質問をしたところ、以下の情報を教えて貰えました。
> Cognito UserPool へのサインイン時には、以下の InitiateAuth API が呼ばれているため、Cognito UserPool のエンドポイントに対して InitiateAuth を curl コマンドで呼び出すことで、実現すること自体は可能です。
>[InitiateAuth – Amazon Cognito Identity Provider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)
> [Am
AWSにおけるサーバ構築手順メモ
アプリケーションサーバを構築する際、いつも忘れるので
## インスタンスを立てる
AWSサービスよりEC2を選択し、左サイドバーのインスタンスを選択
* 既存のイメージからインスタンスを立てる場合は、イメージ > AMIを選択し任意のAMI上で右クリック > 起動を選択
1. インスタンスタイプの選択
2. インスタンスの設定
3. ストレージの追加
4. タグの追加
5. セキュリティグループの設定
6. 確認## ロードバランサーの作成
ロードバランサーは、クライアントにとって単一の通信先として機能し、正常な登録済みターゲットに受信トラフィックを分散左サイドバーから、ロードバランシング > ロードバランサーを選択
ロードバランサーの作成を押下
Application Load Balancerの欄で作成を押下
1. ロードバランサーの設定
2. セキュリティ設定の構成
3. セキュリティグループの設定
4. ルーティングの設定
5. ターゲットの登録
6. 確認## Route53の設定
可用性と拡張性に優れたクラウドDNSAWSのサーブルよりRoute53を選択
AWSCLI Version2 実行環境
# AWS CLI V2 リリース
AWSCLIのV2がリリースされていたので試してみました。# 環境構築
Dockerコンテナを作成して、AWS CLI V2が使用できる環境にしています。## Dockerfile作成
まずは、Dockerfile作成します。“`Dockerfile
# OS Debian GNU/Linux 10 (buster)
FROM python:latest# aws help を使用できるようにする為
RUN apt-get update && apt-get install -y \
less \
groff-base# awscli v2 インストール
RUN python -m pip install git+https://github.com/boto/botocore.git@v2
RUN python -m pip install git+https://github.com/aws/aws-cli.git@v2# jq インストール
RUN cd /bin && wget http://sted
AWS CDKで既存VPCと既存Subnetを名指しで使う
今日も元気にビルドを失敗していくスタイル。
前回、「[AWS CDKでVPC作ろうとしたら作れなかったとき](https://qiita.com/mira_cocoa/items/52adf98237af49ee604c)」ではSubnetがうまく作れなくて泣いてたじゃないですか。
今度は既存のVPCと既存のSubnetを使いたかったんですよ。本当にそれだけなんです、CloudForamtionなら三秒で出来るじゃないですか?????### やりたいこと
既存のVPCと既存のSubnetを使いたい。
### CloudForamtionで書くとき
例えばALBとセキュリティグループの設定に使う時とか、こういう感じでできるじゃないですか。
なんかこう、VpcIdとSubnetsにはそれぞれのIDをそのまま書けばさらっと設定してくれるじゃないですか。“` YAML
Resources:
SecurityGroup:
Type: “AWS::EC2::SecurityGroup”
Properties:
GroupDescription:
Cloudformationでcognitoを作ったときにハマったメモ
またくだらないことでハマったのでメモ。
今思えば、普通に頭悪い。## やりたいこと
* Cloudformation使いたい
* ALBにCognito組み合わせたい具体的には
1. ALBを叩きに来たアクセスをCognitoに飛ばしたい
2. Cognitoの認証をパスしたら、ALBの後ろにいるEC2へforwardさせたい##とりあえずyaml書く。
ALBとCognitoの連携は、`ElasticLoadBalancingV2`の`Listener`で指定。“`
(中略)
hogeALBLISTENER:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
#Certificates:
# – Certificate
DefaultActions:
– AuthenticateCognitoConfig:
UserPoolArn: “arn:aws:cognito-idp:ap-northea
Cognitoのトークンと有効期限について
# Cognitoから発行されるトークン
Cognitoからは以下3つのトークンが発行されます。## IDトークン(IDToken)
Cognito User Poolsのユーザー属性(例えばメールアドレスなど)を含めたトークンです。
ユーザーに関する情報をすべて取得したい場合に使用します。
`APIGatewayではこのトークンを使用します。`**有効期限**
ユーザーが認証した`3600秒後(1時間後)`に有効期限切れになります。## アクセストークン(AccessToken)
Cognito User Poolsの最低限のユーザー情報を含めたトークンです。**有効期限**
ユーザーが認証した`3600秒後(1時間後)`に有効期限切れになります。## 更新トークン(RefreshToken)
IDトークン、アクセストークンを更新するために利用します。
Cognito User PoolsのクライアントSDKを利用している場合は自動で更新されるようです。**有効期限**
デフォルトではアプリのユーザーがユーザープールにサインインしてから`30日後`に有効期限が
AWS GuarDutyでS3バケットへのログ保存について
覚書です。
1.AWS GuarDutyを有効にする
2.S3バケットへのログ保存のためGuarDuty画面から
[設定]-[結果のエクスポートオプション]でS3バケットを新規に作成し保存をするが
KMSが無いので失敗3.KMSキーをKMS Console画面から作成する
4.GuarDuty画面に戻って再度KMSキー(エイリアスが選択できる)を選択してほぞんするが失敗
5.KMS Console画面に戻って[カスタマー管理型のキー]で対象のエイリアスを選択し
キーポリシーエディタを編集で開く※これを実施しないとずーっとエラー{
“Sid”: “Allow GuardDuty to use the key”,
“Effect”: “Allow”,
“Principal”: {
“Service”: “guardduty.amazonaws.com”
},
“Action”: “kms:GenerateDataKey”,
“Resource”: “*”
Slack の Events API でドはまりした件(message.groups と message.channnels の違い)
# 概要
Slack の Events API をつかった Bot 開発に挑戦しました。ハマった内容をまとめます。
## Bot 仕様
Slack から LINE WORKS へメッセージを転送します。
Slack Bot が登録されているプライベートチャンネルに投稿されたメッセージを
LINE WORKS 側の Bot が受取り、特定のユーザに通知するというものです。システム構成は以下のような感じです。Bot プログラムは AWS Lambda で実装しました。
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72233/c16d5654-e73a-20b1-2980-3b78a92b5f13.png)
(なぜこんなことをしているか)
社内標準のチャットツールは LINE WORKS なのですが、私の所属する情シスグループでは slack を常用しており、特に社内システムからのアラートの通知先として活用しています。今回、とある社内組織にシステムのアラー
AWS学習 〜EC2(Elastic Compute Cloud)学習メモ〜
##EC2(Elastic Compute Cloud)とは?
AWS上に仮想サーバを作るサービス。AWSに建てるサーバーのOSはWindowsやLinux、機能面ではCPUやメモリ、プロセッサなど要件に合わせて構築できる。(種類が多すぎるので要件をどれだけ搾りこめるのかなど経験や知識が必要になりそう・・・)
EC2はサービス名で自分たちで立てたサーバことを「インスタンス」と呼ぶ。
##EBS(Elastic Block Store)
EC2とセットで使うのが基本らしい・・・。理由がコンソールからEC2の停止ボタンを押下するとデータが消えてしまうため停止させても消去されないようにEBSにデータを保存する
##インスタンスタイプについて
・インスタンスファミリーの数字は世代を表し数字が大きいほど新しい → 用途
・インスタンスサイズ → CPUのスペック・**凡庸タイプ(A、T、M)**
凡庸インスタンスは、バランスの取れたコンピューティング、メモリ、
ネットワークのリソースを提供し、多様なワークロードに使用できる。・**コンピューティング最適化タイプ( C
AWS SageMaker Studioに含まれる個別機能を一通り触ってみた
# 概要
以下を一通り触ってみた。クラスメソッドさんの解説サイトを読みながら、[AWS labs](https://github.com/awslabs/amazon-sagemaker-examples)のサンプルを写経しました。
* [Autopilot](https://dev.classmethod.jp/cloud/aws/try-amazon-sagemaker-autopilot/)
* [Experiments](https://dev.classmethod.jp/cloud/aws/yoshim-amazon-sagemaker-experiments/)
* [Model Monitoring](https://dev.classmethod.jp/cloud/aws/yoshim-amazon-sagemaker-model-monitor/)
* [SageMaker Debugger](https://dev.classmethod.jp/cloud/aws/yoshim-amazon-sagemaker-debugger-example/)※S
S3 で SPA をホスティングするとき、アクセスする URL が 404 のときに index.html を返す方法
# 概要
S3 で SPA をホスティングするときに、404のときにindex.htmlを返してくれないと正常にSPAを動かせません。
Cloud Front であればエラーコード時の返すページを設定できますが、S3のみでホスティングしたときのやり方で少しはまったので共有です。# やり方
エラードキュメントに index.html を設定すればよいだけです。