LoginSignup
0
0

Go言語でAWSを操る: パッケージsessionについて

Last updated at Posted at 2024-02-06

Go言語でAWSを操る: パッケージsessionについて

とあるバンドマン

「いやー、いいセッションだったね」

「こちらこそ、魂が震えるライブだった」

「それにしてもこんな所で、こんな良いギタリストに出会えるとは」

「私こそ!こんなに良いドラマーに出会えるとは」

「いやー」

「いやー」

「「ここが異世界でなければなー」」

「あの私たちをひいてきたトラックの運転手、戻れたら一発殴りましょう」

「一発じゃ足りませんよ」

「はっはっは!そうですな!」

「いやはや、またいいセッションになりそうだ」


目次

1. AWSとGo言語

AWSとは

 AWS (Amazon Web Services) はアマゾン・ドット・コム(Amazon.com)が提供するクラウドコンピューティングプラットフォームおよびサービスのことを言います。

 AWSには、仮想サーバー(Amazon EC2)、オブジェクトストレージ(Amazon S3)、データベースサービス(Amazon RDS)、サーバーレスコンピューティング(Amazon Lambda)、機械学習プラットフォーム(Amazon SageMaker)など、多くのサービスが含まれています。

AWSとGo言語の関係

 Go言語は、AWS上でのアプリケーション開発やスクリプトの作成に使用できます。例えば、Go言語を使用してAWS SDK(Software Development Kit)(ソフトウェア開発キット)を利用し、AWSのサービスを操作することができます。

 github.com/aws/aws-sdk-go/awsを利用して様々な機能を実現できるのです。

その一つがパッケージsessionです。

2. パッケージsession

 パッケージsessionは、AWS SDKの一部で、セッション情報を管理するための機能を提供します。

 セッション情報はAWSサービスへの認証情報やリージョン情報などを含むため、アプリケーションがAWSサービスにアクセスする際に必要な情報を管理するのに役立ちます。

 
 github.com/aws/aws-sdk-go/aws/sessionにまとめられています。

3. パッケージsessionの関数

session - Amazon Web Services - Go SDK

type AssumeRoleTokenProviderNotSetError
    func (e AssumeRoleTokenProviderNotSetError) Code() string
    func (e AssumeRoleTokenProviderNotSetError) Error() string
    func (e AssumeRoleTokenProviderNotSetError) Message() string
    func (e AssumeRoleTokenProviderNotSetError) OrigErr() error
type CredentialRequiresARNError
    func (e CredentialRequiresARNError) Code() string
    func (e CredentialRequiresARNError) Error() string
    func (e CredentialRequiresARNError) Message() string
    func (e CredentialRequiresARNError) OrigErr() error
type CredentialsProviderOptions
type Options
type Session
    func Must(sess *Session, err error) *Session
    func New(cfgs ...*aws.Config) *Session
    func NewSession(cfgs ...*aws.Config) (*Session, error)
    func NewSessionWithOptions(opts Options) (*Session, error)
    func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Config
    func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Config
    func (s *Session) Copy(cfgs ...*aws.Config) *Session
type SharedConfigAssumeRoleError
    func (e SharedConfigAssumeRoleError) Code() string
    func (e SharedConfigAssumeRoleError) Error() string
    func (e SharedConfigAssumeRoleError) Message() string
    func (e SharedConfigAssumeRoleError) OrigErr() error
type SharedConfigLoadError
    func (e SharedConfigLoadError) Code() string
    func (e SharedConfigLoadError) Error() string
    func (e SharedConfigLoadError) Message() string
    func (e SharedConfigLoadError) OrigErr() error
type SharedConfigProfileNotExistsError
    func (e SharedConfigProfileNotExistsError) Code() string
    func (e SharedConfigProfileNotExistsError) Error() string
    func (e SharedConfigProfileNotExistsError) Message() string
    func (e SharedConfigProfileNotExistsError) OrigErr() error
type SharedConfigState

 多いですね。
以下に簡単に意味と使い方をまとめます。

1. AssumeRoleTokenProviderNotSetError

