Open12

AWS関連

なかむら@AWSを使うなかむら@AWSを使う

s3のオブジェクトをワイルドカードで一括削除

金かかってるからどうにかしろとの事で、S3オブジェクトの中を整理。

aws s3 rm s3://bucket-name/dir-name/ --exclude '*' --include '*文字列*' --recursive --dryrun

--exclude '*' は全てではない、という意味

--recursiveは再帰的
--dryrunは 予行演習的なニュアンス。実際削除せず、削除対象のオブジェクトを表示するだけ。
dryrunで確認してOKであれば、dryrunを削除して再実行。

参考:
https://okisanjp.hatenablog.jp/entry/2016/07/04/130042

なかむら@AWSを使うなかむら@AWSを使う

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
なかむら@AWSを使うなかむら@AWSを使う

lambdaリスト(詳細付き)を取得する

削除したいLambdaサービスロール用のIAMロールが他のLambdaで使われていないか確認する為に、コレを使った。

aws lambda list-functions --region ap-northeast-1 > lambda-list-ap-northeast-1.json

※ 取得結果については、後程追記する

なかむら@AWSを使うなかむら@AWSを使う

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を使うなかむら@AWSを使う

AWSコマンド(jqあり)

先輩に教えてもらった書き方
jqオプション?を使って必要な情報だけ抜き出す。 こーいうの覚えていきたい

aws autoscaling describe-auto-scaling-groups | jq '.AutoScalingGroups[] | [(.AutoScalingGroupName), (.Tags[] | select(.Key == "Name").Value), (.Tags[] | select(.Key == "Service").Value)]'
なかむら@AWSを使うなかむら@AWSを使う

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]/*"
        }
    ]
}