執筆環境(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認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
「JAWS-UG DE&I AWS re:Invent 2024 recap サーバーレス ハンズオン」でサポーターしてきました
JAWS-UG DE&I開催の「AWS re:Invent 2024 r …
-
-
AWS WAFの個別ルールを設定する
Web ACLを選択して、[Add my own rules and rule …
-
-
Amazon Route 53プライベートホストゾーン設定
Amazon Route 53プライベートホストゾーンを作成してみました。 Ro …
-
-
AWS IAMのMFA「エンティティは既に存在しています」に対応しました
エンティティは既に存在しています MFA Device entity at th …
-
-
JAWS DAYS 2018 「Cost-Driven AWS クラウドアーキテクチャデザインとコスト最適化方法 – Cost-Driven AWS Cloud Architecture Design : The Lean Startup on AWS」を聞きました
以下は、思ったことや気になったことをメモしていますので、必ずしも登壇者の発表内容 …
-
-
AWS Transform Webアプリケーションを有効化してみた
AWS Migration Hubが2025/11/7に新規お客様への提供が終了 …
-
-
Amazon VPCでIPv6を使用する
VPCのIPv6を設定してみました。 設定 [Amazon 提供の IPv6 C …
-
-
WordPress、プラグインのアップデートしてBlue/Greenデプロイ
現在のブログの構成です。 WordPressとプラグインのアップデートをして、デ …
-
-
AWS CloudFormationでAmazon DynamoDBテーブルを作ってアイテムを追加する
デモ用にDynamoDBテーブルを作って消して、ということをたまにするので、Cl …
-
-
AWS EC2 Amazon Linux にEC-CUBE3をnginx+MySql環境へインストール(手順検証中)
EC2インスタンスを作成する 少し古い記事で恐縮ですが試したい事があるのでAWS …
- PREV
- ブログのアーキテクチャをコストベースで見直しました
- NEXT
- AWS DeepLens開封の儀










