エンジニアのブログ

最近クラウドを触りはじめたエンジニアのブログ

VS Codeでラムダのコードを書く(実行編)

やったこと(続き)

SAMプロジェクトの作成
  1. コマンドパレットより「Create New Sam Application」を実行
  2. 「Select a SAM Application Runtime」:python3.7
  3. 「Select a workspace folder for your new project」:作業ディレクトリを指定する
  4. 「Enter a name for your new application」:sam-project


「Create New Sam Application」でエラーが起きる場合

Create New Sam Applicationが動作せず、下記のエラーログが表示されることがある。

[ERROR]: An error occurred while creating a new SAM Application. Check the logs for more information by running the "View AWS Toolkit Logs" command from the Command Palette.
[ERROR]: Error: SAM CLI was not found

自分の場合は、AWS Toolkitを再インストールすることで動作するようになった。
コマンドラインから実施することも可能(参考リンクの番外編を参照)

SAMプロジェクトのローカル実行用にDockerインストール

SAMプロジェクトのローカル実行用にDockerをインストールする。
※下記の記載もあるのでインストールしなくても問題ない。

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install-mac.html

Dockerは、アプリケーションをローカルでテストし、--use-containerフラグを使用して展開パッケージを構築するための前提条件です。 これらの機能を最初に使用する予定がない場合は、このセクションをスキップするか、Dockerを後でインストールできます。"

インストールする場合は、下記手順を実施する。

  1. Dockerのイメージファイルをダウンロード
  2. Dockerをインストール
  3. ファイル共有設定より、プロジェクトフォルダを指定 (デフォルトで「/Users」等が共有フォルダ設定されているので、その配下にある場合は設定不要)
  4. docker psを実行して、エラーにならないことを確認


SAMプロジェクトのローカル実行

「sam local invoke」より、ローカルでラムダを実行する。

$ sam local invoke
Invoking app.lambda_handler (python3.7)

Fetching lambci/lambda:python3.7 Docker container image.......(省略)
Mounting /Users/xxxxx/local-repo/sam-project/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Version: $LATEST
END RequestId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
REPORT RequestId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  Init Duration: 187.25 ms        Duration: 3.98 ms       Billed Duration: 100 ms Memory Size: 128 MB     Max Memory Used: 23 MB

{"statusCode":200,"body":"{\"message\": \"hello world\"}"}

初回実行時はDockerコンテナイメージがダウンロードされてから実行されるが、2回目以降はダウンロード処理が省略される。

VS Codeでラムダのコードを書く(準備編)

やりたいこと

AWSのラムダを使ったプログラムを書きたい。
boto3などを使ってS3上のファイルを操作したい。
VS Code上で開発したい。

事前準備

python3系、pipをインストール(別記事を参照)
boto3をインストール

$ pip install boto3


参考サイト

[AWS]VSCodeでSAM(Lambda)のHelloWorldを5分で行う - Qiita
AWS CLIで使える認証情報とオプションの設定方法まとめ | Developers.IO

やったこと

awscli、aws-sam-cliのインストール
$ pip install awscli
$ pip install aws-sam-cli


awscliを使うためのアクセスキーの作成
  1. AWSのマネジメントコンソールへログイン
  2. IAM->アクセス管理 -> ユーザへとページ移動
  3. ユーザ一覧が表示されるので、awscliからアクセスさせたいユーザを選択
  4. 概要ページが表示されるので、認証情報タブから「アクセスキーの作成」をクリック
  5. 「アクセスキーの作成」ダイアログが表示されるので、「.csvファイルのダウンロード」をクリック(※)

※シークレットキーは、このタイミングでしか表示・ダウロードできないのでダウンロードしておくとよい。

アクセスキーとシークレットキーの設定

aws configureよりアクセスキーとシークレットキーを設定

$ aws configure
AWS Access Key ID [None]: ダウンロードしたcsvファイルに記載されているアクセスキーを入力
AWS Secret Access Key [None]: ダウンロードしたcsvファイルに記載されているシークレットキーを入力 
Default region name [None]: 
Default output format [None]: 

