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
関連記事
-  
            
              - 
      
AWS Lambda KMSを使って環境変数を暗号化、復号化する(Python)
Lambda内で外部APIを使用する場合などをユースケースとして、環境変数をKM …
 
-  
            
              - 
      
Systems Manager パブリックパラメータCLIでAWSのサービス数を出力してみました(2020/5/26)
先日のAWSのサービス数を数えてみました(2020/5/23)を見られて、お師匠 …
 
-  
            
              - 
      
JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo 2016 アップデート追っかけ会
「JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo …
 
-  
            
              - 
      
CUSTOMINEを使ってkintoneからAWS Lambdaを実行する(Cognito認証付き)
先日の記事「kintoneのカスタマイズ開発を超速にするCUSTOMINE」で書 …
 
-  
            
              - 
      
AWS Lambda(Python)からZoom投票作成
以前、Zoomの投票(アンケート)をAPI経由で作成するというブログで書きました …
 
-  
            
              - 
      
AWS CLIを使用せずにCodeCommitへSSHユーザーで接続する
AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …
 
-  
            
              - 
      
Rocket.ChatのOutGoingWebhookからのAPI GatewayからのDynamoDB
少し前に、Rocket.ChatからOut Going Webhookを設定して …
 
-  
            
              - 
      
RDSインスタンスのストレージをgp2からgp3に変更しました
2022/11/9にRDSでgp3ボリュームが使用できるようになりました。 Am …
 
-  
            
              - 
      
Organizations組織でAWS SSOを有効にする
先日AWS Control Towerで環境を作ったら、自動でAWS SSOがで …
 
-  
            
              - 
      
Amazon Linux にnodejsとmongoDBをインストールする
EPEL リポジトリを利用してnodejsとnpmをインストールする [bash …
 













