執筆環境(PyCharm, CodeCommit, CodePipeline, S3, Lambda, 署名付きURL)
2020/01/09
2018年から、年に1回ぐらい商業本の執筆をさせていただいております。
2020年は薄い本にもチャレンジしたいです。
今利用している執筆環境を記録しておきます。
アーキテクチャはこちらです。
- フォーマットはマークダウンです。
- MacbookにインストールしたPyCharmで書いてコミットします。
- リポジトリはCodeCommitです。
- コミットされるとCodePipelineがzipにしてS3バケットに格納します。
- S3バケットにzipが格納されるとLambdaが署名付きURLを生成してSNSトピックにパブリッシュします。
- サブスクライバーのEメールに署名付きURLが送信されます。
目次
CodePipeline
[パイプラインの作成]からはじめました。
パイプライン名を任意で設定しました。
IAMロールは新規で自動作成しました。
アーティファクトストアは、ダウンロード用ファイルが作成されるバケットを指定しました。
ソースは今回の書籍執筆用に作成していたCodeCommitのリポジトリ、ブランチを指定しました。
イベントはCloudWatch Eventsにしました。
ビルドステージはビルドステージをスキップから、スキップしました。
デプロイステージには、今回用に作成したバケットを指定しました。
以上で設定は完了しました。
内容を確認して作成完了しました。
CloudWatch Eventsを確認すると、ルールとイベントが作成されていました。
IAMロールは次のポリシーがアタッチされたロールが作成されていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:ap-northeast-1:12345678012:aws-linux" ] } ] } |
信頼ポリシーはこちらでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } |
署名付きURL生成
今回は、編集者さんにダウンロードしてもらうための署名付きURLを生成したいです。
有効期限としては、1週間欲しいです。
ですので、IAMロールを使用した場合は6時間なので、使用できません。
専用のIAMユーザーを作成しました。
Amazon S3 バケットの署名付き URL が、指定した有効期限より前に失効するのはなぜでしょうか?
IAMユーザーはマネジメントコンソールからログインする必要はありませんので、コンソールのパスワードは[無効]にしました。
ポリシーはインラインポリシーで、該当のS3オブジェクトキーに、GetObjectできるだけの権限です。
アクセスキーを発行しました。
SNSトピックを作成して、サブスクライバーには自分のEmailを設定しました。
Lambda
イベントトリガーはS3のプレフィックスとサフィックス指定で、イベントタイプはObjectCreatedです。
ランタイムはPython3.6です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import json import urllib import boto3 import os accesskey = os.environ.get('accesskey', '') secret = os.environ.get('secret', '') s3_client = boto3.client( 's3', aws_access_key_id=accesskey, aws_secret_access_key=secret ) def lambda_handler(event, context): print(event) bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key']) presigned_url = s3_client.generate_presigned_url( ClientMethod = 'get_object', Params = { 'Bucket' : bucket, 'Key' : key }, ExpiresIn = 604800, HttpMethod = 'GET' ) sns = boto3.client('sns') topic = 'yamashita-mail' snsTopicArn = [t['TopicArn'] for t in sns.list_topics()['Topics'] if t['TopicArn'].lower().endswith(':' + topic.lower())][0] sns.publish( TopicArn=snsTopicArn, Message=presigned_url, Subject='aws-linux presinedurl', MessageStructure='raw' ) |
環境変数に、accesskeyとsecretを設定して完了です。
実行結果
Pycharmのターミナルからコミットしてみました。
CodePipelineが動き始めました。
成功で完了しました。
メールでもちゃんと署名付きURLが届きました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
AWS DeepLens開封の儀
去年(2019年)7月にamazon.co.jpでDeepLens買えますやんっ …
-
-
AWS 認定クラウドプラクティショナーのサンプル問題
AWS認定クラウドプラクティショナのサンプル問題2018年9月25日現在で、英語 …
-
-
Amazon Keyspacesのキースペースを作成してみました
Amazon Keyspaces(Apache Cassandra互換のマネージ …
-
-
RDSリザーブドDBインスタンスを購入しました
リザーブドインスタンス推奨事項を確認したで確認した結果、購入したほうがよさそうで …
-
-
S3をトリガーにしたときのLambdaのリソースベースポリシー
LambdaのトリガーでS3を設定したとき、自動的にLambdaのリソースベース …
-
-
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー」執筆裏話
今日2019/4/20発売となりました「AWS認定資格試験テキスト AWS認定ク …
-
-
Rocket.ChatをAmazon EC2 Ubuntuサーバーで起動
こちらRocket.Chatを1行でAWS上に導入を参照させていただきました。 …
-
-
Amazon CloudWatch RUMはじめました
新機能 – Amazon CloudWatch RUM をご紹介 2021年12 …
-
-
ヤマムギvol.27 Amazon Route 53プライベートホストゾーンとリゾルバーのデモをしました
今日は『AWS認定資格試験テキスト&問題集AWS認定ソリューションアーキ …
-
-
AWS CodeCommit 認証情報ヘルパーをmacOSに設定しました
AWS CLI 認証情報ヘルパーを使用して Linux, macOS, or U …
- PREV
- ブログのアーキテクチャをコストベースで見直しました
- NEXT
- AWS DeepLens開封の儀