aws configure listより、設定内容(使われている認証情報)を確認

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************XXXX shared-credentials-file    
secret_key     ****************XXXX shared-credentials-file    
    region                <not set>             None    None

適当なコマンドを入力して、AWSに接続できていることを確認

$ aws iam get-user
{
    "User": {
        "Path": XXXX
        "UserName": "XXXX",
        "UserId": "XXXX",
        "Arn": "arn:aws:iam::XXXX:XXXX/XXXX",
        "CreateDate": "XXXX",
        "PasswordLastUsed": "XXXX"
    }
}


AWS Toolkitをインストール
  1. VS Codeマーケットプレイスより、AWS Toolkit をインストール
  2. インストールが終わると、サイドメニューにawsのアイコンが追加される
  3. コマンドパレット(Ctrl+Shift+P)より「Connect to AWS」を実行
  4. 「Select a credential profile」はdefaultを選択
  5. 「Select a region」はAsiaPasific(Tokyo)を選択
  6. 接続されると「AWS:EXPROLER」にCloudFormationやLambdaの一覧が表示される(何も作成していなければ空欄)

Gitの操作練習(ブランチ作成編)

前提

SourceTreeを利用する
初期コミット・初期プッシュを行うと作成される下記のリポジトリが存在すること

  • リモートリポジトリのマスターブランチ(origin.master)
  • ローカルリポジトリのマスターブランチ(master)


やりたいこと

リモート、ローカルのリポジトリに対して、
マスターブランチから派生する作業用のブランチ(branch-a)を作成する

作業内容

ローカルリポジトリに新規ブランチを作成
  1. マスターブランチ上のコミットから、新規ブランチを作りたい地点(コミット)を選択
  2. 右クリックメニューより「ブランチ…」を選択
  3. ダイアログが表示されるので、新規ブランチの名前欄(空欄)に「branch-a」を入力し、「ブランチを作成」ボタンをクリック(※)

 ※ダイアログには「作業コピーの親」と「指定したコミット」を選べるラジオボタンがあり、後者が選択されているので変更しないでおく。「作業コピーの親」を選んだ場合にどうなるのかは確認していない。


リモートリポジトリに新規ブランチを作成
  1. ローカルリポジトリの新規ブランチをクリックし、作業用のブランチとして選択
  2. プッシュボタンをクリック(※)
  3. ダイアログが表示されるので、チェックが付いている行のリモートブランチの名前欄(空欄)に「branch-a」を入力し、OKボタンをクリック

 ※ローカルの新規ブランチに対して変更内容をコミットした後にプッシュするやり方でも問題ない。


その他

SourceTreeでのやり方を書いたが、他のツールでも作業順は同じはず。
スタッシュ・マージの方法や注意点についても書きたい。

Python3に変更できずにはまった話

状況

Homebrewでpythonの3系をインストールしたが、ターミナル上でpythonコマンドを実行してもなぜか2系が起動されてしまう。

$ python
Python 2.7.16 (default, Oct 16 2019, 00:34:56) 


実行パス、環境変数(PATH)、Python3のインストール先を確認したところ、次のとおりだった。

$ which python
/usr/bin/python

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

$ ll /usr/local/bin/python*
lrwxr-xr-x  1 user  admin  34 12 21 18:32 /usr/local/bin/python3 -> ../Cellar/python/3.7.5/bin/python3


理由

最後のコマンドを実行してもしやと思い、別のコマンドを実行したところpython3が起動された。 そう単に"python3"としてコマンドが登録されていた(正確には"python3"として別名が登録されていた)

$ python3
Python 3.7.5 (default, Nov  1 2019, 02:16:32) 


pyenvのインストール

