AWS認定SAPの執筆開始にあたって環境を構築しました
2021/04/11
AWS認定ソリューションアーキテクトプロフェッショナル対策本の執筆開始にあたりまして、執筆環境を構築しました。
個別には過去のブログに書いてますが、改めてまとめておきます。
年に1回か2回しか行わない作業ですし、次回にはやり方を変えるかもしれませんので、自動化はしません。
- AWS Code Commitをプライベートリポジトリとして使う
- 執筆環境(PyCharm, CodeCommit, CodePipeline, S3, Lambda, 署名付きURL)
- AWS CodeCommitのリポジトリをiPhoneのWorkingCopyアプリから使う
- iPad ProのWorking CopyでAWS CodeCommitのリポジトリを使う
目次
AWS CodeCommitのリポジトリ
AWS CodeCommitで新規のリポジトリを作成しました。
このアカウントは執筆の際にいつも使っているアカウントですので、AWS Code Commitをプライベートリポジトリとして使うに記載のIAMユーザーの[AWS CodeCommitのSSHキー]はすでにセットアップ済です。
AWS CodePipelineの作成
新規のパイプラインを作成しました。
パイプライン名を指定して、IAMロールは別の本のときに作成したものを使用しました。
原稿のZipファイルの保存先は、他の本と同じS3バケットにしました。
ソースでCodeCommitのリポジトリを選択して、パイプラインのトリガーはCloudWatch Events、出力アーティファクトの形式はgitメタデータを含まないZipファイルにしました。
ビルドステージはスキップしました。
誤字脱字の自動チェックとかビルドステージで追加したいですね。
そのうちトライしてみます。
デプロイステージはAmazon S3にして、既存のバケット、オブジェクトキーを指定しました。
CloudWatch Eventsにルールが作成されていました。
AWS Lambdaのトリガー追加
LamndaのIAMロールとは別に署名付きURL作成用のIAMユーザーを作ってアクセスキーを発行しています。
理由は署名付きURLの有効期限を一週間にしたいためです。
IAMロールの場合は有効期限がLamnda関数のインスタンスが起動した際の認証情報が有効な期間のみとなり一週間もちません。
- 署名付きURL作成用IAMユーザーのIAMポリシー
追加したアーティファクトのオブエジェクトキーのプレフィックスを追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::writing-y/aws-linux/*", "arn:aws:s3:::writing-y/aws-developer-as/*", "arn:aws:s3:::writing-y/aws-atuomation-python/*", "arn:aws:s3:::writing-y/aws-sap/*" ] } ] } |
- AWS Lambdaのコード
追加変更はありません。
署名付きURL作成用のIAMユーザーのアクセスキーは環境変数を使っています。
これは、SecretsManagerでローテーション付きで保護したほうがいいですね。
そのうち改善します。
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 43 |
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' ) print(presigned_url) |
- S3トリガー
トリガーはプレフィックス単位にしていますので追加しました。
Mac、WorkingCopy(iPhone, iPad)にクローン
PyCharmをインストールしているMacでは次のコマンドを実行。
1 2 |
git clone ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-sap |
iPhone、iPadのWorkingCopyからは、アプリのClone機能を使いました。
URLは、ssh://SSHキーID@git-codecommit.リージョンコード.amazonaws.com/パス です。
例 ssh://APKAJMDDPOLPSL7OAYOA@git-codecommit.us-east-1.amazonaws.com/v1/repos/test
動作テスト
iPhoneから編集してコミット、プッシュして、パイプラインが起動して、署名付きURLが作成されることが確認できました。
さて、執筆がんばります。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
Amazon CloudWatch Syntheticsでハートビートモニタリングを実行
このブログに対してハートビートモニタリングのCanaryを実行してみました。 C …
-
Microsoft TeamsのIncoming Webhooksを使ってAWS Lambda(Python)からFeedlyの記事を自動投稿する
Microsoft Teamsの検証を始めましたので、Slackで自動化している …
-
共有AMIのコピー時にエラー「You do not have permission to access the storage of this ami」
他アカウントから共有されたAMIをコピーする際に、「You do not hav …
-
AWS SSOのパスワードリマインダーでADのパスワードを変更
AWS Managed Microsoft ADを構築してユーザー追加までで構築 …
-
S3インベントリ設定でインベントリファイルの作成を設定
インベントリレポートファイルはオブジェクトの一覧情報です。 日次、週次で定期作成 …
-
GoogleフォームからAPI Gatewayで作成したREST APIにPOSTリクエストする
「API GatewayからLambdaを介さずにSNSトピックへ送信」の続きで …
-
Amazon FSx for Lustreのユーザーガイド入門演習
ファイルシステムの作成 FSx for Lustreを選択しました。 容量やスル …
-
前からできましたっけ??CloudWatch Logsの保持設定を複数まとめて設定
AWSの個人アカウントで要らなさそうなリソースの断捨離をしてます。 CloudW …
-
Amazon Pollyを使って覚えたい資料を耳から身体に染み込ませる
Amazon Pollyを使うとソースコードを一切かかなくても、テキストを音声に …
-
VPCピア接続した先のVPCインターフェイスエンドポイントを使用する
VPC1とVPC2でピア接続しています。 VPC2にはKMSのインターフェイスエ …