Open12
AWS関連
cloudshellでaws sdk v2の最新バージョンをインストール。ジップ化
mkdir -p aws-sdk-layer/nodejs
cd aws-sdk-layer/nodejs
npm install aws-sdk
zip -r ../package.zip ../
cd ..
aws s3 cp package.zip s3://mybucket/
LambdaコンソールでLambdaレイヤを作成
参考
s3のオブジェクトをワイルドカードで一括削除
金かかってるからどうにかしろとの事で、S3オブジェクトの中を整理。
aws s3 rm s3://bucket-name/dir-name/ --exclude '*' --include '*文字列*' --recursive --dryrun
--exclude '*'
は全てではない、という意味
--recursive
は再帰的
--dryrun
は 予行演習的なニュアンス。実際削除せず、削除対象のオブジェクトを表示するだけ。
dryrunで確認してOKであれば、dryrunを削除して再実行。
参考:
S3の合計サイズ確認
aws s3 ls s3://bucket-name/dir-name/ --recursive --human --sum
AWS CLI SNS
タグの書き方に等に苦戦したので、メモ。
別リージョンを指定して、作成可能
これをCloudShellで実行
SNSトピック作成
aws sns create-topic --name nakam-test-1 --region us-east-1 --tags Key=Name,Value=nakam-test-1 Key=Group,Value=nakam-test-1 Key=Service,Value=dev-nakam
サブスクライブ
aws sns subscribe --region us-east-1 --topic-arn arn:aws:sns:us-east-2:999999999999:nakam-test-1 --protocol sqs --notification-endpoint arn:aws:sqs:us-east-1:999999999999:nakam-test-1-sqs
lambdaリスト(詳細付き)を取得する
削除したいLambdaサービスロール用のIAMロールが他のLambdaで使われていないか確認する為に、コレを使った。
aws lambda list-functions --region ap-northeast-1 > lambda-list-ap-northeast-1.json
※ 取得結果については、後程追記する
LambdaからSNS送信する時
共通部品みたいな感じで使えるゾ
import boto3
sns_client = boto3.client('sns')
def publish_sns(params):
try:
print('function publish sns')
response = sns_client.publish(
TopicArn = params['TopicArn'],
Subject = params['Subject'],
Message = params['Message']
)
except Exception as e:
raise e
AWSコマンド(jqあり)
先輩に教えてもらった書き方
jqオプション?を使って必要な情報だけ抜き出す。 こーいうの覚えていきたい
aws autoscaling describe-auto-scaling-groups | jq '.AutoScalingGroups[] | [(.AutoScalingGroupName), (.Tags[] | select(.Key == "Name").Value), (.Tags[] | select(.Key == "Service").Value)]'
S3からCloudFront連携
やりたい事
CloudFrontを触った経験がほぼないので、そろそろやらんとやばい。
S3にホスティングしたhtmlをCloudFrontに連携する
S3バケット作成
- ACLを有効にする
- オブジェクト所有者 = 希望するバケット所有者
- 「パブリックアクセスを全てブロック」のチェックを外す
※ほんまにええんか?的な確認にチェックを入れる。
バケット設定
- 「プロパティ」タブの一番下、「静的ウェブサイトホスティング」を編集する
- ホスティングタイプ = 静的ウェブサイトをホストする
- インデックスドキュメント = index.html
- エラードキュメント = error.html
S3へオブジェクトをアップロード
- バケット直下に index.htmlとerror.htmlをアップロードする
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>中村 S3 CloudFront連携</h1>
</body>
</html>
error.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>エラー S3 CloudFront</h1>
</body>
</html>
S3オブジェクトを公開する
- index.htmlとerror.htmlをチェック
- 「アクション」から「ACLを使用して公開する」
S3バケットポリシー設定
- 「アクセス許可」タブを開き、「バケットポリシー」の「編集」をクリック
- バケットポリシーを編集
bucketPolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadForGetBucketObjects",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[bucket-name]/*"
}
]
}
lambda環境変数がめっちゃ多い時
cloudshellからコマンドで入れちゃった方が楽かもね
aws lambda update-function-configuration \
--function-name my-function \
--environment Variables='{nakamkey1="nakamval1",nakamkey2="nakamval2"}'
参考