pythonコマンドで実行されるPythonのバージョンを簡単に切り替えできるようにしたいので、pyenvをインストールすることに。
(参考:pyenvにより、pythonのバージョンを変更する - Qiita

$ brew install pyenv
・・・
Installed Python-3.7.5 to /Users/xxxxx/.pyenv/versions/3.7.5

$ pyenv versions
* system (set by /Users/xxxxx/.pyenv/version)
  3.7.5

$ pyenv global 3.7.5
$ python --version
Python 2.7.16

$ eval "$(pyenv init -)"
$ python --version
Python 3.7.5

$ which python
/Users/xxxxx/.pyenv/shims/python


.bash_profileには下記を追加する。これを記載しておかないと、ターミナルを再度起動してpythonコマンドを実行した場合に2系が起動してしまう。

<<.bash_profile>>
# pyenv
eval "$(pyenv init -)"


また、上記の対応後、pipも使えるようになった。

$ pip -V
pip 19.3.1 from /Users/xxxxx/.pyenv/versions/3.7.5/lib/python3.7/site-packages/pip (python 3.7)
$ pip --version

VS CodeでGit を使う際のメモ

マーケットプレイスから拡張機能をインストール

VS Codeには標準でGitを使うためのメニューが用意されているが、できない機能があったり、表示内容が少なかったりと若干不便なことがある。なので、次の拡張機能をインストールした。

GitLens

マージができたり、ブランチ等がツリー表示されたりと高機能なツール。

変更の破棄は、VS Code標準のGitの方がやりやすい。

f:id:takyac:20191221173404p:plain 

GitHistory

コミットログの検索、コミット・ブランチの状況を視覚化できるツール。下は練習用にブランチを作ったり、コミットをした時の表示。

f:id:takyac:20191221173025j:plain

※コマンドパレット(Command + Shift + P)で"gitlog"と入力して表示する。

新しいプロジェクトに配属されたらやること

新しいプロジェクトに配属された時に、どんなことをしていたか振り返ってみる。

 

①システム全体像を知る

・どんな技術が使われているか

・自分の知らない技術はあるか

・構成は単純か複雑か

 

②各種ドキュメントを流し読みする

・各工程の成果物にどんなものがあるのか

・業務やシステムの理解に役立そうなものがあるか

・直近で困ってることのヒントや解決の糸口になりそうなものがあるか

 

③関係者を把握する

・お客様はだれか

・お客様のどの部署・部門が関わるか

・他のベンダーはいるか

・対立やトラブルは起きているか

 

どういう立場で入るかによって何を重視するかは変わる。実装をメインでやる場合は①、保守や顧客との調整などをやる場合は③と言った感じ。

最近やってたこと(2019年3月〜2019年10月)

久しぶりの投稿。一時期、別のブログに記事を書いていたけど、今後はこちらに記載することにした。


まずはここ半年くらいやっていたことを整理してみる。買ったはいいけど積読状態になってたり、どういう経緯で買ったかを忘れてしまったりする本があったりして、やるべきことが少しぶれているかなという印象。

 

3〜4月

転職活動

情報処理技術者試験データベーススペシャリスト)を受験→不合格(午後2)

 

5〜6月

転職活動(内定頂く)

読んだ本

AWS認定ソリューションアーキテクト

・インフラエンジニアの教科書2

 

7〜8月

読んだ本

・要件定義のセオリー

購入した本

・ネットワークはなぜつながるのか 第2版

・マスタリングTCP/IP 入門編 第5版

・はじめて読む486

・486、CPUの創り方流

・岩波講座 ソフトウェア科学〈〔環境〕6〉オペレーティングシステム

情報処理技術者試験(情報処理安全確保支援士)の勉強

 

9〜10月

読んだ本

・システム設計のセオリー

購入した本

アジャイルサムライ

・はじめての上流工程をやり抜くための本

・業務システムのための上流工程入門

Udemy講座を購入

・これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座

 転職・新しい職場へ(10月1日〜)

 

今後やること

新しい職場で必要とされている知識・スキルを重点に学習

・これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座

アジャイルサムライ