【AWSの基本を学ぶ】AWS SDKを利用してみよう!【S3 コンストラクタ編】

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

うえじゅんです。
AWSの基本を学ぶシリーズとして、AWS SDKを利用してS3のオブジェクトを作成するところまでを書いてみます。

ちなみにサンプルはRubyで書こうかと思っていたのですが、基本を学ぶ意味ではJavaの方が理解しやすいと思ったのでJavaで書いてみます。
RubyでもというリクエストがあればRuby版を検討したいと思いますw

コンストラクタ

コンストラクタと侮る無かれ!
見ての通り5つもあるわけですよw
意図を理解して使えば利用するものは決まってくるのであまり困るものではないのですが、初見では困るんじゃないかなと。

AmazonS3Client() 
          Constructs a new client to invoke service methods on Amazon S3.
AmazonS3Client(AWSCredentials awsCredentials) 
          Constructs a new Amazon S3 client using the specified AWS credentials to access Amazon S3.
AmazonS3Client(AWSCredentials awsCredentials, ClientConfiguration clientConfiguration) 
          Constructs a new Amazon S3 client using the specified AWS credentials and client configuration to access Amazon S3.
AmazonS3Client(AWSCredentialsProvider credentialsProvider) 
          Constructs a new Amazon S3 client using the specified AWS credentials provider to access Amazon S3.
AmazonS3Client(AWSCredentialsProvider credentialsProvider, ClientConfiguration clientConfiguration) 
          Constructs a new Amazon S3 client using the specified AWS credentials and client configuration to access Amazon S3.

では1つずつ見て行きたいと思います。

AmazonS3Client()

引数ありの他のコンストラクタと違ってAWSサービスへのアクセス認証情報をセットしないと思われる方がいるのではないでしょうか。
内部的には AWSCredentialsProviderChain が呼ばれていて、以下の3つから認証情報を探してセットしてくれます。

  • Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_KEY
    環境変数から取得
  • Java System Properties - aws.accessKeyId and aws.secretKey
    システムプロパティから取得
  • Instance profile credentials delivered through the Amazon EC2 metadata service
    EC2のメタデータから取得

EC2のメタデータから取得については、ちょっと特殊なので割愛しますが、そのうち誰かが書いてくれるでしょうw
(都元さんとか|д゚)チラッ)

取得できなかった場合は、nullがセットされるようです。

サンプルコード

AmazonS3 s3 = new AmazonS3Client();

AmazonS3Client(AWSCredentials awsCredentials)

このコンストラクタは事前に認証情報を作成している場合や独自のProviderを利用している時に使うのが主な用途になります。

AWSCredentialsProviderChain が便利なので、独自Providerを作って利用したりしましょう。

サンプルコード

AWSCredentialsProviderChain cpc = new AWSCredentialsProviderChain(
        new InstanceProfileCredentialsProvider()
        , new EnvironmentVariableCredentialsProvider()
        , new ClasspathPropertiesFileCredentialsProvider()
);
s3 = new AmazonS3Client(cpc.getCredentials());

上記であれば、EC2のメタデータへアクセス認証情報を探しに行き見つからなければ、環境変数、クラスパスへと探しにいきます。

AmazonS3Client(AWSCredentials awsCredentials, ClientConfiguration clientConfiguration)

AWSCredentials については前述と同様です。
ClientConfiguration については、proxy等細かい設定をしたい場合に利用します。
この辺りも誰かが(ry

AmazonS3Client(AWSCredentialsProvider credentialsProvider)

AWSCredentialsProvider を指定するコンストラクタです。
「AwsCredentials.properties」ファイルにアクセス認証情報を記載している時や環境変数から取得する時等、取得場所が特定できている時に利用します。

サンプルコード

AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());

上記であれば、「AwsCredentials.properties」ファイルを探してセットしてくれます。

 AmazonS3Client(AWSCredentialsProvider credentialsProvider, ClientConfiguration clientConfiguration)

前述の AWSCredentialsProvider と前述の ClientConfiguration をセットするものです。

まとめ

今回はS3オブジェクトを作成するところまで説明しました。

スタンダードな方法としては、「AmazonS3Client(AWSCredentialsProvider credentialsProvider)」を利用する形になると思います。
AWSから提供されているサンプルも上記が利用されています。

しかし実際には開発環境、本番環境と環境ごとに異なる認証情報になると思いますので、環境ごとに異なる情報を指定する必要があると思いますので、そのあたりはビルドツール等でカバーする、もしくは環境変数等に指定をしておいてAMIを作成しておく等の工夫が必要ですね。

さて次回はバケットを作成してみたいと思います。