説明: AssumeRoleTokenProviderNotSetErrorは、AWSのAssumeRole関数を使用する際に、トークンプロバイダーが設定されていない場合に発生します。

 トークンプロバイダーは、セキュリティトークンサービス (STS) などの認証サービスによって発行されるセキュリティトークンを取得、管理するためのコンポーネントや機能のことを指します。クラウド環境や分散システムにおいて、ユーザー認証やサービス間認証を行う際に使用されます。

 要するに、トークンプロバイダーはセキュリティ認証情報を安全に取得し、サービス間の認証に使用されるトークンを管理するやつです。

メソッド:

  • Code(): エラーコードを返します。
  • Error(): 標準エラーメッセージを返します。
  • Message(): エラーの詳細な説明を返します。
  • OrigErr(): 原因となるエラーを返します。

コード例

if err, ok := err.(awserr.Error); ok && err.Code() == "AssumeRoleTokenProviderNotSetError" {
    fmt.Println(err.Message())
}

2. CredentialRequiresARNError

説明: CredentialRequiresARNErrorは、クレデンシャルがアクセスキーの代わりにARNを必要とする場合に発生します。

  • クレデンシャル (Credentials):

クレデンシャルは、AWSサービスに対して認証を行うために使用されるデータのセットです。これには、AWSアカウントの識別情報が含まれています。
クレデンシャルには通常、アクセスキーIDとシークレットアクセスキーが含まれます。これらは、プログラムによるAWSの利用やAPIコールを認証するために使用されます。

  • アクセスキー (Access Key):

アクセスキーは、AWSクレデンシャルの一部であり、アクセスキーIDとシークレットアクセスキーの組み合わせです。
アクセスキーIDは公開情報として扱われますが、シークレットアクセスキーは秘密情報として厳重に管理する必要があります。
この組み合わせを使用して、プログラムからAWSサービスに安全にリクエストを行います。

  • ARN (Amazon Resource Name):

ARNは、AWS内のリソースを一意に識別するための識別子です。
ARNを使用することで、ユーザー、ロール、S3バケットなど、AWSのどのリソースに対しても、そのリソースを一意に識別できます。
形式は通常 arn:partition:service:region:account-id:resource です。例えば、特定のIAMユーザーのARNは arn:aws:iam::123456789012:user/JohnDoe のようになります。


 要するに、CredentialRequiresARNErrorは、AWSにログインするための通常の「鍵(アクセスキー)」ではなく、特定の「住所(ARN)」を使ってアクセスしないといけない場面で、「住所」を教えていないときに出るエラーです。


メソッド: 
  上のAssumeRoleTokenProviderNotSetErrorと同じです。

コード例

if err, ok := err.(awserr.Error); ok && err.Code() == "CredentialRequiresARNError" {
    fmt.Println(err.Message())
}

3. Session

説明: SessionはAWSセッションを管理し、設定とクレデンシャル情報を保存します。

主要メソッド:

  • New(): 新しいセッションを作成します。
  • Must(sess *Session, err error): セッションを確実に取得し、エラーがあればpanicを引き起こします。
  • Copy(): セッションをコピーし、新しいセッションを作成します。

コード例

sess, err := session.NewSession()
if err != nil {
    fmt.Println("Failed to create session,", err)
    return
}

4. SharedConfigAssumeRoleError, SharedConfigLoadError, SharedConfigProfileNotExistsError

説明: これらのエラーは、共有設定やプロファイルに関連する問題がある場合に発生します。

メソッド:
  上のAssumeRoleTokenProviderNotSetErrorとかのエラー達と同じです。

コード例

if err, ok := err.(awserr.Error); ok && err.Code() == "SharedConfigLoadError" {
    fmt.Println(err.Message())
}

 ぶっちゃけ、3番のSessionが大事だと思うので、あとはエラーと思っておけば良さそうです。(まだそんなに深く触ってないので謎ですが)

4. おわりに

 今、Go言語とAWSを使って開発をしているのですが、すごく便利で、設定さえしてしまえば、こんなに簡単にクラウドにデータが保存できるのか、と驚いております。

 他にも色々と機能があるので、使っていきたいです。

人工衛星とか面白そう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0