概要
過去に作成したCloud9環境のSAM CLIのバージョンが古くなっており新しいバージョンに更新したい場合があります。当記事ではその手順について記載しています。
(といっても、手順自体は下記の公式情報に書いてある内容そのままです)
SAM CLIのアップグレード手順
任意のディレクトリ上にSAM CLIのzipファイルをダウンロードして"sam-installation"ディレクトリに解凍
wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
アップデートコマンドの実行
sudo ./sam-installation/install --update
バージョン確認
sam --version
2022-03-22現在では1.41.0にアップグレードされました。
(Appendix-1)なぜこの記事を書こうと思ったか
以前作成したCloud9環境にて、下記のようなコマンドでnodejs14.xのランタイムのSAMテンプレートを作成しようとしたところ、nodejs14.xはサポートされていないというエラーになったのでアップデートしたいと思いました。
sam init --runtime nodejs14.x --name sample-nodejs
"pip install --upgrade aws-sam-cli"などと実行すればサクっと更新されてくれるだろと思いきや、期待通りに更新されてくれませんでした(エラーにはならないけど"sam --version"コマンドの結果が変わらなかった)。
"cloud9 sam cli upgrade"などでGoogle検索しても意外と前述のシンプルなアップデート手順に辿り着きづらかったので、久しぶりのQiita投稿ですし練習を兼ねて書いてみました。
(Appendix-2)そもそもCloud9とは
AWS Cloud9はブラウザ上で利用できる統合開発環境(IDE)のサービスで、AWSのサーバーレスアプリケーション開発などをすぐに開始できる環境を提供してくれます。
AWS CLI、SAM CLIやDockerなどが最初からインストールされており、ブレークポイントを設定したコードデバックも可能です。
ローカルに開発環境を用意する必要がないのでpythonやnodejsを利用してAWS Lambdaなどのスクリプトコードをちょっと書いてみたりしたい場合などに私は重宝しています。
Cloud9自体の利用料金は無料で、実行基盤とするEC2にかかる料金(インスタンス、EBSストレージなど)のみで利用できるので、環境作成時にt2.microのEC2インスタンスタイプを選択すれば、無料枠内で利用することも可能です。
私の個人的な感想では、pythonやnodejsを使ったLambdaの開発においてt2.microインスタンスタイプで不都合を感じたことはないです。
Cloud9環境上での各AWSリソースへのアクセス権限は"AWS Managed Temporary Credentials"という一時的な認証の仕組みで、Cloud9環境を作成した環境オーナーのIAMユーザーとほぼ同等の権限(IAM関連などの一部のオペレーションは制限されている)がデフォルトで利用できるようになっています。
通常、EC2インスンタンスに他サービスへのアクセス権限を設定する場合はIAMロールをインスタンスにアタッチしますが、Cloud9の環境として利用されるEC2インスタンスには、この仕組みによりロールをアタッチする必要がありません。
"AWS Managed Temporary Credentials"の利用は"Preferences > AWS Settings > Crecentials"の設定よりON/OFFを切り替えることができ、OFFにして自分でEC2インスタンスにアタッチしたIAMロールの権限で利用することも可能です。
Cloud9には一つの環境を複数ユーザーでShareして共同作業を行うことを可能にする機能があります。
しかし"AWS Managed Temporary Credentials"は前述の通り環境オーナーのIAMユーザーとほぼ同等の権限を行使できるので、たとえば管理者相当の権限を持つユーザーが作成した環境を、権限を限定された他のIAMユーザーにShareしてしまうと、共有された側が本来持っていない強力なアクセス権限をCloud9環境上では与えてしまいます。
環境をShareするのであれば相手は同じ権限を持ったIAMグループのメンバ間に限定する運用がよいかと思います。
※ 上記のような理由から、他メンバーにShareするときには下記のように警告メッセージを表示してくれます。
(メインテーマよりAppendixの方が情報量が多くなってしまいました。。。)