skymatix Developers Blog

株式会社スカイマティクスの開発チームによるDevelopers Blogです。

Lambdaから起動したEC2インスタンスで、プロファイル名を指定してもうまく動かない場合の対処方法

システムエンジニアの椎葉です。

LambdaからEC2上でコマンド実行する場合にロール権限を使用しての実行やクロスアカウントへのアクセスが必要な場合にプロファイル名を指定して動かしたい場合があります。 EC2上でコマンドを実行するとプロファイルを参照することができ、コマンドを実行することができるのですが、Lambda上からsendCommandを使ってコマンド実行するとうまくいかない場合があります。

今回の構成はこちら

AWSアカウントA

  • Lambda
  • EC2

AWSアカウントB

  • S3
処理の流れ
  1. AWSアカウントAのLambdaからEC2を起動
  2. AWSアカウントAのLambdaからEC2にsendCommandを実行
  3. AWSアカウントBのS3からファイルを取得(ここでエラー!)
コマンド例
aws s3 cp s3://s3buket/xxxxx/xxxxx.json ./xxxxx.json --profile accountb
解決方法

awsのコマンド実行前に環境変数「AWS_SHARED_CREDENTIALS_FILE」で使用するcredentialsファイルを指定する

コマンド例
export AWS_SHARED_CREDENTIALS_FILE="~/.aws/credentials"; aws s3 cp s3://s3buket/xxxxx/xxxxx.json ./xxxxx.json --profile accountb
終わりに

AWSアカウントの使い分けや外部企業との連携でクロスアカウントでの運用はサービスが拡大するといろいろと想定されるかと思います。 そんな時に、この記事が皆さんの参考になると嬉しいです。

www.slideshare.net